仿照\quickStartOMAPL1x_rCSL\里的TIMER_interrupt_dspL138例程写了一个简单的定时器闪烁灯程序,
除了在中断处理里做的事情不一样,其他配置几乎一样,
但仿真来看,跳转不到中断程序里,可以确定定时器已经跑起来了,定时器的中断标志也有pending,CPU的4号中断线标志位也pending了,
不知道是不是中断向量表有问题,但我已经尽量仿照例程来了,
请帮忙解答一下,
这是我的asm文件,
.global intcVectorTable
.global _c_int00
.global timer_isr
;******************************************************************************
;* VEC_ENTRY: Macro that instantiates one entry in the interrupt service table.
;******************************************************************************
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: Dummy interrupt service routine used to initialize the IST.
;******************************************************************************
_vec_dummy:
B B3
NOP 5
;***************************************************************************************
;* Map interrupt service table (IST) to corresponding interrupt service routines (ISR)
;***************************************************************************************
.sect ".vecs"
.align 1024
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 timer_isr ;DSP Maskable INT4 :
_vector5: VEC_ENTRY _vec_dummy ;DSP Maskable INT5 : Empty
_vector6: VEC_ENTRY _vec_dummy ;DSP Maskable INT6 :
_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
这是我的main文件,
extern void intcVectorTable(void);
int main(void)
{
// Map timer system interrupts to DSP INT4
(*((volatile unsigned int*)0x01800104)) &= ~0x7F;
(*((volatile unsigned int*)0x01800104)) |= (25 << 0); //TIM2的中断号是25,挂载到4号中断线上
// Assign the address of the IST to the IST pointer
ISTP = (unsigned int)intcVectorTable;
// Clear all CPU maskable interrupts
ICR = 0xFFF0;
IER |= (1 << 1) // Enable NMI interrupts
|(1 << 4) // Enable INT4 interrupts
;
gpio_init(); //配置管脚,GP6P12
c67x_timer_init(2,200); //配置并启动定时器TIM2,定时时长200ms
while(1);
return 0;
}
interrupt void timer_isr(void)
{
DSP_GPIO_OUT_TOGGLE(GP6,GP6P12); // 在中断函数中反转管脚电平
}
Shine:
TIMER_interrupt_dspL138例程能跑吗?如果只修改该了timer_isr里的代码,至少不会影响进入中断子程序。
user4878210:
回复 Shine:
TIMER_interrupt_dspL138例程可以跑,但是编译工具链版本必须降到7.4那个版本,如果用8.2.2来编译就会编译出错,我自己这个写的例程也是一样,工具链版本是7.4就可以跑了,但是我一定得要用8.2.2来编译怎么办,就是跑不起来
Shine:
回复 user4878210:
编译报什么错?自己的例程也是基于7.4那个版本的TIMER_interrupt_dspL138基础上改的?