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
MCUCRWofür steht das? Das gucken wir in der AVR Beschreibung an.
Ach, so, ich verstehe wie das geht, was auch immer das heisst
seiDann sind alle Interrupts an
Also, falsch
Aber was ist
ISC- wofür steht das? Und wofür steht
GICR?
Ohne zu gucken, weiss ich was
GICRist -
GICRist nicht etwa, das Register, wo man die Taktflanken für das externe einstellt, sondern
GICRist das wo man die Interrupts allgemein aktiviert
Also
Und wie heissen die Bits für die einzelnen Interrupts. Na ja, die Bits heissen
INT0, INT1, INT2, ...Und - was ist dann
GICR
Global Interrupt Controll Register.Würde ich mal sagen - weil global stelle ich die einzelnen Interrupts an. Gucken wir mal
Ich verstehe es noch besser.
Die interrupts heissen
INT0, INT1, ...aber nicht
INT0, INT1, INT2, ...weil, ich kenne die Adressen von den externen Interrupts - die gehen
INT0addr INT1addrAber dann nicht so weiter.
Die Interrupts haben Namen.
INT0und
INT1stehen nur für die externen. Das ist logisch
das
INT0addrist die Adresse im interruptvektortabelle zur Einsprungsaddresse für die Interruptroutine
also, wenn das Interrupt
INT0heisst, dann heisst die Addresse in der Interruptvektortabelle, das ist keiner ich weiss -
INT0addr
OK. Und aktivieren tue ich in
GICR- global interrupt controll register, mit
ldi r16, (1 << INT0)OK - dann ist
INT0zum Beispiel eine Definition für
1, 2, 3, 4, 5, ....
Was das
.orgsoll, weiss ich inzwischen
es ist halt
INT0addrals Addresse definiert
Und
.org INT0addrdann steht diese Addresse, da kommt das hin. Jetzt muss ich überprüfen ob meine annahme stimmt
Das stimmt nur zu 15Prozent bis 25Prozent.
Richtig ist, dass
GICR laut Seite 47 Atmega8, f"ur \begin{verbatim}General Interrupt Controll Registersteht
Aber -
GICR- aktiviert, das sind 100Prozent richtig, die Interrupts
INT1und
INT0und zwar sind das Bit 6 und 7
also steht
1 << INT1für
1 << 7Falsch ist, dass die anderen Interrupts - für UART und so hier aktiviert werden, also nur -
INT0und
INT1, extern. Der Rest muss in den spezifischen Registern des UART I2C Registern was auch immer aktiviert werden
Und trotzdem:
Global Interrupt Controll Register, heisst,
IVSELsteht für
Interrupt Vector SelectIch habe ja - das ist zunächst ein Bit -
INT0addr. Die ist jetzt egal wo. Und Interrupt Vector Select, heisst, gelösch, immer am Anfang. OK.
Und dann: Dann ist das eine relativ kompliziertere Sache, die braucht man nicht das
IVSELbraucht man nicht, normal
Dann noch ein Bit, das
IVCE- wenn man
IVSELbraucht, dann muss das schreiben und das geht nicht so einfach, das hängt dann mit den Fuses beim schreiben zusammen, dann muss man da was machen. Das braucht man erst mal nicht
OK und was ist?
Also, jetzt kommt noch
MCUCRdas steht für
MCU Controll Register
Aber warum
MCU- das geht bei mir Mikrocontroller - so wie CPU Central Processing Unit.
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 Control1 Bit 1 and Bit 0
ISC- steht für
Interrupt Sense Control
Das ergibt für mich einen Sinn. Weil
INT0und
INT1in
GICR-
Global Interrupt Control Register- sind - das aktivieren, von
INT0und
INT1und
ISC00... sind dazu da
HIGH...
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 sunDas muss wissen
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 1je nachdem,
ISC11und
ISC10
Also 2 Bit - 4 Einstellungen für
INT1 \begin{verbatim}ISC11und
ISC10und dann für
INT0 ISC01 ISC00
Und das ist
Interrupt Sence Controll. Alles klar. Jetzt der UART.
SM2, SM1, ...spielt keine Rolle.
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:1MUX oder - ein schieberegister. Beim USART ein Schieberegister
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?
HIGHoder
LOW? Egal
Aber es gibt eine bessere Logik
entweder vermutet mit
XOR- das alte Ergebnis oder eben immer invertieren
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, USCRCrichtiger weise, zu UART Controll Register benannt und fälschlicherweise Status ausgelassen
UART Controll and Status Register.
Dann kann ich mir was erklären, die Formel für die Baudrate ist
UBRR = CPU_CLK / (BAUDRATE * 16) -1Und Prescaler - der zählt halt mit den CPU Takt und nur beim Prescaling so und so gibt es halt einen UART Takt. Baudrate ... Aber die Formel lautet
/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? Das ist Baudot Code - 5 Bit synchroner digitaler Code. OK - und was ist der synchron
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-1ist synchron, also mit Taktübertragung
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 EnableUnd das ist Zufall in
UCSRB- alles klar
dann kommt -
das muss ich lernen
1 start bit
5, 7, 8, 9 data bits
no, even, odd parity- gerade oder ungerade
1 oder 2 Stop bits
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
IDLEbegegnet bei Minix, nachgucken -
IDLEsteht für untätig/leerlauf, alles klar. Untätiger Prozess. Alles klar.
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{verbatim}IDLE- natürlich
Da steht für die Parität tatsächlich eine Formel
XOR
d_(n-1) XOR ... d_1 XOR d_0 ...Und dann bei der geraden ist es:
d_(n-1) XOR ... d_1 XOR d_0 XOR 0odd und even nicht verwechseln - even ist gerade, das habe ich falsch gemacht. - OK - dass muss ich lernen
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- alles klar - USART Character Size, ist logisch - 3 Bit, reicht für 0..7 oder 1..8
UPM1:0:
USART Parity Mode- 2 Bit - odd, even, no
USART
Stop Bit Select - USBS- alles klar.
es gibt noch das Bit - das ist kein Register
UDRE - UART Data Register EmptyUnd jetzt gibt es
Und das geht so
Init ist beschrieben, Recieve
in r16, UDRTransmit
out UDR, r16bleibt die Frage, was ist bei 9 Bit - geht nicht. weil
in r16, UDRgeht mit 9 bit nicht. Bei 8 bit r16, aber da ist eine Lösung
Dann verschiedenen Bit, in
UCSRA, UCSRB, UCSRC- beim Recieve und Transmit, muss status abfrage noch rein und bleibt, bits:
RXC, TXC, UDRE, FE - Frame Error- lauter status bit,
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.