原创 4.最简单的串口例程

2009-2-28 16:49 4082 4 4 分类: MCU/ 嵌入式

https://static.assets-stash.eet-china.com/album/old-resources/2009/2/28/6a167467-0ac0-438b-ad4c-4fdc7276c61e.rar这是源程序。


https://static.assets-stash.eet-china.com/album/old-resources/2009/2/28/7ec096e7-42f4-4ffd-9078-b2ccbbd37b6a.rar这是UART的中文数据手册。


https://static.assets-stash.eet-china.com/album/old-resources/2009/2/28/9217d358-4bbd-465d-aa4b-74cdac4aec6d.rar串口调试助手。


今天想试着调一下串口,因为这是最基本的接口之一,我决定一个接口一个接口的学习。S3C2440的UART功能还是很丰富的。但是由于是刚开始学习,对很多东西还不是很明了,我就找了个最简单的例程,没有使用FIFO,AFC和DMA以及中断的功能。


先说一下,波特率的设定吧。这是基本的元素嘛。S3C2440的波特率发生器可以选择内部时钟或外部UEXTCLK来做源时钟。也就是说,被除数可以设定UCONn中的时钟选择来选择。波特率时钟通过16和有UART波特率除数寄存器(UBRDIVn)中定义的16位除数来分频源时钟(PCLK,FCLK/n)or EXTCLK)产生。其中


UBRDIVn=(int)(UART clock/(buad rate*16))-1


(UART clock:PCLK,FCLK/n or UEXTCLK)


UBRDIVn应该是从1到2^16-1,当使用小于PCLK的外部时钟UEXTCLK时应该设置0。


例如:UART clock为40M,波特率是115200bps,那么


UBRDIVn=(int)(40000000/(115200*16))-1=(int)(21.7-1)=22-1=21


关于波特率的设定方面我觉得在编程时采用一下方式会更好一些。


#define PCLK            50000000    // clock_init函数设置PCLK为50MHz
#define UART_CLK        PCLK        //  UART0的时钟源设为PCLK
#define UART_BAUD_RATE  115200      // 波特率
#define UART_BRD        ((UART_CLK  / (UART_BAUD_RATE * 16)) - 1)


这样在修改起来会方便很多。


而且在使用时只需一句: UBRDIV0 = UART_BRD; // 波特率为115200
即可。


接下来就是对于寄存器的设置了。因为这个程序是最简单的,所以设置的内容也非常少。


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
}


关于I/O口的设置就不说了。后5个寄存器是关于UART的。可以看到,使用的功能非常基本。


有关发送接收部分:


void putc(unsigned char c)
{
    /* 等待,直到发送缓冲区中的数据已经全部发送出去 */
    while (!(UTRSTAT0 & TXD0READY));
   
    /* 向UTXH0寄存器中写入数据,UART即自动将它发送出去 */
    UTXH0 = c;
}


/*
 * 接收字符
 */
unsigned char getc(void)
{
    /* 等待,直到接收缓冲区中的有数据 */
    while (!(UTRSTAT0 & RXD0READY));
   
    /* 直接读取URXH0寄存器,即可获得接收到的数据 */
    return URXH0;
}


这是最基本的串口程序了,我决定接下来再研究一下FIFO和DMA的使用。


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条