![]() |
|
||||||||||||||
| . 网站首页 . 产品新知 . 业界新闻 . 解决方案 . 技术文库 . 在线学院 . 活动访谈 . 电子商城 . 服务导航 . 会员区 . TI资源 . | ||
|
||
|
|||||
| TI C64X DSP中断向量表配置(硬件中断) | |||||
作者:A009 文章来源:本站原创 点击数: 更新时间:2007-4-19 ![]() |
|||||
|
1. 编写中断服务例程 在.c源文件中编写ISR函数c_intXX,用于中断处理,如: interrupt void c_intXX (void) { …; } 注:对于硬件中断而言,XX = 00~15。 2.初始化中断向量表,并在内存段中的中断向量表中配置好对应的中断向量 首先是把中断向量表定位到某一内存段中,我们可以在cmd文件中配置中断向量表的内存映射,如: MEMORY { VECTORS: org = 00000000h, len = 00000400h L2SRAM: org = 00000400h, len = 00100000h SDRAM: org = 80000000h, len = 10000000h } SECTIONS { .vecs :> VECTORS .data :> L2SRAM .text :> L2SRAM .switch :> L2SRAM .stack :> L2SRAM .bss :> L2SRAM .cinit :> L2SRAM .far :> L2SRAM .cio :> L2SRAM .const :> L2SRAM .sysmem :> SDRAM .tables :> L2SRAM } 然后建立一个.asm文件,用以配置中断向量表中的中断向量,我们需要声明一些全局变量,以便其他源文件可以引用这些变量或者引用其他源文件的变量,如: .global _vectors .global _c_int00 .global _vector1 .global _vector2 .global _vector3 .global _vector4 .global _vector5 .global _vector6 .global _vector7 .global _c_int08 ; 对应main()函数的c_int08中断服务例程(假设处理的是EDMA中断) .global _vector9 .global _vector10 .global _vector11 .global _vector12 .global _vector13 .global _vector14 .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.启动中断源,如EDMA控制器的中断 至此,中断服务例程c_int8就可以为EDMAINT中断服务了,其它硬件中断向量的配置同理。 |
|||||
| 欢迎点击进入:"61IC中国电子在线"官方网站 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| C64X DSP EDMA/QDMA小结 C64x+IMGLIB C64x+DSPLIB C64x+BEDSPLIB |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|