ISC10, ISC10 |
die frage ist, wofür steht ISC - dann könnte man sich das einfacher merken. Mal gucken, vielleicht in der AVR Beschreibung.
Und was ist das für ein Register
GICR |
gicer - das klingt scheisse, aber was ist
GICR |
und was ist das hier
MCUCR |
Ach, so, ich verstehe wie das geht, was auch immer das heisst
sei |
Also, falsch
Aber was ist
ISC |
GICR |
Ohne zu gucken, weiss ich was
GICR |
GICR |
GICR |
Also
Und wie heissen die Bits für die einzelnen Interrupts. Na ja, die Bits heissen
INT0, INT1, INT2, ... |
GICR |
Global Interrupt Controll Register. |
Ich verstehe es noch besser.
Die interrupts heissen
INT0, INT1, ... |
INT0, INT1, INT2, ... |
INT0addr INT1addr |
Die Interrupts haben Namen.
INT0 |
INT1 |
das
INT0addr |
also, wenn das Interrupt
INT0 |
INT0addr |
OK. Und aktivieren tue ich in
GICR |
ldi r16, (1 << INT0) |
INT0 |
1, 2, 3, 4, 5, ... |
Was das
.org |
es ist halt
INT0addr |
Und
.org INT0addr |
Das stimmt nur zu 15Prozent bis 25Prozent.
Richtig ist, dass
GICR laut Seite 47 Atmega8, f"ur \begin{lstlisting}General Interrupt Controll Register |
Aber -
GICR |
INT1 |
INT0 |
also steht
1 << INT1 |
1 << 7 |
INT0 |
INT1 |
Und trotzdem:
Global Interrupt Controll Register |
IVSEL |
Interrupt Vector Select |
INT0addr |
Und dann: Dann ist das eine relativ kompliziertere Sache, die braucht man nicht das
IVSEL |
Dann noch ein Bit, das
IVCE |
IVSEL |
OK und was ist?
Also, jetzt kommt noch
MCUCR |
MCU Controll Register |
Aber warum
MCU |
Oder irre ich mich. Wenn aber die externen interrupts im Mikrocontroller Controll Register eingestellt werden, warum ausgerechnet im Allgemeinen Controller Register, diese zwei?
Ich meine ist halt so - ich will mir das nur vor Augen führen.
OK, erst gucken, was ist MCU -
Microcontroller Unit, siehe Mikrocontroller
steht bei wikipedia. Also tatsächlich
Dann die Bits darin
-
ISC11, ISC10 |
Interrupt Sense Control |
ISC |
Interrupt Sense Control |
Das ergibt für mich einen Sinn. Weil
INT0 |
INT1 |
GICR |
Global Interrupt Control Register |
INT0 |
INT1 |
ISC00 |
OK
Dann gibt es
Global Interrupt Controll Register |
MCU Controll Register |
alles klar.
OK, Englisch unterricht
The House of the Rising sun The House of the falling sun |
negative edge triggered - ist - falling edge
Das muss man sich merken
Negative Taktflanke - ist negative edge ist falling edge
Und dagegen
positive Taktflanke - rising edge
Dann gibt es low level - einfach LOW - aktiv und logical change
logical change = rising edge OR falling edge
OK, klar dann gibt
0 0 0 1 1 0 1 1 |
ISC11 |
ISC10 |
Also 2 Bit - 4 Einstellungen für
INT1 \begin{lstlisting}ISC11 |
ISC10 |
INT0 ISC01 ISC00 |
Und das ist
Interrupt Sence Controll |
SM2, SM1, ... |
Dann lohnt sich das Blockschaltbild vom USART
Also, wenn ich was seriell übertrage - ein Byte - was nehme ich dafür ein Schieberegister das wäre das einfachste
Entweder einen MUX - also
8:1 |
was brauche ich noch - das lohnt sich
Wenn ich das Schieberegister nehme, dann kann ich ja Parität machen. Ich schiebe das Wort oder Byte durch
Jetzt zähle ich mit - ich zähle - 4 Bit - HIGH - dann Parität?
HIGH |
LOW |
Aber es gibt eine bessere Logik
entweder vermutet mit
XOR |
Also, wenn ich 1er durchzähle durch das Schieberegister, kommen die einzeln raus, dann jedes Mal, wenn eine 1 kommt, invertieren und wieder invertieren,parität ist gefunden.
Das ist ja jetzt nicht kompliziert vom Blockschaltbild
XCK |
UDR |
UDR |
UCSRA, UCSRB, UCSRC |
UDR = UDR Transmit + UDR Recieve |
OK, einen Fehler habe ich immer gemacht
Ich habe das
USCRA, UCSRB, USCRC |
UART Controll and Status Register |
Dann kann ich mir was erklären, die Formel für die Baudrate ist
UBRR = CPU_CLK / (BAUDRATE * 16) -1 |
/16*... |
und da ist ein
/2 /4 /2 |
macht
/2*4*2 = /16 |
Das klingt logisch
Ah, jetzt ist alles klar
Was ist
CCITT-1 |
Und wofür ist Data Flow
Das habe ich früher immer verwechselt
Es gibt einen Programm Fluss. Und einen Data Flow
Und der Datenfluss - also es gibt ja ASM Diagramme - das lernt in Computersysteme I/II das sind Hardware algorithmen, darstellung
Dann gibt es Flowcharts - und die sind aber teilweise für Assembler, also Programm Fluss. Das eine ist Hardware Algorithmus ASM Diagramm, der Flowchart ähnlich für Assembler, ich sage mal Flowchart - wenn das Wort stimmt
Und - RTL - Notation ist Hardware, nicht Assembler
Und dann gibt es den Data Flow, da haben die mich durcheinander gebracht
Das ist Handshaking. Das
ACK/NAK |
X-ON/X-OFF |
Das ist entweder
Das ist beim assynchronen - und der
CCITT-1 |
Jetzt ist RS-232, aber Asynchron - mit dem UART und jetzt kommt der AVR - Atmega8 und hat einen USART
Und was das ist
Universal Synchron/Asynchron Reciever Transmitter -
und was heisst das - es geht synchron - ich kann jetzt den
Also, Master und Slave, und dann muss das Taktsignal, ich kann es einspeisen, von aussen. Alles klar
Und das muss ich einestellen, dafür gibt es bit.
OK, schlussendlich nicht kompliziert, die Bit halt
UCSRA, UCSRB, UCSRC |
Was muss ich machen, bei überhaupt Interrupt oder wie auch immer - ich meine RS-232
Dann muss wohl noch Interrupts aktivieren
aber ich muss getrennt davon, RS-232 aktivieren
Dann gibt es das mit
Und das ist -
TXEN - Transmit Enable RXEN - Recieve Enable |
UCSRB |
dann kommt -
das muss ich lernen
das habe ich bisher nie angeguckt
Parität ist klar - odd oder even
Dann ist mir klar wann 0 oder 1
Wenn die Parität even - gerade ist - dann sind es 7 1er. Dann ist die Parität auf even eingestellt, dann ist das Paritätsbit 0. Aber jetzt 8 1er und jetzt das Paritätsbit 1
Und jetzt machen wir die Parität odd und es kommen 1er - dann 1...
Dann muss man wisssen
unabhängig ist start bit immer LOW und Stopbit immer HIGH
alles klar. Und was ist
IDLE |
IDLE |
und jetzt weiter. Ich verstehe was
IDLE bei RS-232 ist. Wenn ich einen Text mit 5 Byte "ubertrage und jetzt ist vorher nichts und nachher nichts, ich habe die 5 Byte "ubertragen, ich habe das Kabel dran gelassen, was ist dann? \begin{lstlisting}IDLE |
Da steht für die Parität tatsächlich eine Formel
XOR |
d_(n-1) XOR ... d_1 XOR d_0 ... |
d_(n-1) XOR ... d_1 XOR d_0 XOR 0 |
Und dann ist das logisch. Wenn ich 8 Bit habe und ich mache XOR 0, dann ist das gerade. Sonst
d_(n-1) XOR ... d_1 XOR d_0 XOR 1 |
klar
Und jetzt kann ich das einstellen
UCSZ2:0 |
USART Character Size |
UPM1:0 |
USART Parity Mode |
USART |
Stop Bit Select - USBS |
es gibt noch das Bit - das ist kein Register
UDRE - UART Data Register Empty |
Und das geht so
Init ist beschrieben, Recieve
in r16, UDR |
out UDR, r16 |
in r16, UDR |
Dann verschiedenen Bit, in
UCSRA, UCSRB, UCSRC |
RXC, TXC, UDRE, FE - Frame Error |
Frame Error, Data OverRun, Parity Error, |
RXCIE, ... |
lauter so Sachen, kann man lernen. Und dann bleibt die Baud Rate. Dafür brauche ich keinen rechner, da sind lauter tabellen, die geben die Baudrate an.