1 | //Enable Peripheral Clock of USART3
|
2 | AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_US3;
|
3 |
|
4 | //-----> Pin-configuration
|
5 | //Disable interrupts
|
6 | AT91C_BASE_PIOB->PIO_IDR = (AT91C_PB9_RXD3 | AT91C_PB8_TXD3);
|
7 |
|
8 | //Select Peripheral Function A
|
9 | AT91C_BASE_PIOB->PIO_ABSR &= ~(AT91C_PB9_RXD3 | AT91C_PB8_TXD3);
|
10 |
|
11 | //Disable PIO controll
|
12 | AT91C_BASE_PIOB->PIO_PDR = (AT91C_PB9_RXD3 | AT91C_PB8_TXD3);
|
13 |
|
14 | //-----> Modul-configuration of USART3
|
15 | // Reset and disable receiver & transmitter
|
16 | AT91C_BASE_US3->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS;
|
17 |
|
18 | //Configure mode
|
19 | AT91C_BASE_US3->US_MR = (AT91C_US_USMODE_NORMAL //Normal Mode
|
20 | | AT91C_US_CLKS_CLOCK //Use MCLK
|
21 | | AT91C_US_CHRL_8_BITS //Character Length 8bit
|
22 | | AT91C_US_PAR_NONE //No Parity
|
23 | | AT91C_US_NBSTOP_1_BIT //1 Stop bit
|
24 | | AT91C_US_CHMODE_NORMAL); //Channel Mode normal
|
25 |
|
26 | //Configure baudrate
|
27 | //Asynchronous, no oversampling
|
28 | AT91C_BASE_US3->US_BRGR = (133333333 / 9600) / 16;
|
29 |
|
30 |
|
31 | //-----> AIC-Configuration
|
32 | //Disable the interrupt
|
33 | AT91C_BASE_AIC->AIC_IDCR = 1 << AT91C_ID_US3;
|
34 |
|
35 | //Configure mode and handler
|
36 | AT91C_BASE_AIC->AIC_SMR[AT91C_ID_US3] = 0;
|
37 | AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US3] = (unsigned int) USART3_IrqHandler;
|
38 |
|
39 | //Clear interrupt
|
40 | AT91C_BASE_AIC->AIC_ICCR = 1 << AT91C_ID_US3;
|
41 |
|
42 | //Enable interrupt
|
43 | AT91C_BASE_AIC->AIC_IECR = 1 << AT91C_ID_US3;
|
44 |
|
45 | //Enable Transmitter & Receiver
|
46 | AT91C_BASE_US3->US_CR = (AT91C_US_TXEN | AT91C_US_RXEN);
|
47 |
|
48 | //Receive Buffer setup
|
49 | volatile unsigned char rcv[2];
|
50 | //Receive Pointer Register
|
51 | AT91C_BASE_US3->US_RPR = (unsigned int) rcv;
|
52 | //Receive Count Register
|
53 | AT91C_BASE_US3->US_RCR = 2;
|
54 | //Transfer Control Register
|
55 | AT91C_BASE_US3->US_PTCR = AT91C_PDC_RXTEN;
|
56 |
|
57 | //Enable RXBUFF interrupt
|
58 | AT91C_BASE_US3->US_IER = AT91C_US_RXBUFF;
|
59 |
|
60 |
|
61 |
|
62 | //Transmit Buffer setup
|
63 | volatile unsigned char snd[12];
|
64 | snd[0] = 1;
|
65 | snd[1] = 2;
|
66 | snd[2] = 3;
|
67 | snd[3] = 4;
|
68 | snd[4] = 5;
|
69 | snd[5] = 6;
|
70 | snd[6] = 7;
|
71 | snd[7] = 8;
|
72 | snd[8] = 9;
|
73 | AT91C_BASE_US3->US_TPR = (unsigned int) snd;
|
74 | AT91C_BASE_US3->US_TCR = 9;
|
75 | AT91C_BASE_US3->US_PTCR = AT91C_PDC_TXTEN;
|
76 |
|
77 |
|
78 | volatile unsigned int status = 0;
|
79 | do
|
80 | {
|
81 | status = AT91C_BASE_US3->US_CSR;
|
82 | }while(!(status & 0x1));
|