Hallo zusammen, ich bin gerade dabei einen Bootloader für einen ATtiny861 zu schreiben, in dem für die SUART einmal den Interrupt für den Timer0 und Pin Change Interrupt benötige. Das Problem ist, dass der µC von Haus aus kein Register (GICR Bit IVCE & IVSEL) zum Ändern der Interruptadressen für den Bootlaoder bietet, wie z.B. ein ATmega32. Gibt eine andere Möglichkeit die Adressen der Interrupts zu manipulieren? Vielen Dank für eure Hilfe! Gruss Sebastian
Interrupts in einem Bootloader sind eh eine schlechte Idee.
Sept Oschi schrieb: > Interrupts in einem Bootloader sind eh eine schlechte Idee. Aber wenn ich Daten empfangen möchte um neue Daten zu flashen, benötige ich Interrupts.
Sebastian Z. schrieb: > Aber wenn ich Daten empfangen möchte um neue Daten zu flashen, benötige > ich Interrupts. Warum? Was muß denn der Bootloader so wichtiges noch gleichzeitig zum Datenempfang machen? Du kannst eh nicht Flashen und Empfangen gleichzeitig, da die CPU beim Flashen angehalten wird. Du brauchts also ein Protokoll, daß beim Flashen keine neuen Daten gesendet werden. Peter
Das ist schon klar. Aber da ich eine SUART verwende, bin ich zum empfangen von Daten auf einen Externen InterruPt angewiesen.
Interrupts braucht man nur, wenn gleichzeitig noch was anderes gemacht werden muß. Ansonsten pollt man einfach den Pin oder das Flag. Peter
mit Peter Danneggers und Hagen Res Bootloader gibt es bereits zwei sehr gute software-Uart-Bootloader Warum nicht einfach einen davon nehmen?
Bei einer SUART benötige ich aber auch zum Pollen ein Interrupt.
warum? man pollt und synchronisiert auf das Startbit und berechnet dann die Bitzeit und plant da noch eine mind. 3 fache Überabtastung Bei einer angenommenen maximalen Bitrate und minimalen Taktrate, weiß man wieviel Takte man auf jeden Fall Zeit zum rechnen hat und den Rest verplempert man dynamisch in einer Warteschleife. oder man ließt die Daten nur in einen Puffer und wertet sie in einer vom (selbsterdachten) PC-Bootloader-Protokoll festgelegten Pause aus
Beim Start des Bootloaders soll er erst mal an den PC ein Lebenszeichen
sende, anschließend bekommt er den Befehl zur Udpateprogrammierung.
Danach werden je die Daten für eine page gepuffert und anschließend
geschrieben.
>man pollt und synchronisiert auf das Startbit
Woher weiß ich, dass das Bit, das gerade am Eingang anliegt das Startbit
ist?
das weißt du erst, wenn du mindestens ein weiteres High-bit abgetastet hast und eines dieser beiden 1/3 kürzer war, als das andere
Vlad Tepesch schrieb: > das weißt du erst, wenn du mindestens ein weiteres High-bit abgetastet > hast und eines dieser beiden 1/3 kürzer war, als das andere Was ist das für ein Unsinn? Das Startbit hat die gleiche Länge wie die Datenbits.
Sebastian Z. schrieb: > Woher weiß ich, dass das Bit, das gerade am Eingang anliegt das Startbit > ist? Sende ein Byte zur Synchronisation, das nur eine Startflanke hat, z.B. 0xFF. Peter
Stefan Ernst schrieb: > Vlad Tepesch schrieb: >> das weißt du erst, wenn du mindestens ein weiteres High-bit abgetastet >> hast und eines dieser beiden 1/3 kürzer war, als das andere > > Was ist das für ein Unsinn? Das Startbit hat die gleiche Länge wie die > Datenbits. Sorry, du hast recht. Das war das Stopbit, was je nach Einstellung länger oder kürzer sein kann.
Kann mir einer von euch ein Codebeispiel in C zur Verfügung stellen, damit ich sehe, wie ich das implementieren kann? Danke
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.