Ich hab's jetzt doch endlich selbst geschafft! Wuhu!!!
Ich hatte wohl zwei Probleme:
1. Der EBDG auf dem SAM4S Xplained Pro Board muss erstmal mit einem über
die zugehörige COM Schnittstelle gesendeten DTR Signal in den Modus
versetzt werden, dass die Daten, die er vom SAM4S über den UART 1
bekommt, auch an den PC weitergeleitet werden.
Das macht mein TerminalProgramm (Hterm) nicht automatisch. Das
Terminal-Extension von Atmel Studio zum Beispiel schon
2. Aber die Wohl entscheidene Zeile istfolgende
1 | // PIO disablen für PB2 und PB3
|
2 | PIOB->PIO_PDR |= PIO_PB2 | PIO_PB3;
|
Ich dachte, dass der Grundzustand derjenige wäre, dass die PIOs die
Signale der Peripherie (ohne weitere Wahl die Peripherie A) an die Pins
weiterleiten. Ich dachte nicht, dass man noch extra die PIOs für den Pin
disablen muss.
Achso hier nochmal mein endgültiger Code, um mit dem UART1 des SAM4s ein
einzelnes Zeichen zu senden. Eventuell braucht es ja später nochmal wer:
1 | void init_vCOM();
|
2 | void vCOM_sendByte(char c);
|
3 |
|
4 |
|
5 | void init_vCOM()
|
6 | {
|
7 | // PIO disablen für PB2 und PB3
|
8 | PIOB->PIO_PDR |= PIO_PB2 | PIO_PB3;
|
9 |
|
10 | // Peripherie A einstellen
|
11 | PIOB->PIO_ABCDSR[0] &= ~(PIO_PB2A_URXD1 | PIO_PB3A_UTXD1);
|
12 | PIOB->PIO_ABCDSR[1] &= ~(PIO_PB2A_URXD1 | PIO_PB3A_UTXD1);
|
13 |
|
14 | // UART1 Clock aktivieren
|
15 | PMC->PMC_PCER0 |= (1<<ID_UART1); // Power für UART1 aktivieren
|
16 |
|
17 | // UART1 configurieren
|
18 | UART1->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX | UART_CR_RXDIS | UART_CR_TXDIS; // erstmal alles aus und resetten
|
19 | UART1->UART_BRGR = 781; // Baud auf 9.600
|
20 | UART1->UART_MR = UART_MR_CHMODE_NORMAL | UART_MR_PAR_NO; // Normaler Modus, keine Parity
|
21 | UART1->UART_PTCR = UART_PTCR_RXTDIS | UART_PTCR_TXTDIS; // kein DMA
|
22 | UART1->UART_CR = UART_CR_TXEN | UART_CR_RXEN; // Transmitter und Reciever enabeln
|
23 |
|
24 | }
|
25 |
|
26 | void vCOM_sendByte(char c)
|
27 | {
|
28 | while (!(UART1->UART_SR & UART_SR_TXRDY)) // Bereit?
|
29 | {
|
30 | }
|
31 | UART1->UART_THR = c; // Daten in den Transmitter laden- Begintt automatisch zu senden
|
32 | while (!(UART1->UART_SR & UART_SR_TXEMPTY)) // Solange noch nicht fertig gesendet, warten
|
33 | {
|
34 | }
|
35 | }
|