Forum: Mikrocontroller und Digitale Elektronik Keine Interrupts im Bootloader


von Andreas E. (andrease112)


Lesenswert?

Hallo Leute ich vesuche gerade einen Bootloader zu schreiben, im Prinzip 
iss alles klar, nur bekomm ich die Interrupts für die UART nicht ins 
laufen.
Ohne ints funzt der UART, aber dass iss ja nicht sinn der Sache.
Ich habe die BTL Startadresse 0xC00
und die Interrupttabelle habe ich auch verschoben, fehlt da noch was ?
Ich benutze die UART LIB von Peter Fleury

Gruß Andreas

hier mein Code:

#include<avr/io.h>
#include<avr/boot.h>
#include <avr/interrupt.h>
//#include"i2cmaster.h"
#include <avr/wdt.h>
#include "uart.h"


#define cbi(REG,bit) REG &= ~(1<<bit)
volatile unsigned int  PageSize;
volatile unsigned int  PageStartAdress;
volatile unsigned int  Pagecount;
volatile unsigned char Bootloader_Request_Flag;

void (*jump_to_main_application)( void ) = 0x0000;


int main(void)
{
/*
  unsigned int wait=0;

        GICR=(1<<IVCE);
  GICR=(1<<IVSEL);

   uart_init ( UART_BAUD_SELECT  (9600 ,16000000 ));

  sei();
  while ( 1 )
  {
  wait ++;
    if ( wait == 0 )
    {
         uart_putc('H');
    //UDR  = 'H';
    }
  }
}

von xelarep (Gast)


Lesenswert?

Sollte prinzipiell gehen.

Welcher AVR Controller? Wie verbiegst Du in deinem makefile die .text 
section nach 0xc00?

xelarep

von Andreas (Gast)


Lesenswert?

Na in den Projekteinstellungen -> Memory Settings -> neuer Eintrag (add) 
-> (Typ=Flash),(Name=.text),(Adress=0xC00)

mein controller ist ein Atmega88

von Stefan E. (sternst)


Lesenswert?

Andreas schrieb:
> mein controller ist ein Atmega88

Tatsächlich? Und wie passt das mit diesen Zeilen zusammen?
> GICR=(1<<IVCE);
> GICR=(1<<IVSEL);
Der ATmega88 hat überhaupt kein Register "GICR".
Und was hat das vereinzelte "/*" gleich am Anfang von main da zu suchen?
Und wo ist überhaupt die ISR, die nicht funktionieren soll?

Poste mal den echten Code, dann kann man vielleicht auch was Konkretes 
zu deinem Problem sagen.

von Saga (Gast)


Lesenswert?

Ich empfehle für das Verbiegen der IRQ-Tabelle Assembler-Routinen zu 
nutzen, um sicherzustellen, dass die Taktanforderung (Umschaltung 
innerhalb von 4 Taktzyklen) garantiert eingehalten wird - auch ohne 
Optimizer. Entsprechende Beispielcodes findet man in den Datenblättern/ 
ANs der Controller. Wenn du uns nicht mitteilst, welchen Controller du 
tatsächlich einsetzt, dann können wir dir nicht weiterhelfen.

Gruß,
Saga

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.