Hi, hab grad ein kleines problem mit dem empfangen von dmx-datenpaketen (512 Werte): es werden zwar alle Kanäle empfangen, allerdings löst die ISR nicht 512x aus sondern 514x aus; bei allen Interrupts ist auch das AT91C_US_RXRDY Bit gesetzt. entsprechend ist der erste DMX-Wert im Array nicht der Wert Array[0] sondern der Wert Array[1]. Sprich die ISR empfängt einen Interrupt nach der Break, dann empfängt die ISR alle 512 Kanäle und anschließend nochmals einen Interrupt (wenn die Break anfängt)).... Ist das normal? Baudrate 250kBaud, und Clock vom Prozessor stimmen; 8 Datenbits, zwei Stoppbits und ein Startbit sind auch ausgewählt. Gruß Bernd
Für den empfangenden UART ist der Break ein Frame-Error. Je nach dem wie er konfiguriert ist (bzw. sich konfigurieren läßt) löst auch ein Frame-Error einen Interrupt aus. Die ISR muß dann anhand der Status-Flags des UART unterscheiden, welcher Fall vorliegt.
das hab ich auch - beim AT91SAM9263 Prozessor ist das dann ein
1 | if( ulStatus & AT91C_US_RXRDY ) |
2 | { |
3 | cntr++; |
4 | } |
5 | |
6 | if((ulStatus & AT91C_US_RXBRK) == AT91C_US_RXBRK) |
7 | { |
8 | //um den break zu erkennen |
9 | //hier ist dann cntr = 0x202 |
10 | } |
Gruß Bernd
Könnte es sein, daß beim Break beide Flags gesetzt sind, z.B. weil AT91C_US_RXRDY nach jedem empfangenen Byte explizit zurückgesetzt werden müßte?
Hallo, DMX heisst doch: FE, 0, Byte1, Byte2, ...Byte512 Wenn der Frame Error und das Startbyte was immer 0 sein muss mitgezählt werden dann ergeben sich 514 Interrupts! MFG Mixer
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.