打印

DaVinci DM6437 中文教程(4)

[复制链接]
1838|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaochy1126|  楼主 | 2012-7-19 18:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
四、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

相关帖子

沙发
gaochy1126|  楼主 | 2012-7-19 18:29 | 只看该作者
为了初始化中断向量表中的中断向量,可以定义一个虚拟的中断向量:
_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中断服务了,其它硬件中断向量的配置同理。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1030

主题

11276

帖子

25

粉丝