s3c2440 通用异步接收器和发送器(UART)提供了三个独立的异步串行I/O(SIO)端口,每个端口都可以在中断模式或DMA模式下操作.
每个UART 通道的接收器和发送器包含了2 个64 位的FIFO。
每个UART 包含一个波特率发送器,发送器,计数器和一个控制单元.波特率发生器可由PCLK,FCLK/n 或UEXTCLK(外部输入时钟)来锁定。
uart 的使用:
使用之前需要
1.设置波特率, 传输格式如有几个数据位,是否使用流量控制, 有多少个停止位,是否使用校验位, 是奇还是偶校验.
2.设置GPH2, GPH3 为TXD0, RXD0. 选择工作模式,
3.通过对寄存器写,读可实现发送与接收.
产生波特率: 通过设置UBRDIVn寄存器.
UBRDIVn = (int) (UART clock / (buad rate x 16)) –1
设置传输格式: 通过设置UART 线性控制寄存器(ULCONn)
设置uart时钟源,uart 中断方式: 设置UART 控制寄存器(UCONn)
设置FIFO: 通过设置UFCONn, 设置是否用FIFO, FIFO触发阈值.
UTRSTATn : 通过其可查询数据是否发送/接收完.
UERSTATn : 表示各种错误是否发生.
UTXHn : CPU 将数据写入其, UART将其中的数据保存到缓冲区, 并自动发送.
URXHn : CPU 接收到数据时, CPU通过读取其,可得到数据.
初始化示例:
void uart0_init(void)
{
GPHCON |= 0xa0; // GPH2,GPH3用作TXD0,RXD0
GPHUP = 0x0c; // GPH2,GPH3内部上拉
ULCON0 = 0x03; // 8N1(8个数据位,无较验,1个停止位)
UCON0 = 0x05; // 查询方式,UART时钟源为PCLK
UFCON0 = 0x00; // 不使用FIFO
UMCON0 = 0x00; // 不使用流控
UBRDIV0 = UART_BRD; // 波特率为115200
}
发送:
void putc(unsigned char c)
{
/* 等待,直到发送缓冲区中的数据已经全部发送出去 */
while (!(UTRSTAT0 & TXD0READY));
/* 向UTXH0寄存器中写入数据,UART即自动将它发送出去 */
UTXH0 = c;
}
接收:
unsigned char getc(void)
{
/* 等待,直到接收缓冲区中的有数据 */
while (!(UTRSTAT0 & RXD0READY));
/* 直接读取URXH0寄存器,即可获得接收到的数据 */
return URXH0;
}
阅读(1816) | 评论(0) | 转发(0) |