历史上的今天
返回首页

历史上的今天

今天是:2025年06月04日(星期三)

正在发生

2018年06月04日 | S3C2440之UART驱动代码模板(RealView MDK)

2018-06-04 来源:eefocus

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 UART驱动代码。使用友善MINI2440开发板,开发环境为RealView MDK 4.22。需要注意的是,本代码中,对GPIO的初始化放在了s3c2440.s中完成,采用keil自带的html方式进行配置。

该源码结构简单明了,原始工程下载地址:点击打开链接


UART控制器初始化:


  1. void Uart_Init(void)  

  2. {  

  3. #define rULCON0         (*(volatile unsigned int*)0x50000000)  

  4. #define rUCON0          (*(volatile unsigned int*)0x50000004)  

  5. #define rUBRDIV0        (*(volatile unsigned int*)0x50000028)  

  6.   

  7. #define PCLK            50000000  

  8. #define BUADRATE        115200  

  9.   

  10.     rULCON0 = 0x03;     //No parity, One stop bit, 8-bits data  

  11.     rUCON0  = 0x05;     //Tx Enable, Rx Enable, PCLK as source clock  

  12.     rUBRDIV0 = (int)(PCLK / (BUADRATE * 16)) - 1;   //115200bps  

  13. }  



字符发送函数:


  1. void Uart_Putc(unsigned char c)  

  2. {  

  3. #define rUTRSTAT0       (*(volatile unsigned int*)0x50000010)  

  4. #define rUTXH0          (*(volatile unsigned int*)0x50000020)  

  5.   

  6. #define BUFFER_EMPTY    (1 << 1)  

  7.   

  8.     while(!(rUTRSTAT0 & BUFFER_EMPTY));  

  9.     rUTXH0 = c;  

  10. }  


字符接收函数:


  1. unsigned char Uart_Getc(void)  

  2. {  

  3. #define rUTRSTAT0       (*(volatile unsigned int*)0x50000010)  

  4. #define rURXH0          (*(volatile unsigned int*)0x50000024)  

  5.   

  6. #define BUFFER_READY    (1 << 0)  

  7.   

  8.     while(!(rUTRSTAT0 & BUFFER_READY));  

  9.     return rURXH0;  

  10. }  


为了使用printf库函数,需要进行如下重映射:


  1. struct __FILE    

  2. {    

  3. int handle;    

  4. /* Whatever you require here. If the only file you are using is */    

  5. /* standard output using printf() for debugging, no file handling */    

  6. /* is required. */    

  7. };    

  8.   

  9. /* FILE is typedef'd in stdio.h. */    

  10. FILE __stdout;    

  11.   

  12. int fputc(int ch, FILE *f)   

  13. {   

  14.     Uart_Putc(ch);   

  15.        

  16.     return ch;   

  17. }   

  18.   

  19. int ferror(FILE *f) {  

  20.   /* Your implementation of ferror */  

  21.   return EOF;  

  22. }  


测试代码:


  1. int main(void)  

  2. {  

  3.     unsigned char ch;  

  4.   

  5.     //clock_init();  

  6.     Uart_Init();  

  7.     printf("%s, %d", __FILE__, __LINE__);  

  8.     while(1)  

  9.     {  

  10.         ch = Uart_Getc();  

  11.         Uart_Putc(ch);  

  12.     }  


推荐阅读

史海拾趣

BERNSTEIN公司的发展小趣事

BERNSTEIN公司的历史可以追溯到Weimar时期,当时Bernstein兄弟在莱比锡创立了“Monopol”公司,专注于为电气建筑服务控制系统生产和制造低压产品。初创时期,公司面临着资金短缺、市场竞争激烈等诸多困难。然而,Bernstein兄弟凭借对技术的执着追求和对市场的敏锐洞察,成功研发出了一系列具有竞争力的产品,并逐渐在市场上站稳脚跟。

Electro Adapter Inc公司的发展小趣事

随着公司产品的日益成熟,EA公司开始寻求更广阔的市场空间。公司不仅在国内市场加大推广力度,还积极开拓国际市场。在海外市场,EA公司面临着文化差异、法规差异等挑战,但公司通过深入的市场调研和精准的市场定位,成功地将产品推向了欧洲、北美等发达国家和地区。同时,EA公司还加强了品牌宣传,通过参加国际展会、赞助行业活动等方式,提高了品牌知名度和影响力。

Etco Inc公司的发展小趣事

随着市场竞争的加剧和客户需求的不断提高,Etco Inc公司意识到品质管理对于企业发展的重要性。为此,公司投入大量资源加强品质管理体系建设,引进先进的生产设备和检测仪器,确保产品质量的稳定性和可靠性。同时,Etco还加强了员工培训和技能提升,提高了员工的品质意识和操作技能。这些举措使Etco的产品质量得到了显著提升,赢得了客户的广泛赞誉。

Gaomi Xinghe Electronics公司的发展小趣事

背景:在21世纪初,Galaxy公司凭借其在电子产品领域的深厚积累,决定进一步拓展国际市场。通过详细的市场调研,公司发现欧洲市场潜力巨大,特别是对高质量电子产品的需求日益增长。

行动:于是,Galaxy在波兰Cracow成立了欧洲分公司,地处欧洲中部,这一地理位置使其能够很好地覆盖整个欧洲大陆,包括东部和西部的国家。该分公司不仅作为销售中心,还承担起返修件回收处理的重任,确保客户能够享受到无时区差别的销售和维修服务。

成果:这一战略部署显著提升了Galaxy在欧洲市场的知名度和竞争力,市场份额逐年攀升,为公司的全球化进程奠定了坚实基础。

Honeywell公司的发展小趣事

背景:进入20世纪后,霍尼韦尔在恒温器领域的技术不断成熟,同时,另一家名为霍尼韦尔供暖专业公司的企业也在加热器领域取得了显著成就。

发展:1927年,明尼阿波利斯热调节器公司与霍尼韦尔供暖专业公司合并,创立了明尼阿波利斯-霍尼韦尔调节器公司。这次合并不仅增强了公司的技术实力,还拓展了业务范围,使公司成为当时最大的高品质珠宝钟表生产商(尽管这与电子行业的直接关联较小,但反映了公司扩张的雄心)。

关键事件:合并后,公司继续深耕工业自动化领域,并收购了布朗仪器公司,进一步巩固了在全球工业控制器和指示器市场的领导地位。

Emerson公司的发展小趣事

进入20世纪,Emerson迎来了一系列技术突破。1903年,公司成功研发出马力超过1/2的电机,这些电机被广泛应用于洗衣机、缝纫机等家用电器,进一步拓宽了公司的业务范围。此外,Emerson还积极开拓海外市场,通过并购和战略合作,逐步将业务拓展至全球范围。

问答坊 | AI 解惑

2006年十大热门微处理器和存储器新品评析

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑   可用性排名:5   Intel的90nm MLC NOR闪存可达1Gb存储密度   编辑推荐:Intel公司推出的第五代StrataFlash多级单元(MLC)闪存产品M18是首个实现量产的1.8V、90nm NOR器件。M18主 ...…

查看全部问答>

STC12C/STC89C系列单片机

STC 半导体   宏晶科技 8051单片机第一品牌 中国本土 MCU 领航者 宏晶科技生产的STC89C51系列单片机的优点: 超强抗干扰,轻松过 4KV 快速脉冲干扰(EFT) 高抗静电(ESD),6KV静电可直接打在芯片管脚上 客户的整机抗静电测试,8 ...…

查看全部问答>

单片机应用技术选编

文件太大了,pdf版本,将近20M,分开传送。…

查看全部问答>

哎,买了个太阳能小夜灯,被骗了。想自己改进一下,请假一下电路如何改进

买了个太阳能小夜灯,说白天太阳底下充电一个白天,能亮一个晚上。可它是当快没电了的时候,一闪一闪的。正常亮也就亮两个小时,然后就是一闪一闪的亮。晚上一闪一闪的晃的睡不着。 我想改进一下,当它快没电的时候不让它亮了。  请问有 ...…

查看全部问答>

问一下友善之臂s3c2440那块板

买了块s3c2440的板,但是不清楚要怎么烧写程序进去,特别是不清楚jlink仿真器怎么用。各位高手教教我,谢谢。…

查看全部问答>

由于PPP没搞出来,刚刚被老板训了,心情很不好,散分!

由于PPP没搞出来,刚刚被老板训了,不过还是要感谢CDSN里帮助过的我人,要不然或者我现在都被老板开了!呵呵!…

查看全部问答>

发几个整理和收藏的430的代码!不经常见到!

0) 液晶\\Debug\\Exe\\测试.d43 1) 串口通信(发送一个字节)\\Backup of 串口通信(发送一个字节).ewp 2) 输出MCLK时钟信号\\Debug\\Exe\\test.d43 3) 看门狗定时器\\Debug\\Exe\\test.d43 4) 定时器设置定时时间\\Debug\\Exe\\tes ...…

查看全部问答>

急急急!!! c8051f040烧不进程序 大侠们出手援助

调试时弹出提示:·····flash···address 0000 ····protect ···记不清了那2行英文,基本上排除硬件上的问题,用Silicon C8051F编程器查看flash前几K擦除不掉,从来没弄过代码保护,调试调试着就出现这个问题了,有什么解决方法么。不 ...…

查看全部问答>

好神奇,NXP竟然有送如此精美礼品!

感谢nxp送的精美小音箱。和我的电路板合个影吧? [ 本帖最后由 liyu7788962 于 2013-7-15 17:48 编辑 ]…

查看全部问答>

中断时间

假如中断程序过长,运行时间为2ms,而定时时间为1ms,那第2次定时时间到时,会发生什么情况?…

查看全部问答>