S3C2440串口及其中断系统详解
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
#include "uart0.h"
#include "stdio.h" //////////////////////////////////////////////////////////////////
//加入以下代码,支持printf函数,而不需要选择use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle; }; FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
WrUTXH0((u8)ch);;
return ch;
}
#endif /***********只打开接收中断***********/
void __irq uartRxISP(void)
{
char ch;
int i = 0; rSUBSRCPND |= 0x3; //清除rx,tx中断请求
rSRCPND |= 0x1<<28; //清除串口源挂起
rINTPND |= 0x1<<28; //清除串口子挂起 if(rUTRSTAT0 & 1) //接收缓冲区有数据
{
ch = rURXH0; //接收字节数据,接受处理
Uart0SendByte(ch);
}
} void Uart0Init(u32 baud)
{
CalcBusClk(); //计算总线频率 rULCON0 = 0x03; //8位数据,1位停止位,无校验,不使用红外
rUFCON0 = 0; //禁止fifo
rUMCON0 = 0; //禁止rts自动流控制 rUCON0 = 0x5; //使用pclk时钟,中断模式 rUBRDIV0=( (int)(PCLK/16./baud+0.5) -1 ); rGPHCON &=~((3<<4)|(3<<6));
rGPHCON |=(2<<4)|(2<<6); //把GPH3、GPH2设置为RXD[0] 、TXD[0] 功能 rSRCPND |= 0x1<<28; //清除串口中断挂起
rSUBSRCPND |= 0x3; //清除收发中断
rINTPND |= 0x1<<28; //清除串口中断请求
rINTSUBMSK &= ~(0x1); //打开UART0接收中断,使能中断
rINTSUBMSK |= (0x1<<1); //关闭UART0发送中断,禁止中断
rINTMSK &= ~(0x1<<28); //打开UART0中断屏蔽,总中断 pISR_UART0 = (unsigned)uartRxISP; //中断子程序建立连接 } void Uart0SendByte(u8 dat)
{
while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
WrUTXH0(dat);
while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
}
Uart0.h
#ifndef __UART0_H_
#define __UART0_H_
#include "2440addr.h"
#include "def.h"
#include "clock.h"
#include "stdio.h" void Uart0Init(u32 baud); void Uart0SendByte(u8 dat); #endif
S3C2440串口及其中断系统详解的更多相关文章
- S3C2440外部中断系统详解
个中断源的请求.提供这些中断源的是内部外设,如DMA控制器.UART.IIC等等.在这些中断源中,UARTn.AC97和EINTn中断对于中断控制器而言是“或”关系.任意一个中断发生都会触发总中断 当 ...
- linux-2.6.26内核中ARM中断实现详解(转)
转载:http://www.cnblogs.com/leaven/archive/2010/08/06/1794293.html 更多文档参见:http://pan.baidu.com/s/1dDvJ ...
- Bootstrap栅格系统详解,响应式布局
Bootstrap栅格系统详解 栅格系统介绍 Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列. 栅格系统用于通 ...
- java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET
java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了! 社区福利快来领取免费参加MDCC大会机会哦 Tag功能介绍—我们 ...
- Vmware12安装centos系统详解
vmware12安装centos7系统详解 用虚拟机12安装centos7系统详细安装过程,后附centos7下载地址. 工具/原料 虚拟机12 centos7系统镜像 方法/步骤 1 1.百度搜索c ...
- centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解
centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解 操作系统:centos 7.2 x86_64 安装walle系统服务端 1.以下安装,均在宿主机( ...
- syslog之一:Linux syslog日志系统详解
目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...
- 利用python求解物理学中的双弹簧质能系统详解
利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...
- 搭建zabbix监控系统详解
搭建zabbix监控系统详解 文:warren 博文大纲:一.前言 二.zabbix监控架构三.搭建Zabbix监控服务器四.搭建过程中遇到有些服务无法正常启动的解决办法 一.前言 : 要想实时的 ...
随机推荐
- Android NDK and OpenCV Development With Android Studio
Android NDK and OpenCV Development With Android Studio Hujiawei 172 2014年10月22日 发布 推荐 0 推荐 收藏 4 收藏,5 ...
- POJ 1061 青蛙的约会(欧几里得扩展)
题意:已知青蛙1位置x,速度m,青蛙2位置y,速度n,纬线长度为l,求他们相遇时最少跳跃次数. 思路:设最小跳跃次数为k,则(x + k*m) - (y + k*n) = q*l:经过整理得到k*(n ...
- [原]JavaScript总结
匿名函数 var ff = function () { return 'hhqybsl'; }; var result = ff(); ...
- zencart url特殊字符处理
1. 支持 在后台的seo url 将Outputw3c 改为false 2.删除特殊字符 这对于在少量的zen cart网站上处理少量的特殊字符可能还适用,实际上我们经常在导入产品数据时或者或少会带 ...
- 完整的 HTML 4 + HTML 5 实体参考手册
1 完整的 HTML 4 + HTML 5 实体参考手册 http://www.runoob.com/charsets/html-charsets.html 1 下表中的所有实体都能在所有的浏览器中正 ...
- javascript 手机号码正则表达式验证函数
代码如下: function checkMobile(){ var sMobile = document.mobileform.mobile.value if(!(/^1[3|4|5| ...
- elasticsearch 配置说明
elasticsearch的config文件夹里面有两个配置文件:elasticsearch.yml和logging.yml,第一个是es的基本 配置文件,第二个是日志配置文件,es也是使用log4j ...
- 【项目笔记】布局文件报错Suspicious size: this will make the view invisible, probably intended for layout_width
写着写着就懵逼了,一直以为布局文件没写错啊,horizontal就是竖直啊,原来布局文件报错,不仅仅需要从报错的地方解决问题,还需要从其他地方去分析. 很明显是方向orientation选错了,应该写 ...
- UL/LI
如何用CSS制作横向菜单 让ul li横向排列及圆点处理 我们先建立一个无序列表,来建立菜单的结构.代码是: <ul><li><a href="1&quo ...
- android脚步---Itent.ACTION_PICK ,startActivityForResult
public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(Intent.A ...