S3C2440-UART

发布时间:2011-3-25 14:28    发布者:techshare
关键词: S3C2440 , UART
S3C2440通用异步接收器和发送器(UART)提供了3个独立的异步串行IO端口,每个端口可以在中断模式或DMA模式下操作。换言之,UART可以生成一个中断或DMA请求进行CPU和UART之间数据的传输。如果一个外部设备提供UEXTLCK给UART,UART可以在更高的速度下工作。每个UART通道对于接受器和发送器包括2个64字节的FIFO和移位器。数据拷贝到FIFO然后在传送之前拷贝到发送移位器。数据通过发送引脚(TxDn)被发出。同时,接受数据通过接受数据引脚(RxDn)移入,然后从移位寄存器拷贝到FIFO。波特率由时钟源(PCLK,FCLK/n,UEXTCLK)16分频和UART波特率除数寄存器UBRDIVn指定的16位除数决定。波特率除数因子UBRDIVn的计算公式为,UBRDIVn=(int)(UART clock)/(buad rate * 16)) - 1。

这个程序可以通过串口调试助手发送一个字符,然后在接受的地方显示出来。

#define rULCON0 (*(volatile unsigned*) 0x50000000)  
#define rUCON0 (*(volatile unsigned*) 0x50000004)  
#define rUTRSTAT0 (*(volatile unsigned*) 0x50000010)  
#define rUTXH0 (*(volatile unsigned*) 0x50000020)  
#define rURXH0 (*(volatile unsigned*) 0x50000024)  
#define rUBRDIV0 (*(volatile unsigned*) 0x50000028)   
int Main(){   
    char buf;   
    rULCON0 = 0xfff00;   
    rULCON0 |= 0x3;   
    rUCON0 = 0x0805;   
    rUBRDIV0 = 26;   
    while(1){   
        if(rUTRSTAT0&0x1){   
            buf = rURXH0;   
            while(!(rUTRSTAT0&0x04));   
            rUTXH0 = buf;   
        }   
    }   
    return 0;   
}  


这是通过向串口发送数据,根据发送的数据控制led哪个灯亮的程序。注意事项是:我使用的是串口调试助手,发送数据前首先要设置波特率为115200,否则没有任何显示。void Delay(unsigned int x);这句话要在Main函数内声明,在外面声明就不好使,不知为什么。


#define GPFCON (*(volatile unsigned*) 0x56000050)
#define GPFDAT (*(volatile unsigned*) 0x56000054)
#define GPFUP (*(volatile unsigned*) 0x56000058)
#define ULCON0 (*(volatile unsigned*) 0x50000000)
#define UCON0 (*(volatile unsigned*) 0x50000004)
#define UTRSTAT0 (*(volatile unsigned*) 0x50000010)
#define UTXH0 (*(volatile unsigned*) 0x50000020)
#define URXH0 (*(volatile unsigned*) 0x50000024)
#define UBRDIV0 (*(volatile unsigned*) 0x50000028)
int Main(){
        void Delay(unsigned int x);
        char buf;
        GPFCON &= 0xc03f;
        GPFCON |= 0x1540;
        GPFUP &= 0x87;
        ULCON0 |= 0x3;
        UCON0 &= 0x0800;
        UCON0 |= 0x05;
        while(1){
                if(UTRSTAT0 & 0x1){
                        buf = URXH0;
                        while(!(UTRSTAT0 & 0x4));
                        UTXH0 = buf;
                        switch(buf){
                                case 0x11:
                                        GPFDAT = 0xf7;
                                        Delay(100);
                                        break;
                                case 0x22:
                                        GPFDAT = 0xef;
                                        Delay(100);
                                        break;
                                case 0x33:
                                        GPFDAT = 0xdf;
                                        Delay(100);
                                        break;
                                case 0x44:
                                        GPFDAT = 0xbf;
                                        Delay(100);
                                        break;
                        }
                }
        }
}
void Delay(unsigned int x){
        int i,j,k;
        for(i = 0; i <= x; i++)
                for(j = 0; j <= 0xff; j++)
                        for(k = 0; k <= 0xff; k++)
                                ;
}

李万鹏
本文地址:https://www.eechina.com/thread-59921-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

  • Microchip视频专区
  • 我们是Microchip
  • 深度体验Microchip自动辅助驾驶应用方案——2025巡展开启报名!
  • 利用模拟开发工具生态系统进行安全电路设计
  • Cortex-M4外设 —— TC&TCC结合事件系统&DMA优化任务培训教程
  • 贸泽电子(Mouser)专区

相关在线工具

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表