DSP定时器0问题
中断程序是这样写的:interruptvoidcpu_timer0_isr(void){CpuTimer0.InterruptCount++;//LED1反转GpioDa...
中断程序是这样写的:
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++; //LED1反转
GpioDataRegs.GPATOGGLE.bit.GPIO1 = 1;
}
其他相关的初始化代码:
void timer_select(void)
{
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
PieVectTable.TINT1 = &cpu_timer1_isr;
PieVectTable.TINT2 = &cpu_timer2_isr;
EDIS;
}
void main(void)
{
InitSysCtrl(); //初始化系统
gpio_select(); //初始化GPIO
InitPieCtrl(); //初始化PIE控制寄存器
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable(); //初始化中断向量
timer_select(); //设置定时器中断向量
InitCpuTimers(); //初始化定时器
//配置定时器
ConfigCpuTimer(&CpuTimer0, 30, 1000000);
CpuTimer0Regs.TCR.bit.TSS = 0;
IER |= M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
//开总中断
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
for(;;)
{
}
}
但是只会中断一次,之后就不中断了,请问是什么原因,是不是设置不对,或者是在中断里面需要再其他代码呢。。。
只是定时器0有问题,其他两个没问题。
开发板是EasyDSP28022
谢谢!!! 展开
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++; //LED1反转
GpioDataRegs.GPATOGGLE.bit.GPIO1 = 1;
}
其他相关的初始化代码:
void timer_select(void)
{
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
PieVectTable.TINT1 = &cpu_timer1_isr;
PieVectTable.TINT2 = &cpu_timer2_isr;
EDIS;
}
void main(void)
{
InitSysCtrl(); //初始化系统
gpio_select(); //初始化GPIO
InitPieCtrl(); //初始化PIE控制寄存器
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable(); //初始化中断向量
timer_select(); //设置定时器中断向量
InitCpuTimers(); //初始化定时器
//配置定时器
ConfigCpuTimer(&CpuTimer0, 30, 1000000);
CpuTimer0Regs.TCR.bit.TSS = 0;
IER |= M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
//开总中断
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
for(;;)
{
}
}
但是只会中断一次,之后就不中断了,请问是什么原因,是不是设置不对,或者是在中断里面需要再其他代码呢。。。
只是定时器0有问题,其他两个没问题。
开发板是EasyDSP28022
谢谢!!! 展开
展开全部
添加对PIE相关寄存器的清零
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
全测科技
2024-12-19 广告
2024-12-19 广告
SMBV100B信号发生器是罗德与施瓦茨公司的一款矢量信号发生器,兼具卓越的性能特性。其频率范围介于8kHz至6GHz,覆盖数字无线通信的所有重要射频频段,调制带宽高达500MHz,满足四代和五代通信标准的严苛要求。同时,它可在极高功率电平...
点击进入详情页
本回答由全测科技提供
展开全部
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++; //LED1反转
GpioDataRegs.GPATOGGLE.bit.GPIO1 = 1;
PieCtrl.PIEACK.bit.ACK7=1;
试试看看
{
CpuTimer0.InterruptCount++; //LED1反转
GpioDataRegs.GPATOGGLE.bit.GPIO1 = 1;
PieCtrl.PIEACK.bit.ACK7=1;
试试看看
追问
果然是高手。我刚学DSP,很多都不清楚。为什么Timer1和Timer2不需要ACK7=1; 呢,能解释一下么。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询