DSP2812程序单步运行没问题可是开始时一RUN程序直接跑到ILLEGAL_ISR函数中,不过要是在程序中加个断点没事
DSP2812程序单步运行没问题可是开始时一RUN程序直接跑到ILLEGAL_ISR函数中,不过要是在程序中加个断点没事不解啊。。。。求解释下面是我的程序voidmain...
DSP2812程序单步运行没问题可是开始时一RUN程序直接跑到ILLEGAL_ISR函数中,不过要是在程序中加个断点没事 不解啊。。。。求解释 下面是我的程序
void main(void)
{
P_Uart1_Data_S = Uart1_Data;
P_Uart1_Data_E = P_Uart1_Data_S;
P_Uart2_Data_S = Uart2_Data;
P_Uart2_Data_E = P_Uart2_Data_S;
P_Uart1_TX_S = Uart1_TX_Data;
P_Uart1_TX_E = P_Uart1_TX_S;
P_Uart2_TX_S = Uart2_TX_Data;
P_Uart2_TX_E = P_Uart2_TX_S;
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE中断*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
/*初始化SCIA,B寄存器*/
InitSci();
InitEv();
/*设置中断服务程序入口地址*/
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.RXAINT = &SCIRXINTA_ISR;
PieVectTable.TXAINT = &SCITXINTA_ISR;
PieVectTable.RXBINT = &SCIRXINTB_ISR;
PieVectTable.T3PINT = &T3PINT_ISR;
EDIS; // This is needed to disable write to EALLOW protected registers
PieCtrl.PIEIER4.bit.INTx4 = 1; // 启动PIE周期比较
PieCtrl.PIEIER9.bit.INTx1=1; // PIE Group 9, INT1
/*开中断*/
IER |= M_INT4 | M_INT9;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
while(1)
{
Uart1_Fun();
Uart2_Fun();
}
}
断点在EINT处!!! 展开
void main(void)
{
P_Uart1_Data_S = Uart1_Data;
P_Uart1_Data_E = P_Uart1_Data_S;
P_Uart2_Data_S = Uart2_Data;
P_Uart2_Data_E = P_Uart2_Data_S;
P_Uart1_TX_S = Uart1_TX_Data;
P_Uart1_TX_E = P_Uart1_TX_S;
P_Uart2_TX_S = Uart2_TX_Data;
P_Uart2_TX_E = P_Uart2_TX_S;
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE中断*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
/*初始化SCIA,B寄存器*/
InitSci();
InitEv();
/*设置中断服务程序入口地址*/
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.RXAINT = &SCIRXINTA_ISR;
PieVectTable.TXAINT = &SCITXINTA_ISR;
PieVectTable.RXBINT = &SCIRXINTB_ISR;
PieVectTable.T3PINT = &T3PINT_ISR;
EDIS; // This is needed to disable write to EALLOW protected registers
PieCtrl.PIEIER4.bit.INTx4 = 1; // 启动PIE周期比较
PieCtrl.PIEIER9.bit.INTx1=1; // PIE Group 9, INT1
/*开中断*/
IER |= M_INT4 | M_INT9;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
while(1)
{
Uart1_Fun();
Uart2_Fun();
}
}
断点在EINT处!!! 展开
展开全部
类似的问题我也遇到过,总是进入非法中断。反复查也查不到问题,关键无从下手,
没办法,只能屏蔽掉绝大部分中断,发现CPU_Timer0中断进不去,再后来就查出是
cmd文件配置的问题。
嵌入式程序的调试比PC程序麻烦,根据你说的也很难判断是什么问题,只能告诉你一个思路:
把能屏蔽掉的代码都注释掉,直到不再出问题。然后一点一点再往上加,
看加到哪一部开始出问题。如果全屏蔽了还有问题,那么最可疑的就是cmd了。
没办法,只能屏蔽掉绝大部分中断,发现CPU_Timer0中断进不去,再后来就查出是
cmd文件配置的问题。
嵌入式程序的调试比PC程序麻烦,根据你说的也很难判断是什么问题,只能告诉你一个思路:
把能屏蔽掉的代码都注释掉,直到不再出问题。然后一点一点再往上加,
看加到哪一部开始出问题。如果全屏蔽了还有问题,那么最可疑的就是cmd了。
参考资料: http://hi.baidu.com/%E5%B7%A5%E7%A8%8B%E5%B8%88%E7%AC%94%E8%AE%B0/home
展开全部
可能是时序上的问题,有些指令需要一定的时间,单步时正常,运行时有时就会出问题
追问
这个我想到了 所以在开中断之前加了一个较长得延时也是一样~!我试过.map.cmd文件我都反复推敲了N遍没发现内存重叠的现象 可就是一RUN就跑飞。。。我还把断点分别设定在while(1)之前的各个语句上过 一次一条逐条往上 没变化
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询