📄 uart.c
字号:
//*uart1 test 115200.8.1.N
#include "uart.h"
#include "at91rm9200.h"
#include <string.h>
extern void AT91F_DBGU_Printk(char *);
void Uart_Init(void){
AT91C_BASE_PIOA->PIO_PPUDR =AT91C_PB20_TXD1 | AT91C_PB21_RXD1;// Disable pullup
AT91C_BASE_US1 -> US_IDR |= 0xFFFFFFFF;//Disable interupt
AT91C_BASE_PIOB -> PIO_PDR |= 0x00300000;//Enable I/O peripheral
AT91C_BASE_PMC -> PMC_PCER |= 0x00000080;//Enable peripheral
AT91C_BASE_US1 -> US_CR |= 0x00000030;//Reset rx/tx
AT91C_BASE_US1 -> US_MR |= 0x000008C0;//Set Uart Mode
AT91C_BASE_US1 -> US_BRGR = (unsigned int)33;//Set Baud Rate
AT91C_BASE_US1 -> US_CR |= 0x00000050;//Enable rx/tx
AT91C_BASE_US1 -> US_PTCR = (1<<1) | (1<<9);//Disable PDC
AT91C_BASE_US1 -> US_TPR = (unsigned int)0;
AT91C_BASE_US1 -> US_TCR = 0;
AT91C_BASE_US1 -> US_TNPR = (unsigned int)0;
AT91C_BASE_US1 -> US_TNCR = 0;
AT91C_BASE_US1 -> US_PTCR = (1<<8);//Enable PDC Tx
}
void Uart_PutChar(char a){
while(!(AT91C_BASE_US1 -> US_CSR & (unsigned int)2));
AT91C_BASE_US1 -> US_THR = a;
}
void Uart_Printf(char *p){
while(*p!='\0'){
Uart_PutChar(*p);
p++;
}
}
char Uart_GetChar(void){
while(!(AT91C_BASE_US1 -> US_CSR & (unsigned int)1));
return(AT91C_BASE_US1 -> US_RHR);
}
char Uart_Pdc_SendFrame(
char *pBuffer,
unsigned int szBuffer,
char *pNextBuffer,
unsigned int szNextBuffer)
{
if (!(AT91C_BASE_US1 -> US_TCR)) {
//* Buffer and next buffer can be initialized
AT91C_BASE_US1 -> US_TPR = (unsigned int)pBuffer;
AT91C_BASE_US1 -> US_TCR = szBuffer;
AT91C_BASE_US1 -> US_TNPR = (unsigned int)pNextBuffer;
AT91C_BASE_US1 -> US_TNCR = szNextBuffer;
return 2;
}
else if (!(AT91C_BASE_US1 -> US_TNCR)) {
//* Only one buffer can be initialized
AT91C_BASE_US1 -> US_TPR = (unsigned int)pBuffer;
AT91C_BASE_US1 -> US_TCR = szBuffer;
return 1;
}
else {
//* All buffer are in use...
return 0;
}
}
void Uart_Test(void)
{
char UartMessage1[] = "\
\n\n\r-I- ======================================\n\r\
-I- AT91RM9200 basic UART1 example\n\r\
-I- --------------------------------------\n\r\
-I- Set UART1 Port at 115200,8,N \n\r\
-I- ======================================\n\r";
char UartMessage2[] = "\
\n\n\r-I- ======================================\n\r\
-I- Uart PDC Mode Test\n\r\
-I- --------------------------------------\n\r\
-I- UART PDC Mode Test Ok\n\r\
-I- ======================================\n\r";
char tmp;
Uart_Init();
//PDC Tx Test
AT91F_DBGU_Printk("\n\r***************Uart1 Test******************\n\r");
AT91F_DBGU_Printk("Uart1 PDC Mode Test");
Uart_Pdc_SendFrame(UartMessage1,strlen(UartMessage1),UartMessage2,strlen(UartMessage2));
while ( !(AT91C_BASE_US1->US_CSR & (1<<11)) );
//Uart1 Normal Mode Test
AT91F_DBGU_Printk("Uart1 Normal Mode Test");
Uart_Printf("\n\rUart1 Normal Mode Test\n\r");
Uart_Printf("\n\rInput Any Key Display OK,Input 0 Quit Test\n\r");
while(1)
{
tmp=Uart_GetChar();
switch(tmp){
case '0':
Uart_Printf("\n\rUart1 Test Is Quit!\n\r");
AT91F_DBGU_Printk("Uart1 Test Is Quit");
return;
default:
Uart_Printf("OK\n\r");
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -