#include
unsigned int UART0_ADDR = 0x20080000;
unsigned int retu=0;
int i=0;
void delay_x(unsigned short cycles)
{
unsigned short t;
t = cycles;
while ( --t != 0 );
}
int main()
{
///////////初始化部分////////////////////////////////////////////////////
retu = *(unsigned int *)(UART0_ADDR + 0X30);//uart_cr
*(unsigned int *)(UART0_ADDR + 0X30) = 0x300;
// retu = *(unsigned int *)(UART0_ADDR + 0X24);//ibrd
// retu = *(unsigned int *)(UART0_ADDR + 0X28);//fbrd
*(unsigned int *)(UART0_ADDR + 0X24) = 1;
*(unsigned int *)(UART0_ADDR + 0X28) = 40;
*(unsigned int *)(UART0_ADDR + 0X30) = 0x300;
*(unsigned int *)(UART0_ADDR + 0X2c) = 0x60;//UART_LCR_H
*(unsigned int *)(UART0_ADDR + 0X34) = 0x12; //UART_IFLS
*(unsigned int *)(UART0_ADDR + 0X38) = 0x0;//UART_IMSC
retu = *(unsigned int *)(UART0_ADDR + 0X30);//uart_cr
*(unsigned int *)(UART0_ADDR + 0X30) = retu | 0x01;//使能串口
//////////////////////////////////////////////////////////
while(1)
{
// retu = *(unsigned int *)(UART0_ADDR + 0X18);
// retu = retu&0x40;
if(((*(unsigned int *)(UART0_ADDR + 0X18))&0x40)==0x40)
{
retu = *(unsigned int *)(UART0_ADDR + 0X00);
retu = retu&0xff;
*(unsigned int *)(UART0_ADDR + 0X00) = retu;
}
retu = 0;
delay_x(0X7000);
}
return 0;
}
本文介绍了一个基于UART0的串口通信程序实现,包括UART控制器寄存器的初始化配置及串口数据的接收与发送过程。通过设置不同的寄存器值来完成波特率配置、数据位长度等,并利用延时函数控制数据传输速率。
1822

被折叠的 条评论
为什么被折叠?



