1、有没有关于中断的例程
2、中断向量表如何编写,是不是只能用汇编编写。
3、全局符号是什么概念啊,是指全局变量吗,还是其他什么,函数名称是全局符号吗。
Shine:
1. 请问用的是哪款器件?2. 用汇编写。
3. 您指的全局符号是用.global定义吗? 在汇编手册第104页上有说明。http://www.ti.com/lit/ug/spru186w/spru186w.pdf
dawei wang1:
回复 Shine:
1、我用的6747。
2、具体如何编写啊,有没有什么规范,感觉无从下手啊。
3、函数名是(global)symbol吗
4、在map文件中global symbol是什么啊。
5、在汇编编写的中断向量表中用global定义的符号和map文件中的global symbol是一回事吗。
6、中断服务函数的名称是不是必须在中断向量表中用global定义才能将中断服务程序的地址赋给中断向量表中。
7、同一个工程中是不是只能同时又12个中断服务程序,如果中断超过12个还可以实现吗。
8、同一个工程是不是可以编写多个中断向量表,并且把他们置于不同位置,通过修改ISTP中ISTB的值就可以实现超过12个中断服务层序的实现。
Shine:
回复 dawei wang1:
2. 见附件中断向量表的写法。3. 函数名可以用global定义。
4. 全局符号,你可以对应程序看。
5. 一样的。 6. 中断向量表中用global定义,是为了其他代码文件里调用它。7. c6747有interrupt controller,可以把不同的事件映射到这12个中断。可以看一下下面的文档第7章节。http://www.ti.com/lit/ug/sprufk5a/sprufk5a.pdf8. 一个工程一个中断向量表。
dawei wang1:
回复 Shine:
1、中断向量表中定义的global symbol 为什么前面都加下划线。这样和中断服务程序名称不就对应不上了吗。
2、有没有关于c674x的中断例程啊,最好有关于关于中断数超过12个的处理例程。
Shine:
回复 dawei wang1:
1. 这个是compiler编译器规定的。如果从c语言里调用汇编函数的话,汇编函数前需要加下划线,看一下编译器文档第201页上的例程。http://www.ti.com/lit/ug/spru187u/spru187u.pdf
2. 超过12个的处理例程没有。我们只有简单的一个中断的例程。可以看一下cslr中的例程。 http://processors.wiki.ti.com/index.php/QuickStartOMAPL1x_rCSL
dawei wang1:
回复 Shine:
1、我怎么感觉像是汇编在调用C语言函数啊,不像是C调用汇编啊,因为中断服务程序是在C文件中定义的。
2、例程中好多子函数定义找不到啊,比如_enable_interrupts(),CSL_FINST(),这些都在哪。
3、还有6748starterware中也有好多子函数找不到,比如ASSERT();HWREG()。
Shine:
回复 dawei wang1:
1. 不管是C调用汇编还是汇编调用c, 汇编文件里的函数名或变量需要在前面加下划线。2. _enable_interrupts是rts库里的内嵌函数。看编译器手册7.5.6 Using Intrinsics for Interrupt Control and Atomic Sections。http://www.ti.com/lit/ug/spru187q/spru187q.pdf CSL_FINST这个在quickStartOMAPL1x_rCSL\OMAPL1x\support\includes\ti\pspiom\cslr\cslr.h头文件里有定义。
dawei wang1:
回复 Shine:
1、内嵌函数应该要声明吧。可是没看见啊。
2、另外_enable_interrupts()是对什么进行操作呢。rts库在什么地方。可以看到_enable_interrupts()的源代码吗。
canlin tu:
回复 Shine:
问下,中断向量表怎么刚好是对应的中断处理函数例如:
_intcVectorTable:_vector0: VEC_ENTRY _c_int00 ;RESET_vector1: VEC_ENTRY _vec_dummy ;NMI_vector2: VEC_ENTRY _vec_dummy ;RSVD_vector3: VEC_ENTRY _vec_dummy ;RSVD_vector4: VEC_ENTRY _EDMA3CC_INT1_isr ;DSP Maskable INT4 : Mapped to func 'EDMA3CC_INT1_isr'_vector5: VEC_ENTRY _Timer0_12_isr ;DSP Maskable INT5 : Mapped to func 'Timer0_12_isr'_vector6: VEC_ENTRY _vec_dummy ;DSP Maskable INT6 : Empty_vector7: VEC_ENTRY _vec_dummy ;DSP Maskable INT7 : Empty_vector8: VEC_ENTRY _vec_dummy ;DSP Maskable INT8 : Empty_vector9: VEC_ENTRY _vec_dummy ;DSP Maskable INT9 : Empty_vector10: VEC_ENTRY _vec_dummy ;DSP Maskable INT10: Empty_vector11: VEC_ENTRY _vec_dummy ;DSP Maskable INT11: Empty_vector12: VEC_ENTRY _vec_dummy ;DSP Maskable INT12: Empty_vector13: VEC_ENTRY _vec_dummy ;DSP Maskable INT13: Empty_vector14: VEC_ENTRY _vec_dummy ;DSP Maskable INT14: Empty_vector15: VEC_ENTRY _vec_dummy ;DSP Maskable INT15: Empty
为什么 _EDMA3CC_INT1_isr和_Timer0_12_isr 刚好放在_vector4和_vector5那一行呢,这个从那里得处理的?
Tony Tang:
回复 canlin tu:
初始化里将这两个中断事件映射到了4和5号中断了,所以就要将对应的ISR地址放在这个表里。