Chinaunix首页 | 论坛 | 博客
  • 博客访问: 405637
  • 博文数量: 83
  • 博客积分: 2011
  • 博客等级: 大尉
  • 技术积分: 741
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-04 22:51
文章分类

全部博文(83)

文章存档

2009年(83)

我的朋友

分类: LINUX

2009-08-05 01:28:48

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) |
0

上一篇:s3c2440-MPLL

下一篇:打补丁(patch)示例

给主人留下些什么吧!~~