Forum: Mikrocontroller und Digitale Elektronik ATtiny861 Interruptvektoren für Bootloader manipulieren


von Sebastian Z. (sz1985)


Lesenswert?

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

von Purzel H. (hacky)


Lesenswert?

Interrupts in einem Bootloader sind eh eine schlechte Idee.

von Sebastian Z. (sz1985)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Sebastian Z. (sz1985)


Lesenswert?

Das ist schon klar. Aber da ich eine SUART verwende, bin ich zum 
empfangen von Daten auf einen Externen InterruPt angewiesen.

von Peter D. (peda)


Lesenswert?

Interrupts braucht man nur, wenn gleichzeitig noch was anderes gemacht 
werden muß.
Ansonsten pollt man einfach den Pin oder das Flag.


Peter

von Vlad T. (vlad_tepesch)


Lesenswert?

mit Peter Danneggers und Hagen Res Bootloader gibt es bereits zwei sehr 
gute software-Uart-Bootloader

Warum nicht einfach einen davon nehmen?

von Sebastian Z. (sz1985)


Lesenswert?

Bei einer SUART benötige ich aber auch zum Pollen ein Interrupt.

von Vlad T. (vlad_tepesch)


Lesenswert?

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

von Sebastian Z. (sz1985)


Lesenswert?

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?

von Vlad T. (vlad_tepesch)


Lesenswert?

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

von Stefan E. (sternst)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Vlad T. (vlad_tepesch)


Lesenswert?

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.

von Sebastian Z. (sz1985)


Lesenswert?

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
Noch kein Account? Hier anmelden.