历史上的今天
返回首页

历史上的今天

今天是:2025年01月13日(星期一)

正在发生

2021年01月13日 | 对LPC2103串口的一些理解

2021-01-13 来源:eefocus

对LPC2103串口的一些理解 LPC2103含有个相互独立的通用异步串行接口 (UART0 UART1),其特点是具有16字节的接收和发送FIFO,符合550工业标准(我对这个标准不了解),接收触发可以设置为1字节、4字节、8字节、14字节。


在实际应用时,需要配置的主要的寄存器有(以UART0为例):线控制寄存器U0LCR,除数锁存器U0DLM、U0DLL,中断使能寄存器U0IER,FIFO控制寄存器U0FCR,中断标志寄存器U0IIR。在使用的时候,最让我困惑的是U0FCR的触发选择位U0FCR[7:6], 这两位的不同组合代表不同的触发字节:00--1字节触发;01--4字节触发;10--8字节触发;11--14字节触发。当我将它设置为8字节触发,并使能接收中断后,使用串口调试助手向LPC2103的UART0发送数据,发现可以进入中断,却无法执行中断服务程序。


中断服务程序的代码如下:


void __irq uart0_isr(void)

{

uint8 i;


if(U0IIR&0x0f == 0x04)

{

for(i=0;i<8;i++)


lcd_write_char(2,i,U0RBR);

}

VICVectAddr = 0x00;

}


通过调试器单步调试,发现U0IIR&0x0f == 0x04的条件始终不成立,watch窗口显示U0IIR的值为0x000000cc,而尝试读取U0IIR寄存器的值之后,发现该寄存器的值立即变为0x000000c1。于是感觉多字节触发的功能不可用,改用单字节触发,发现工作正常,而每次读取U0IIR寄存器之后该寄存器的值也立即复位。于是查阅NXP的data sheet,找到了答案:The U0IIR must be read in order to clear the interrupt prior to exiting the Interrupt Service Routine. 说明在中断服务程序中必须读取U0IIR的值才能清楚中断标志,当然寄存器的值也就复位了。但是为什么用8字节触发的功能无法使用呢?查阅data sheet,发现当U0IIR的低4位为0xc时表示接收超时。为什么总是会接收超时呢?我想起来每次调试时我都是用串口调试助手发送一个字符,而当设置为8字节触发时,接收到一个字符后,接收器经过一定的时间后没有接收到字符,就会触发中断,提示接收超时。大概了解问题出在哪里了,于是我尝试一次发送8个以上字符,采用8字节触发的接收方式,发现发送的字符串的前8个可以正常接收,说明接收中断正常触发了,没有出现超时。


经过这番折腾,总算是明白了所谓的多字节触发是什么意思了。本来以为设置为多字节触发,不论接收到的字符是一次性收到还是分时收到,都会积累起来,直到达到预设的上限然后触发。以这种想当然的思路去设计程序,跑出来的结果与预期的完全不符,并且在这种情况下很难检查出问题。由此深深地感觉到,做事情不能总是想当然,还是要踏踏实实,不能丢下细节的东西。

推荐阅读

史海拾趣

Etron公司的发展小趣事

1991年,台湾的电子行业正蓬勃发展,钰创科技(Etron)在这一时期应运而生,创始人凭借对市场敏锐的洞察力,决定专注于利基型缓冲记忆体产品与系统晶片的设计与生产。初创时期,公司面临着技术、资金和市场等多重挑战。然而,钰创科技凭借其团队的技术实力和创新精神,成功开发出了一系列具有竞争力的产品,逐渐在市场上崭露头角。

BLT Circuit Services公司的发展小趣事

品质一直是BLT Circuit Services公司的核心竞争力。公司注重品质管理,建立了严格的质量控制体系,从原材料采购到生产过程中的每一个环节都进行严格把关。正是这种对品质的执着追求,使得BLT Circuit Services的产品在行业内赢得了良好的口碑,为公司赢得了大量的忠实客户。

Anritsu公司的发展小趣事

随着公司实力的不断增强,BLT Circuit Services开始积极拓展国内外市场。公司积极参加各类行业展会,与国内外同行进行深入交流与合作,不断提升公司的知名度和影响力。同时,公司还根据市场需求调整产品策略,推出了一系列符合市场需求的新产品,进一步扩大了市场份额。

Amphenol Nexus公司的发展小趣事

Amphenol Nexus Technologies的故事始于1961年,由William H. Flanagan和Randolph K. Byers两位创业者共同创立。当时,公司的核心业务是设计和制造高品质的音频插头、插孔和MIL-S-8805/3按钮开关。在创始人的领导下,公司凭借精湛的工艺和可靠的产品质量,逐渐在军事和商业通信耳机市场赢得了声誉。随着业务的扩展,Amphenol Nexus Technologies的产品线不断丰富,满足了市场日益增长的需求。

CommScope Inc公司的发展小趣事

随着全球经济的不断发展,亚洲市场逐渐成为通信行业的重要增长点。康普公司敏锐地捕捉到了这一机遇,于1997年在苏州工业园区成立了康普通讯技术(中国)有限公司,这是康普在亚洲开设的第一家工厂。该工厂的成立不仅提高了康普在亚洲市场的生产效率,也为其进一步开拓亚洲市场提供了有力的支持。此后,康普在亚洲市场的业务逐渐扩大,为众多国内大型项目提供了网络解决方案。

联智(Celfras)公司的发展小趣事

为了扩大品牌影响力,联智积极参与国际展会和交流活动。例如,公司曾参加2020无线充电亚洲展,并设立展位与观众进行深入交流。这种面对面的交流方式使联智能够更直接地了解市场需求和行业动态,同时也为公司提供了展示自身技术和产品的机会。通过参与国际展会,联智不仅提升了品牌知名度,还建立了广泛的合作伙伴关系,为公司未来的发展奠定了坚实基础。

以上五个故事均基于公开资料对联智(Celfras)公司发展历程的简述,旨在展现公司在电子行业的成长和贡献。每个故事都尽量保持了客观性和中立性,避免了对公司的主观评价。

问答坊 | AI 解惑

epm7128s OE1和GCLRn 怎么使用

7128S 的OE和clr怎么接,一般情况 。…

查看全部问答>

多用途DF无线数据收发模块的使用

详细资料见http://www.xie-gang.com/df.htm 电路图本已经剪辑了,但不会上传,所以大家还是去网站看吧。:L 我现在是想做个无线的遥控,用单片机控制的。 发射部分,我想应该是用一个I/O口输出电平的变化,比如01010011,那么我应该能看到发射后 ...…

查看全部问答>

一个RISC核一般是怎么开始启动执行

一个RISC核一般是怎么开始启动,如何执行送入它指令存储器中的经过汇编器编译过的二进制代码的呢?也就是硬件第一次取指从哪儿取?…

查看全部问答>

单片机不同频率方波信号怎么连续产生?

是这样的,我想做一个有连贯动作的机器人,机器人完成了一个动作之后再做下一个动作,每一步动作快慢不一样,我想产生这样的方波信号来控制步进电机。需要有这样的功能,首先由外部中断触发,计时器开始产生频率为f1的方波,f1完了之后产生频率f2的 ...…

查看全部问答>

Dell I6400 BIOS 驱动无法安装问题

高手帮忙啊,我电脑全格后重装后无法安装Dell I6400 BIOS A17驱动,因为我的电池出问题了,但AC adapter能正常使用,所以我不想去买块新的电池了,请问高手如何跳过电池检测而顺利安装BIOS A17?我用BIOS A14或其他更老版本的BIOS都不行,都要经过电池检测 ...…

查看全部问答>

关于设计单片机程序的问题

刚刚接触单片机,选修课结课老师要求我做出一个单片机的程序。老师要求不要特别简单的。 我想不出做什么,所以请教大家,我应该做什么实验呢?不要太复杂的,比方说关于以太网口的实验,我可以做什么啊?请大家帮我想想,如果有代码参考更好了。我 ...…

查看全部问答>

如何让wince5.0的系统支持运行.net2.0下用VS2005开发的程序?(定制系统内核)

请问怎么解决让wince5.0的系统支持运行.net2.0下用VS2005开发的程序,是直接安装PB5.0后定制的系统内核就支持吗? 我开始开发时装了VS2003和PB4.2,是支持.net1.0的程序在wince4.2上面运行的,但是装了VS2005和PB5.0后程序就不能支持运行了(vs200 ...…

查看全部问答>

一个简单电子钟调试

#include #define uchar unsigned char #define uint  unsigned int uchar code table[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};   //位选,控制那个数码管亮。 uchar code table1[12]={0x03, 0x9f, 0x25, 0x0d, 0x ...…

查看全部问答>

STM32的USB设备拔出时,能否产生一个中断?

                                 STM32的USB设备拔出时,能否产生一个中断?…

查看全部问答>

初学者急问,怎么使STM32产生1μs的延时

                                 怎么使STM32产生1μs的延时?非常急!!!!…

查看全部问答>