S3C2440A的通用异步收发器(UART)配有3个独立异步串行I/O(SIO)端口,每个都可以是基于中断或基于DMA模式的操作。换句话说,UART可以通过产生中断或DMA请求来进行CPU和UART之间的数据传输。

UART通过使用系统时钟可以支持最高115.2Kbps的比特率。如果是外部器件提供UEXTCLK的UART,则UART可以运行在更高的速度。每个UART通道包含两个的64字节的FIFO给发送和接收。

S3C2440A的UART包括了可编程波特率,红外(IR)发送/接收,插入1个或2个停止位,5位、6位、7位或8位的数据宽度以及奇偶校验。每个UART包含一个波特率发生器、发送器、接收器和一个控制单元,如图11-1所示。波特率发生器可以由PCLK、FCLK/n或UEXTCLK(外部输入时钟)时钟驱动。发送器和接收器包含了64字节FIFO和数据移位器。

将数据写入到FIFO接着在发送前复制到发送移位器中。随后将在发送数据引脚(TxDn)移出数据。与此同时从接收数据引脚(RxDn)移入收到的数据,接着从移位器复制到FIFO

使用2440的uart和其他芯片的uart使用类似,也是分为以下几步

设置数据长度,开始为,停止位,奇偶校验相关

选择设置uart时钟,中断类型,fifo状态等

设置FIFO,(我禁用了fifo)

设置自动流控制(我禁用了自动流控制)

设置波特率

波特率的计算公式如下

然后很重要的一点是串口配置好了还需要配置串口IO,参见之前的IO配置

如果要使能中断的话还要配置相应的中断,主要还是之前说过的寄存器,但是多了两个,子中断寄存器,

也就是说打开串口总中断之后需要再打开相应的子中断才能工作,中断处理清除总中断标志之后还要清除对应的子中断标志才行

Uart0.c

  1. #include "uart0.h"
  2. #include "stdio.h"
  3.  
  4. //////////////////////////////////////////////////////////////////
  5. //加入以下代码,支持printf函数,而不需要选择use MicroLIB
  6. #if 1
  7. #pragma import(__use_no_semihosting)
  8. //标准库需要的支持函数
  9. struct __FILE
  10. {
  11. int handle;
  12.  
  13. };
  14.  
  15. FILE __stdout;
  16. //定义_sys_exit()以避免使用半主机模式
  17. _sys_exit(int x)
  18. {
  19. x = x;
  20. }
  21. //重定义fputc函数
  22. int fputc(int ch, FILE *f)
  23. {
  24. while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
  25. WrUTXH0((u8)ch);;
  26. return ch;
  27. }
  28. #endif
  29.  
  30. /***********只打开接收中断***********/
  31. void __irq uartRxISP(void)
  32. {
  33. char ch;
  34. int i = 0;
  35.  
  36. rSUBSRCPND |= 0x3; //清除rx,tx中断请求
  37. rSRCPND |= 0x1<<28; //清除串口源挂起
  38. rINTPND |= 0x1<<28; //清除串口子挂起
  39.  
  40. if(rUTRSTAT0 & 1) //接收缓冲区有数据
  41. {
  42. ch = rURXH0; //接收字节数据,接受处理
  43. Uart0SendByte(ch);
  44. }
  45. }
  46.  
  47. void Uart0Init(u32 baud)
  48. {
  49. CalcBusClk(); //计算总线频率
  50.  
  51. rULCON0 = 0x03; //8位数据,1位停止位,无校验,不使用红外
  52. rUFCON0 = 0; //禁止fifo
  53. rUMCON0 = 0; //禁止rts自动流控制
  54.  
  55. rUCON0 = 0x5; //使用pclk时钟,中断模式
  56.  
  57. rUBRDIV0=( (int)(PCLK/16./baud+0.5) -1 );
  58.  
  59. rGPHCON &=~((3<<4)|(3<<6));
  60. rGPHCON |=(2<<4)|(2<<6); //把GPH3、GPH2设置为RXD[0] 、TXD[0] 功能
  61.  
  62. rSRCPND |= 0x1<<28; //清除串口中断挂起
  63. rSUBSRCPND |= 0x3; //清除收发中断
  64. rINTPND |= 0x1<<28; //清除串口中断请求
  65. rINTSUBMSK &= ~(0x1); //打开UART0接收中断,使能中断
  66. rINTSUBMSK |= (0x1<<1); //关闭UART0发送中断,禁止中断
  67. rINTMSK &= ~(0x1<<28); //打开UART0中断屏蔽,总中断
  68.  
  69. pISR_UART0 = (unsigned)uartRxISP; //中断子程序建立连接
  70.  
  71. }
  72.  
  73. void Uart0SendByte(u8 dat)
  74. {
  75. while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
  76. WrUTXH0(dat);
  77. while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
  78. }

Uart0.h

  1. #ifndef __UART0_H_
  2. #define __UART0_H_
  3. #include "2440addr.h"
  4. #include "def.h"
  5. #include "clock.h"
  6. #include "stdio.h"
  7.  
  8. void Uart0Init(u32 baud);
  9.  
  10. void Uart0SendByte(u8 dat);
  11.  
  12. #endif

S3C2440串口及其中断系统详解的更多相关文章

  1. S3C2440外部中断系统详解

    个中断源的请求.提供这些中断源的是内部外设,如DMA控制器.UART.IIC等等.在这些中断源中,UARTn.AC97和EINTn中断对于中断控制器而言是“或”关系.任意一个中断发生都会触发总中断 当 ...

  2. linux-2.6.26内核中ARM中断实现详解(转)

    转载:http://www.cnblogs.com/leaven/archive/2010/08/06/1794293.html 更多文档参见:http://pan.baidu.com/s/1dDvJ ...

  3. Bootstrap栅格系统详解,响应式布局

    Bootstrap栅格系统详解 栅格系统介绍 Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列. 栅格系统用于通 ...

  4. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  5. Vmware12安装centos系统详解

    vmware12安装centos7系统详解 用虚拟机12安装centos7系统详细安装过程,后附centos7下载地址. 工具/原料 虚拟机12 centos7系统镜像 方法/步骤 1 1.百度搜索c ...

  6. centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解

    centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解 操作系统:centos 7.2 x86_64 安装walle系统服务端 1.以下安装,均在宿主机( ...

  7. syslog之一:Linux syslog日志系统详解

    目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...

  8. 利用python求解物理学中的双弹簧质能系统详解

    利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...

  9. 搭建zabbix监控系统详解

    搭建zabbix监控系统详解 文:warren   博文大纲:一.前言 二.zabbix监控架构三.搭建Zabbix监控服务器四.搭建过程中遇到有些服务无法正常启动的解决办法 一.前言 : 要想实时的 ...

随机推荐

  1. ReactiveCocoa 浅析

    转载自:http://limboy.me/ios/2013/12/27/reactivecocoa-2.html   ReactiveCocoa是Github开源的一款cocoa FRP 框架,我在之 ...

  2. Lucene.NET中Field.Index 和 Field.Store的几种属性的用法

    转载自 http://blog.csdn.net/yja886/article/details/6612069 lucene在doc.add(new Field("content" ...

  3. hdu 4463 Outlets(最小生成树)

    Outlets Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submi ...

  4. 转:selenium 并行启动多个浏览器

    https://github.com/fool2fish/selenium-doc/blob/master/official-site/selenium-grid.md Selenium Grid 快 ...

  5. ThinkPHP 框架执行流程分析

    总体来说,应用的流程涉及到几个文件:Index.phpThinkPHP.phpThink.class.phpApp.class.phpDispatcher.class.phpThinkPHP/Mode ...

  6. Linux 部署 Tomcat和JDK

    一:安装jdk下载将jdk加压后放到/usr/local目录下: [root@master ~]#chmod 755 jdk-6u5-linux-x64.bin [root@master ~]# ./ ...

  7. myeclipse连接hadoop集群编程及问题解决

    原以为搭建一个本地编程测试hadoop程序的环境很简单,没想到还是做得焦头烂额,在此分享步骤和遇到的问题,希望大家顺利. 一.要实现连接hadoop集群并能够编码的目的需要做如下准备: 1.远程had ...

  8. 条形图(diagrams)

    条形图(diagrams) 题目描述 小 虎刚上了幼儿园,老师让他做一个家庭作业:首先画3行格子,第一行有3个格子,第二行有2个格子,第三行有3个格子.每行的格子从左到右可以放棋子,但要 求除第一行外 ...

  9. JfreeCHart 异常:Chart image not found

    http://bbs.justep.com/thread-54775-1-1.html java.lang.IllegalArgumentException: Width (0) and height ...

  10. sockaddr结构体

    sockaddr 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 一,用于存储参与(IP)Windows套接字通信的计算机上的一个internet协议(IP)地址.为了统一地 ...