00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "at91sam7s64.h"
00020 #include "global.h"
00021
00022 #include "uart.h"
00023
00024
00025
00026
00027 #define pUSART0 ((AT91S_USART*)AT91C_BASE_US0)
00028 #define pUSART1 ((AT91S_USART*)AT91C_BASE_US1)
00029 #define pUSART2 ((AT91S_USART*)AT91C_BASE_DBGU)
00030
00031
00032 void uart0Init(uint16_t bauddiv, uint32_t mode)
00033 {
00034
00035 AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_US0);
00036
00037 *AT91C_PIOA_PDR = AT91C_PA5_RXD0 | AT91C_PA6_TXD0;
00038
00039 *AT91C_PIOA_ASR = AT91C_PA5_RXD0 | AT91C_PA6_TXD0;
00040
00041 *AT91C_PIOA_PPUDR = AT91C_PA5_RXD0;
00042
00043 pUSART2->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS |AT91C_US_TXDIS;
00044
00045 pUSART0->US_MR = AT91C_US_USMODE_NORMAL |
00046 AT91C_US_CLKS_CLOCK |
00047 mode;
00048
00049 pUSART0->US_BRGR = bauddiv;
00050
00051 pUSART0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
00052 }
00053
00054 void uart1Init(uint16_t bauddiv, uint32_t mode)
00055 {
00056
00057 AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_US1);
00058
00059 *AT91C_PIOA_PDR = AT91C_PA21_RXD1 | AT91C_PA22_TXD1;
00060
00061 *AT91C_PIOA_ASR = AT91C_PA21_RXD1 | AT91C_PA22_TXD1;
00062
00063 *AT91C_PIOA_PPUDR = AT91C_PA21_RXD1;
00064
00065 pUSART2->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS |AT91C_US_TXDIS;
00066
00067 pUSART1->US_MR = AT91C_US_USMODE_NORMAL |
00068 AT91C_US_CLKS_CLOCK |
00069 mode;
00070
00071 pUSART1->US_BRGR = bauddiv;
00072
00073 pUSART1->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
00074 }
00075
00076 void uart2Init(uint16_t bauddiv, uint32_t mode)
00077 {
00078
00079 AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_SYS);
00080
00081 *AT91C_PIOA_PDR = AT91C_PA9_DRXD | AT91C_PA10_DTXD;
00082
00083 pUSART2->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS |AT91C_US_TXDIS;
00084
00085 pUSART2->US_MR = AT91C_US_USMODE_NORMAL |
00086 AT91C_US_CLKS_CLOCK |
00087 AT91C_US_CHRL_8_BITS |
00088 AT91C_US_PAR_NONE |
00089 AT91C_US_NBSTOP_1_BIT;
00090
00091 pUSART2->US_BRGR = bauddiv;
00092
00093 pUSART2->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
00094 }
00095
00096 int uart0SendByte(int data)
00097 {
00098
00099 while( !(pUSART0->US_CSR & AT91C_US_TXRDY) );
00100
00101 return (pUSART0->US_THR = data);
00102 }
00103
00104 int uart1SendByte(int data)
00105 {
00106
00107 while( !(pUSART1->US_CSR & AT91C_US_TXRDY) );
00108
00109 return (pUSART1->US_THR = data);
00110 }
00111
00112 int uart2SendByte(int data)
00113 {
00114
00115 while( !(pUSART2->US_CSR & AT91C_US_TXRDY) );
00116
00117 return (pUSART2->US_THR = data);
00118 }
00119
00120 int uart0GetByte(void)
00121 {
00122
00123 if(pUSART0->US_CSR & AT91C_US_RXRDY)
00124 return (pUSART0->US_RHR);
00125
00126 return -1;
00127 }
00128
00129 int uart1GetByte(void)
00130 {
00131
00132 if(pUSART1->US_CSR & AT91C_US_RXRDY)
00133 return (pUSART1->US_RHR);
00134
00135 return -1;
00136 }
00137
00138 int uart2GetByte(void)
00139 {
00140
00141 if(pUSART2->US_CSR & AT91C_US_RXRDY)
00142 return (pUSART2->US_RHR);
00143
00144 return -1;
00145 }
00146