一、UART初始化
找到对应引脚
分别设置对应引脚功能为TXD和RXD
GPA1CON地址:0x11400020
将0-7位先置零再置成0x22:GPA1CON = GPA1CON & ~0xff | 0x22;
设置UART控制器的参数
1、数据位
2、奇偶校验位
3、停止位
ULCON2地址:0x13820000;
ULCON2 = 0x03;
4、波特率
系统提供的时钟源:100MHz ,而我们只需要115200Hz,所以得要分频
HZ是赫兹,频率单位,1MHZ(兆赫)=1000KHZ(千赫)=1000000HZ
这两个寄存器就是当波特率分频时分别存放波特率除数和波特率除数的小数
1MHz / 115200 / 16 = 54.253472(此处的16是在1/115200这个时间内采样16次)
UBRDIV2的地址:0x13820028
所以直接赋值:UBRDIV2 = 53(上面的除数是54,但是寄存器从0开始的,此处是十进制)
UFRACVAL2的地址:0x1382002C
所以直接赋值:UFRACVAL2 = (0.253*16) = 4
5、接发方式:轮询方式
UCON2的地址:0x13820004
直接设置:UCON2 = UCON2 & ~0xf | 0x05(置位前记得清空,别人给你口袋塞钱,万一你口袋是满的,就塞不进了额)
二、发送数据(uartPutc(char c))
轮询:
如果发送缓冲区为空就给缓冲区赋值,如果不空,则得一直循环等待它为空
状态寄存器:UTRSTATn (n = 0 to 4)
发送缓冲区:当发送缓冲区为空时,此位自动置1,0代表不空,
这样就好办了,
啪的一下我就写个等待循环
while(!(UTRSTAT2 & 0x02))// 这样如果缓冲区不空,我就一直等待它空为止,如果空了,循环就结束了
为空了就好办了接下来就给发送缓冲区赋值
char c;
UTXH2 = c;
//不存在的源码
//main.c
uart初始化;
while(1)
{
// uartPutc(“a”);
char c = uartGetc();
uartPutc(c+1);
}
三、接收数据
URXHn (n = 0 to 4):接收缓存区寄存器
char uartGetc()
{
while(!(UTRSTAT2 & 0x01));
return URXH2;
}