Guten Tag, ich möchte gerne bei meinem Xmega32a4u den Uart nutzen dazu habe ich aus einem Tutorial den Nachfolgen Code benutzt. Zur Verbindung habe ich einen Usb Usart Converter Cp210X, der an com 10 erkannt wird und somit auch an meinem Terminal "h-term" das ich wie im Bild eingestellt habe. verdrahtet habe ich es so von PortC PC3----> TX Cp210x von Portc PC2----> Rx Cp210x mein Problem ist jetzt das nichts gesendet wird bzw. im Terminal wird mir nichts angezeigt habe ich hier etwas falsch gemacht??
1 | /*
|
2 | * Hallo_Welt.c
|
3 | *
|
4 | * USARTC0, Tx Pin -> PC3.
|
5 | * 9600 baud mit 2 MHz clock. BSCALE = 0
|
6 | * BSEL = ( 32000000 / (2^0 * 16*19200)) -1 = 12
|
7 | * Fbaud = 32000000 / (2^0 * 16 * (12+1)) = 9615 bits/sec
|
8 | *
|
9 | *
|
10 | * Created: 02.05.2012 21:36:29
|
11 | * Author: Daniel
|
12 | */
|
13 | |
14 | #include <avr/io.h> |
15 | #include <avr/interrupt.h> |
16 | #include <string.h> |
17 | |
18 | //Variablen
|
19 | char lenght = 0x00; |
20 | char Counter = 0x00; |
21 | |
22 | int main(void) |
23 | {
|
24 | Clock_init(); |
25 | Int_init(); |
26 | UART_init(); |
27 | TimerC0_init(); |
28 | |
29 | TimerC0_Freq(0x85ED); |
30 | |
31 | while(1) |
32 | {
|
33 | }
|
34 | }
|
35 | |
36 | void Clock_init(void) |
37 | {
|
38 | OSC.CTRL |= OSC_RC32MEN_bm; // Oszillator auf 32Mhz stellen |
39 | while(!(OSC.STATUS & OSC_RC32MEN_bm)); // Warten bis der Oszillator bereit ist |
40 | CCP = CCP_IOREG_gc; |
41 | CLK.CTRL = CLK_SCLKSEL_RC32M_gc; // Clock auf 32MHz stellen |
42 | }
|
43 | |
44 | void Int_init(void) |
45 | {
|
46 | PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; // Interrupts (Highlevel, Mediumlevel und Lowlevel freigeben) |
47 | sei(); // Globale Interruptfreigabe |
48 | }
|
49 | |
50 | void UART_init(void) |
51 | {
|
52 | PORTC.DIR = 0xEF; |
53 | |
54 | USARTC0.BAUDCTRLB = 0; // BSCALE = 0 |
55 | USARTC0.BAUDCTRLA = 0x67; // Baudrate 19200 @ 41MHz |
56 | USARTC0.CTRLB = USART_TXEN_bm | USART_RXEN_bm; // RX+TX Enable CLK |
57 | USARTC0.CTRLC = 0x03; // Async, no parity, 8 bit data, 1 stop bit |
58 | USARTC0.CTRLA = 0; |
59 | }
|
60 | |
61 | void TimerC0_init() |
62 | {
|
63 | TCC0.CTRLA = TC_CLKSEL_DIV1024_gc; // Vorteiler einstellen |
64 | TCC0.CTRLB = 0x00; // Timer in Normalmodus stellen |
65 | TCC0.INTCTRLA = 0x03; // Interrupt konfigurieren |
66 | }
|
67 | |
68 | void TimerC0_Freq(int TTW) |
69 | {
|
70 | TCC0.PER = TTW; // Timer-Topwert(TTW) einstellen |
71 | }
|
72 | |
73 | void Send_UART(char data[]) |
74 | {
|
75 | lenght = strlen(data); |
76 | |
77 | while(Counter < lenght) |
78 | {
|
79 | while (!(USARTC0.STATUS & USART_DREIF_bm)); |
80 | USARTC0.DATA = data[Counter]; |
81 | Counter++; |
82 | }
|
83 | |
84 | Counter = 0x00; |
85 | while (!( USARTC0.STATUS & USART_DREIF_bm)); |
86 | USARTC0.DATA = 0x0A; |
87 | while (!( USARTC0.STATUS & USART_DREIF_bm)); |
88 | USARTC0.DATA = 0x0D; |
89 | }
|
90 | |
91 | ISR(TCC0_OVF_vect) |
92 | {
|
93 | TimerC0_Freq(0x85ED); |
94 | Send_UART("Hallo Welt!"); |
95 | }
|