一、基础知识
S3C2440有3个独立的串口,每一个都可以利用DMA和中断方式操作。每个包含2个64字节FIFO,一个收,一个发。非FIFO模式相当于FIFO模式的一个寄存器缓冲模式。每一个UART有7种状态,overrun错误,校验错误,帧错误,断点,接收缓冲区准备好,发送缓冲区为空,发送移位寄存器为空。当接收移位寄存器中的数据传给FIFO的时候,且接收的数据触发了Rx FIFO的阀值,Rx中断产生了。发送器中FIFO的还未发得数据到达Tx FIFO阀值的时候,Tx中断产生了。(我觉得应该理解为:发送器中FIFO发送结束,即为空的时候产生中断。)
二、例程:串口0接收中断,接收FIFO出发深度16byte
 /**************串口0寄存器初始化****************/
void UART0_INIT(int pclk,int baud)
{
int i;
if(pclk == )
pclk = PCLK;
rUFCON0 = 0x21; //UART channel 0 FIFO control register, FIFO disable
rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable
rULCON0 = 0x3;
rUCON0 = 0x385; // Control register
rUBRDIV0=( (int)(pclk/./baud+0.5) - );
}
 /************中断处理函数********************/
char buff[];
char *ps = buff;
int i = ; DisableSubIrq(BIT_SUB_RXD0); //关闭串口中断
i = (rUFSTAT0&0x1f);
Uart_Printf("count is %x\n",i);
if(rSUBSRCPND & BIT_SUB_RXD0) //接收中断
{
while(((rUFSTAT0&0x1f)>))
{
*ps++ = rURXH0;
}
}
*ps++ = '\0';
i = (rUFSTAT0&0x1f);
Uart_Printf("count is %x\n",i);
Uart_Printf("buff is %s\n",buff);
ClearSubPending(BIT_SUB_RXD0); //恢复中断
ClearPending(BIT_UART0);
EnableIrq(BIT_UART0);
EnableSubIrq(BIT_SUB_RXD0);
三、运行结果及分析
1.当一次接收的字符数小于FIFO-RX的触发深度时(本例中RX触发深度为16byte),若超过3个时钟周期依旧没有检测到字符则同样会因为超时而发起中断请求。
 
 
2.当一次发送的字符数在16byte-29byte之间时,串口只会发起一次中断请求。例程中,检测到串口发起中断后程序会从FIFO中取走所有的字符,猜测还未等到剩下的字符发起超时中断,其已被取走,因而不会发起超时中断,当然若不取走则会发生超时中断(猜测:单片机虽设定为16字节发起中断,但为了不影响后面数据的接收,留了一定大小的缓冲区,在串口发起中断请求到处理器正式响应之前继续接收下面的字符)。
3.当一次发送的字符数大于29byte时,产生两次以上的中断。
 

S3C2440UART之FIFO的更多相关文章

  1. s3c2440串口详解

    一.UART原理说明 通用异步收发器简称UART(Universal Asynchronous Receiver/Transmitter),它用来传输串行数据:发送数据时,CPU将并行数据写入UART ...

  2. (翻译)FIFO In Hardware

    翻译一些自己觉得有价值的材料,工作中碰到英语大多数是读,基本没有写或者翻的,翻得不好不到位的敬请指摘. 同时也附原文以供参考. http://electronics.stackexchange.com ...

  3. OS存储管理——FIFO,LRU,OPT命中率

    课程设计课题 存储管理程序设计 摘 要 虚拟存储器作为现代操作系统中存储管理的一项重要技术,实现了内存扩充功能.而分页请求分页系统正好可以完美的支持虚拟存储器功能,它具有请求调页功能和页面置换功能.在 ...

  4. 详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)

    在学操作系统的时候,就会接触到缓存调度算法,缓存页面调度算法:先分配一定的页面空间,使用页面的时候首先去查询空间是否有该页面的缓存,如果有的话直接拿出来,如果没有的话先查询,如果页面空间没有满的时候, ...

  5. 页置换算法FIFO、LRU、OPT

    页置换算法FIFO.LRU.OPT 为什么需要页置换 在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断.当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调 ...

  6. LRU LFU FIFO 转载

    -------------------------------------->href--------------------------> http://blog.chinaunix.n ...

  7. Lattice FIFO 使用之FIFO_DC输入输出宽度不同时 的一个注意事项

    在使用FIFO_DC的时候,我们知道这个FIFO的一个功能是可以输入输出的数据宽度不一样,比如: 输入数据为128bit,输出数据为16bit,FIFO内部可以实现这样的转换,但是输出的时候是先送出一 ...

  8. 串口实现FIFO接受数据

    基本原理:静态队列 /* * 串口的FIFO简单读取实现 * 功能,实现串口的FIFO实现 * 使用方法: * 版本:v1.0.0 * */ #include "sys.h" #i ...

  9. cache4j轻量级java内存缓存框架,实现FIFO、LRU、TwoQueues缓存模型

    简介 cache4j是一款轻量级java内存缓存框架,实现FIFO.LRU.TwoQueues缓存模型,使用非常方便. cache4j为java开发者提供一种更加轻便的内存缓存方案,杀鸡焉用EhCac ...

随机推荐

  1. 编写高质量代码:改善Java程序的建议

    建议的采用顺序是List<T>.List<?>.List<Object> List<T>.List<?>.List<Object> ...

  2. Java将TXT上的数据转换成excel里面

    package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...

  3. arm汇编指令

    ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令 一.跳转指令 跳转指令用于实现程序流程的跳转 跳转指令分类 Ⅰ ...

  4. How do I get the path of the current executed file in Python?

    First, you need to import from inspect and os from inspect import getsourcefile from os.path import ...

  5. JSTL 操作符

    el表达式的取值默认顺序:     pageScope  requestScope  sessionScope  applicationScope     结构,采用.导航,也称为存取器   ${us ...

  6. CentOS 安装Paramiko模块

    转自:http://www.cnblogs.com/hyli/p/3910585.html 1.下载安装包: https://pypi.python.org/packages/source/p/par ...

  7. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  8. spring自动扫描、DispatcherServlet初始化流程、spring控制器Controller 过程剖析

    spring自动扫描1.自动扫描解析器ComponentScanBeanDefinitionParser,从doScan开始扫描解析指定包路径下的类注解信息并注册到工厂容器中. 2.进入后findCa ...

  9. https单向认证和双向认证

    单向认证: .clinet<--server .clinet-->server .client从server处拿到server的证书,通过公司的CA去验证该证书,以确认server是真实的 ...

  10. ****Linux MySQL命令运用个人总结

    1.xampp在linux下如何使用mysql命令 A: 解决方法(推荐第二个方法): 1.xampp中的命令工具在/opt/lampp/bin/目录中,所以可以这样运行mysql命令 /opt/la ...