"); //-->
|
DM6437 中断向量表配置1. 编写中断服务例程
在.c源文件中编写ISR函数c_intXX,用于中断处理,如: interrupt void c_intXX (void) { …; } 注:对于硬件中断而言,XX = 00~15。 2.初始化中断向量表,并在内存段中的中断向量表中配置好对应的中断向量 首先是把中断向量表定位到某一内存段中,我们可以在cmd文件中配置中断向量表的内存映射,如: MEMORY { VECS: o = 0x10800000 l = 0x00000400 MEMTEST: o = 0x10800400 l = 0x00000200 IRAM: o = 0x10800600 l = 0x0001FA00 DDR2: o = 0x80000000 l = 0x10000000 } SECTIONS { .bss > IRAM .cinit > IRAM .cio > IRAM .const > IRAM .data > IRAM .far > IRAM .stack > IRAM .switch > IRAM .sysmem > IRAM .text > IRAM .vecs > VECS .ddr2 > DDR2 } 然后建立一个.asm文件,用以配置中断向量表中的中断向量,我们需要声明一些全局变量,以便其他源文件可以引用这些变量或者引用其他源文件的变量,如: *-----------------------------------------------------------------* Global symbols defined here and exported out of this file *-------------------------------------------------------------------- .global _vectors .global _c_int00 .global _vector1 .global _vector2 ;RSVD保留 .global _vector3 ;RSVD保留 .global _vector4 .global _vector5 .global _vector6 .global _vector7 .global _vector8 .global _vector9 .global _vector10 .global _vector11 .global _vector12 .global _vector13 .global _c_int14_vencint ; Hookup the c_int14 ISR in main() .global _vector15 因为引用了rts的_c_int00中断,即RESET中断,因此需要引入这个符号: .ref _c_int00 为了把中断服务例程的地址,即中断向量插入到中断向量表中,可以定义一个宏: VEC_ENTRY .macro addr STW B0,*--B15 MVKL addr,B0 MVKH addr,B0 B B0 LDW *B15++,B0 NOP 2 NOP NOP .endm 为了初始化中断向量表中的中断向量,可以定义一个虚拟的中断向量: _vec_dummy: B B3 NOP 5 接下来就可以配置中断向量表了: .sect “.vecs” .align 1024 _vectors: _vector0: VEC_ENTRY _c_int00 ;RESET中断 _vector1: VEC_ENTRY _vec_dummy ;NMI不可屏蔽中断 _vector2: VEC_ENTRY _vec_dummy ;保留中断1 _vector3: VEC_ENTRY _vec_dummy ;保留中断2 _vector4: VEC_ENTRY _vec_dummy ;外部中断INT4 _vector5: VEC_ENTRY _vec_dummy ;外部中断INT5 _vector6: VEC_ENTRY _vec_dummy ;外部中断INT6 _vector7: VEC_ENTRY _vec_dummy ;外部中断INT7 _vector8: VEC_ENTRY _c_int08 ; EDMA控制器中断EDMAINT,对应于c_int08 ISR _vector9: VEC_ENTRY _vec_dummy;JTAGRTDX中断 _vector10: VEC_ENTRY _vec_dummy;EMIF_SDRAM_Timer中断 _vector11: VEC_ENTRY _vec_dummy;McBSP_0_Receive中断 _vector12: VEC_ENTRY _vec_dummy;McBSP_1_Transmit中断 _vector13: VEC_ENTRY _vec_dummy;Host_Port_Host_to_DSP中断 _vector14: VEC_ENTRY _vec_dummy;Timer0中断 _vector15: VEC_ENTRY _vec_dummy;Timer1中断 3. 在C程序中指定定义的中断向量表,并且启用CPU中断功能 在C程序中,用CSL的IRQ模块来设置中断比较方便,在设置之前,需要外部链接上面的asm程序的中断向量表符号: extern far void vectors();//之所以为vectors,因为C编译器编译后自动改名其为_vectors 引用了中断向量表之后,就可以设置中断了: IRQ_setVecs(vectors); //指向asm中定义的中断向量表 IRQ_nmiEnable(); IRQ_globalEnable(); IRQ_map(IRQ_EVT_EDMAINT, 8); //映射事件到指定的物理中断号 IRQ_reset(IRQ_EVT_EDMAINT); 4.启动中断源,如venc中断 至此,中断服务例程c_int14_vencint 就可以为venc中断服务了,其它硬件中断向量的配置同理。 |
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
英伟达计划到 2026 年使用光在 AI GPU 之间进行通信
美国将收购英特尔10%股份,但晶圆厂的未来仍取决于客户需求
设计指南-选择用于DC-DC转换器输出的电容,电感
随动光目标姿态控制系统
新型高电压精密放大器--业界最精确的SPICE模型
糖厂蔗层厚度自动控制系统的开发和应用
苹果首款折叠手机定于2026年发布,铰链供应商竞争加剧
[help]uclinux如何才能认证登陆,谢谢
由SGZ35时间控制集成电路构成定时触发SCP电路
多家一线资本入场!AI 玩具领军企业跃然创新完成 2 亿元 A 轮融资
求助写初始化文件及相关问题?
设计指南-热功率器件设计中的几点思考
水质自动监控系统的设计与实现
提高实时系统数据采集质量的研究
48V系统千亿市场爆发!博世、特斯拉、比亚迪竞逐高效电源新战场
采用DZS-01的定时器电路
ASIC市场龙头厂先抢先赢 第二梯队营收进帐恐等2028年
中国新的稀土规则要求每月报告产品流向
采用NE555的定时器电路
示波器能测量什么?
请问 Samsung的24a0和2440有什么区别?
泰克公司推出4GHz新型数字荧光示波器TDS7000系列
[求助]有人知道BD3426K芯片吗?求I2C通信时的从机地址
由YH2902A多功能定时控制模块构成多功能延时照明灯控制电路
低价转让 Multi_ICE 技术
测量射频电路
由U2403B恒流充电计时器构成温度保护电路
传输线回流路径
谷歌硬件布局:AI 成焦点,翻转式折叠屏和平板电脑暂缓
设计指南-空间限定的集成FET的DC - DC转换器