mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Keine Interrupts im Bootloader


Autor: Andreas Engler (andrease112)
Datum:

Bewertung
0 lesenswert
nicht 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';
    }
  }
}

Autor: xelarep (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollte prinzipiell gehen.

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

xelarep

Autor: Andreas (Gast)
Datum:

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

mein controller ist ein Atmega88

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Saga (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.