UART:universal asynchronous receiver/transmitter
通用异步发送接收装置
异步:与时钟无关,因此为异步。
ok6410使用RXD0 TXD0 连接GPA0 GPA1
1 使用时需要将GPA0-1设置为UART模式
2配置UART LINE CONTROL REGISTER
ULCON0 0x7F005000 此寄存器可以设置第0组UART 的数据位位数 停止位位数 校验方式 这里我们设置为8N1 8(数据位)NO 1(停止位)
3配置UART CONTROL REGISTER
UCON0 0x7F005004 此寄存器设置波特率相关信息
4配置UART FIFO CONTROL REGISTER
UFCON0 0x7F005008 此寄存器设置发送/接收FIFO 开启及大小
5配置 ,设置波特率
UMCON0
UBRDIV0
UDIVSLOT0
6通过对UFSTAT0的为满为空的判断将数据载入或者取出缓存区。
相关寄存器URXH0 UTXH0 UFSTAT0
代码如下:
#define ULCON0 (*((volatile unsigned long *)0x7F005000))
#define UCON0 (*((volatile unsigned long *)0x7F005004))
#define UFCON0 (*((volatile unsigned long *)0x7F005008))
#define UMCON0 (*((volatile unsigned long *)0x7F00500C))
#define UTRSTAT0 (*((volatile unsigned long *)0x7F005010))
#define UFSTAT0 (*((volatile unsigned long *)0x7F005018))
#define UTXH0 (*((volatile unsigned char *)0x7F005020))
#define URXH0 (*((volatile unsigned char *)0x7F005024))
#define UBRDIV0 (*((volatile unsigned short *)0x7F005028))
#define UDIVSLOT0 (*((volatile unsigned short *)0x7F00502C))
#define GPACON (*((volatile unsigned short *)0x7F008000))
void init_uart(void)
{
GPACON &= ~0xff;
GPACON |= 0x22;//0x00100010 设置端口为UART
/* ULCON0 */
ULCON0 = 0x3; /* 数据位:8, 无较验, 停止位: 1, 8n1 */
UCON0 = 0x5; /* 使能UART发送、接收 */
UFCON0 = 0x01; /* FIFO ENABLE */
UMCON0 = 0;
/* 波特率 */
/* DIV_VAL = (PCLK / (bps x 16 ) ) - 1
* bps = 57600
* DIV_VAL = (66500000 / (115200 x 16 ) ) - 1
* = 35.08
*/
UBRDIV0 = 35;
/* x/16 = 0.08
* x = 1
*/
UDIVSLOT0 = 0x1;
}
char getchar(void)
{
while ((UFSTAT0 & (1<<6)) == 0);//UART channe l 0 FIFO status register ,when Rx fifo fulling,bit[6]is 1
return URXH0;
}
void putchar(char c)
{
while ((UFSTAT0 & (1<<14)) == 1);
UTXH0 = c;
}