历史上的今天
返回首页

历史上的今天

今天是:2024年09月16日(星期一)

2019年09月16日 | Zynq篇——uart中断

2019-09-16 来源:eefocus

中断处理函数映射说法是否正确不敢保证,意思就是将中断处理函数的地址与参数放入中断向量表中(_vector_table)中。


早期运用的arm芯片规模较小,在芯片上直接有uart的中断服务函数地址寄存器,直接将中断服务函数的地址写入寄存器就搞定了。然后zynq似乎比较复杂,中断也比较。在zynq中有个Scu(snoop control unit窥探控制单元,也是arm所有的)专门控制中断处理。Vivado SDK中提供了scugic驱动来处理相关的操作。下面具体说一下,中断hook的过程。


XScuGic_LookupConfig  // 找到scugic的定义实体;


XScuGic_CfgInitialize //  初始化scugic实体;


Xil_ExceptionInit()   //异常处理初始化


Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,


(Xil_ExceptionHandler)XScuGic_InterruptHandler,


pScuGic);


这一步基本是固定的,中断触发之后统一由XScuGic_InterruptHandler先处理,然后在HandlerTable中查找相应的处理函数。这个HandlerTable数组的长度为95个,包含了所有的中断ID。


Xil_ExceptionEnable(); 异常处理使能


XScuGic_Connect( pScuGic,XPAR_PS7_UART_1_INTR, (Xil_InterruptHandler)ZUartPs_InterruptHandler , (void*)pUart1Inst);


这才是将我们定义的中断服务函数地址映射到HandlerTable中。也可以使用UartPs驱动中包含的中断处理函数。


XScuGic_Enable( pScuGic, XPAR_PS7_UART_1_INTR); 使能uart对应的中断ID。


XUartPs_SetInterruptMask( pUart1Inst, XUARTPS_IXR_RXOVR | XUARTPS_IXR_TXEMPTY /*| XUARTPS_IXR_TNFUL*/ ); 这应用程序中开启接收缓冲fifo中断与发送为空中断。


这时uart接收到数据,则会自动跳入中断处理函数ZUartPs_InterruptHandler中。向发送硬fifo中写入数据,在数据发空后,也会跳入中断处理函数ZUartPs_InterruptHandler中。两者根据不同中断状态寄存器中的标识进行相应的处理。

推荐阅读

史海拾趣

AURORA公司的发展小趣事

AURORA公司深知自动驾驶技术的商业化落地需要与汽车制造商紧密合作。因此,AURORA积极与大众汽车集团、现代汽车等多家知名汽车制造商建立合作关系。通过共同研发和推广自动驾驶技术,AURORA成功帮助这些汽车厂商加速各自自动驾驶汽车的商用计划。这种深度合作不仅提升了AURORA的市场影响力,也为公司的长期发展奠定了坚实基础。

Chyao Shiunn Electronic Industrial Ltd公司的发展小趣事

在追求经济效益的同时,Chyao Shiunn也注重履行社会责任。公司积极参与公益事业,为当地社区的发展做出贡献。同时,公司还注重环境保护和可持续发展,通过采用环保材料和节能减排技术等方式降低生产过程中的环境污染。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实基础。

请注意,这些故事都是虚构的,并不针对任何真实存在的公司。在现实中,每个公司的成长和发展都有其独特的故事和经历。如果您需要了解特定公司的真实发展历程,建议查阅相关资料或咨询相关人士。

Atmel (Microchip)公司的发展小趣事

随着产品的不断完善和技术的不断进步,Atmel开始积极拓展全球市场。公司通过建立遍布全球的办事处和销售网络,将产品销往世界各地。同时,Atmel还注重品牌建设,通过优质的产品和服务,赢得了客户的信任和好评。这使得Atmel在全球微控制器市场中逐渐崭露头角。

西安航天民芯公司的发展小趣事

随着公司业务的不断拓展和市场规模的逐步扩大,西安航天民芯吸引了众多投资者的关注。多家知名投资机构纷纷入股公司,为公司的发展提供了强大的资本支持。这些资金的注入不仅加速了公司的技术研发和市场拓展步伐,也为公司的持续发展注入了新的活力。

这五个故事展示了西安航天民芯公司在电子行业中的发展历程和取得的成就。通过不断地技术创新和市场拓展,西安航天民芯已经逐渐成为了电子行业中的领军企业之一,为行业的发展做出了积极的贡献。

Econais公司的发展小趣事

作为一家在电子行业有影响力的企业,Econais深知自己的社会责任。公司积极参与各种公益活动,并致力于推动可持续发展。Econais的产品在设计时就考虑到了环保因素,采用低功耗技术减少能源消耗,并选用环保材料降低对环境的影响。此外,Econais还通过技术创新帮助其他企业实现节能减排的目标。

以上五个故事概述了Econais在电子行业发展中的一些重要里程碑和关键事件。这些故事不仅展示了Econais的技术实力和市场竞争力,也体现了公司的社会责任感和可持续发展的理念。

格莱尔(GLE)公司的发展小趣事

格莱尔始终将技术创新视为企业发展的核心动力。公司不断投入研发资源,引进先进的生产设备和高精度的检测仪器,确保产品质量的稳步提升。同时,格莱尔还通过了ISQ9001质量管理体系和IATF16949汽车质量管理体系认证,全部产品实现了符合RoHS标准的无铅化生产,达到了欧盟的环保要求。这些努力使得格莱尔的产品在市场上赢得了良好的口碑和广泛的认可。

问答坊 | AI 解惑

低静态电流应对汽车电子系统要求

如今的汽车电子系统越来越复杂。同时,汽车环境对任何电子产品来说都是很大的挑战,因为汽车电子系统要求运行电压很宽,并且有很大的瞬态电压和温度变化。另外,性能要求也越来越高,需要多个供应电压以满足系统的不同要求。典型的导航系统可以有六 ...…

查看全部问答>

转载 时钟

[ 本帖最后由 tsb00 于 2009-3-22 13:38 编辑 ]…

查看全部问答>

CM12864串口驱动

本帖最后由 paulhyde 于 2014-9-15 09:18 编辑 CM12864 带字库 最少只要占用2个IO口  …

查看全部问答>

改了内存映射表,startup.s出错

RT,改了内存映射表,startup.s的Jump to KernelStart里面的add        r0, pc, #g_oalAddressTable - (. + 8)出错,是不是单改内存映射表不行的?不知道哪里还需要修改…

查看全部问答>

如何获得声音默认输出设备

我现在做法如下,记得有人说第一次枚举的是缺省设备,但是for循环的i从0还是-1开始?         int s_nAudDevCount   =   waveOutGetNumDevs();            printf(\"s_nA ...…

查看全部问答>

横竖屏自动切换问题

想做个有电话借打时,屏幕自动转换为竖屏,借打完成后,自动转换为原来的屏幕方式,各位提供个方法…

查看全部问答>

求助 ATAPI 驱动

小弟刚接触这个东东,为一DVDROM写ATAPI驱动,检测到硬件没问题,Identify命令(0xa1)执行成功,但执行SCSI测试命令时出错,通过RequestSense(0x03h)命令检测到sensekey 为2。我的主芯片是三星5009。请问各位大虾这是什么原因造成的阿,不胜感激 ...…

查看全部问答>

最近几天进度怎么样了?

最好制定个大概的进度时间表,每步跟踪执行效果,大家也比较了解项目的具体进度,现在这样遥遥无期会影响大家的积极性的…

查看全部问答>