Ich würde gerne meine Mikrocontroller debuggen. Dazu hat der AT91SAM7x ja eine Debug Unit mit einem Input (DRXD) und einem Output (DTXD). Ich habe die Debug Unit jetzt soweit konfiguriert und kann auch auf dem Oszilloskop ein Signal auf DTXD sehen. Aber wie kann ich dieses Signal benutzen. Es handelt sich ja um ein UART. Ist dies irgendwie kompatible mit RS232 und kann ich mir da jetzt einen Stecker drauflöten? Bräuchte ich dafür nicht noch weiter Leitungen? Kann ich mir einen RS232 auf USB adapter besorgen und die Debug-Ausgabe dann einfach mir mit Putty anschauen? Edit: Also, anscheinend tut es das. Ich habe DRXD und DTXD einfach mit einem rs232 stecker verbunden und mit putty mir das angeschaut. Leider scheint da immer noch etwas verdreht zu sein. Ich habe bei putty eingestellt: no parity no flow control Data Bits: 7 Stop Bits: 1 und das ganze auf dem chip so eingestellt:
1 | /* Reset and disable receiver */
|
2 | AT91C_BASE_DBGU->DBGU_CR = AT91C_US_RSTRX | AT91C_US_RSTTX; |
3 | |
4 | /* Disable interrupts */
|
5 | AT91C_BASE_DBGU->DBGU_IDR = 0xFFFFFFFF; |
6 | |
7 | /* Configure PIOs for DBGU */
|
8 | AT91C_BASE_PIOA->PIO_ASR = AT91C_PA27_DRXD | AT91C_PA28_DTXD; |
9 | AT91C_BASE_PIOA->PIO_BSR = 0; |
10 | AT91C_BASE_PIOA->PIO_PDR = AT91C_PA27_DRXD | AT91C_PA28_DTXD; |
11 | |
12 | /* === Configure serial link === */
|
13 | /* Define the baud rate divisor register [BRGR = MCK / (9600 * 16)] */
|
14 | AT91C_BASE_DBGU->DBGU_BRGR = 312; //muesste 9600 entsprechen |
15 | /* Define the USART mode */
|
16 | AT91C_BASE_DBGU->DBGU_MR = AT91C_US_PAR_NONE | AT91C_US_CHMODE_NORMAL; |
17 | |
18 | /* Disable the RX and TX PDC transfer requests */
|
19 | AT91C_BASE_DBGU->DBGU_PTCR = AT91C_PDC_RXTDIS; |
20 | AT91C_BASE_DBGU->DBGU_PTCR = AT91C_PDC_TXTDIS; |
21 | |
22 | /* Enable transmitter */
|
23 | AT91C_BASE_DBGU->DBGU_CR = AT91C_US_TXEN; |
Dann rufe ich eine funktion zum debuggen mit dem folgenden inhalt auf:
1 | void dbgu_print_ascii(const char *buffer) |
2 | {
|
3 | while (*buffer != '\0') { |
4 | while (!(AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_TXRDY)); |
5 | AT91C_BASE_DBGU->DBGU_THR = (*buffer++ & 0x1FF); |
6 | }
|
7 | }
|
Leider kommt dabei nur Buchstabengewirr raus. Hat da jemand eine Idee?