Alles korrekt meiner Meinung funktioniert auch, das "Hallo" ist auf der
Konsole zu sehen. Daten gehen auch korrekt ins RX Hold Register. Mit
Debugger nachgeschaut was ankommt.
Also sollte alles korrekt sein ? Mein Problem das Frame Error kommt
nicht so wie man es erwarten würde. Wenn es überhaupt kommt. Normal
wird es gesetzt wenn nach dem letzten RSTSTA mindestens ein Stopbit 0
war.
Komischer weise löst es dann eben nicht aus. Alle anderen Funktionen wie
break oder der Timeout funktionieren wie sie sollen.
Nur das break vom DMX512 wird nicht erkannt, obwohl die USART RXRDY
setzt. Nun habe ich mir mit den break status beholfen das Startbit vom
DMX zu erkennen das funktioniert auch, ist aber nicht das non plus
ultra.
Ich steh jetzt völlig ratlos auf den Schlauch, mit einen AVR war das
kein Thema.
1 |
|
2 | // set USART0 outputs
|
3 | pio_configure(PIOA,PIO_PERIPH_A,PIO_PA11A_TXD0,PIO_PULLUP);
|
4 | pio_configure(PIOA,PIO_PERIPH_A,PIO_PA11A_TXD0,PIO_PULLUP);
|
5 | // enable clock
|
6 | pmc_enable_periph_clk(ID_USART0);
|
7 | // config USART0 for DMX 250kbit 8bit,2 stopbits and no parity
|
8 | usart_config.baudrate=250000;
|
9 | usart_config.channel_mode=US_MR_CHMODE_NORMAL;
|
10 | usart_config.char_length=US_MR_CHRL_8_BIT;
|
11 | usart_config.stop_bits=US_MR_NBSTOP_2_BIT;
|
12 | usart_config.parity_type=US_MR_PAR_NO;
|
13 |
|
14 |
|
15 | usart_init_rs232(USART0,&usart_config, 84000000);
|
16 | //usart_set_rx_timeout(USART0,12);
|
17 | //usart_start_rx_timeout(USART0);
|
18 | // enable interrupt
|
19 | usart_enable_interrupt(USART0,US_IMR_RXRDY);
|
20 | NVIC_EnableIRQ(USART0_IRQn);
|
21 | // enable USART0
|
22 | usart_enable_rx(USART0);
|
23 | usart_enable_tx(USART0);
|
24 |
|
25 | usart_write_line(USART0,"hallo\n");
|