Hallo,
wenn ich Baudrate 115200 benutzte, funktioniert alles.
Ich würde aber gerne auf 460800 oder 921600 gehen, aber da funktioniert
leider nix mehr.
Als Board benutzte ich das Alvidi xmega128A1 mit 16Mhz Quarz.
PC ist der Alix2d
USART ist per TTL angebunden.
Nutze folgende Clock Init:
1 | void system_clocks_init( void )
|
2 | {
|
3 | /* konfiguriere Taktquelle */
|
4 | CLKSYS_XOSC_Config(OSC_FRQRANGE_12TO16_gc,false,OSC_XOSCSEL_XTAL_16KCLK_gc);
|
5 |
|
6 | /* aktiviere Taktquelle */
|
7 | CLKSYS_Enable( OSC_XOSCEN_bm );
|
8 |
|
9 | /* konfiguriere PLL, Taktquelle, Faktor */
|
10 | CLKSYS_PLL_Config( OSC_PLLSRC_XOSC_gc, 2 );
|
11 |
|
12 | /* aktiviere PLL */
|
13 | CLKSYS_Enable( OSC_PLLEN_bm );
|
14 |
|
15 | /* konfiguriere Prescaler */
|
16 | CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc );
|
17 |
|
18 | /* warte bis takt stabil */
|
19 | do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 );
|
20 |
|
21 | /* wähle neue Taktquelle */
|
22 | CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc );
|
23 |
|
24 | /* deaktiviere internen Oszillator */
|
25 | CLKSYS_Disable( OSC_XOSCEN_bm );
|
26 | }
|
die Uart Init schaut so aus:
1 | void ini_usart(void)
|
2 | {
|
3 | //#define BAUDRATE 115200
|
4 | #define BAUDRATE 921600
|
5 |
|
6 | PORTE.DIRSET = PIN3_bm; // PE3 (TXE0) as output.
|
7 | PORTE.DIRCLR = PIN2_bm; // PE2 (RXE0) as input.
|
8 |
|
9 | USARTE0.CTRLA = USART_RXCINTLVL_MED_gc;
|
10 | USARTE0.CTRLB = USART_RXEN_bm | USART_TXEN_bm;
|
11 | USARTE0.CTRLC = USART_CMODE_ASYNCHRONOUS_gc | USART_CHSIZE_8BIT_gc | USART_PMODE_DISABLED_gc;
|
12 |
|
13 | USARTE0.BAUDCTRLA = ((((F_CPU / BAUDRATE) +8) /16) -1) & 255;
|
14 | USARTE0.BAUDCTRLB = ((((F_CPU / BAUDRATE) +8) /16) -1) >> 8;
|
15 |
|
16 | rx_counter = 0;
|
17 | }
|
Hoffe Ihr habt eine Idee.
Danke,
Markus