不知道为什么,每次每一次上电的时候,会进入非法中断,在ADC的打开的时候(其实和SPI和定时器没什么关系)
第一次开机(上电或调试)---->进入非法中断--->把ADC模块屏蔽或下载一个其他正常的工程到FLASH--->正常--->重新下载这个“有错的”工程或调试到FLASH--->正常
MAIN函数
- void main(void)
- {
- InitSysCtrl();
- InitGpio();
- InitSciaGpio();
- DINT;
- InitPieCtrl();
- PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
- InitPieVectTable();
- EALLOW;
- PieVectTable.TINT0 = &cpu_timer0_isr;
- EDIS;
- IER |= M_INT1;
- InitSpiGpio();
- InitSpi();
- SpiaRegs.SPITXBUF=0x00;
- //spi_fifo_init();
-
复制代码- void ConfigAdc(void)
- {
- EALLOW;
- //通道0
- AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
- AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 1;
- AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;
- EDIS;
- }
复制代码
此帖出自
小平头技术问答
嗯,谢谢指导。我之所以在定时器里刷屏,就是觉得刷屏的时候应该小于100ms,而在While里一直刷屏的话,频率会更高。(硬件SPI的频率设置到了15MHz)
我按照您说的改了下程序,把刷屏程序写到while里,然后加了个50ms的DELAY_US(50000)(不加的话显示频率太高,屏幕已经花了),显示还算正常,但上述问题仍然存在,我把仿真器拨下来再插上去,屏幕已经不显示了(flash启动后进入了非法中断),debug后看到果然一启动就进非法中断。
最烦的是看代码了。今天才有时间看了楼主的代码,请楼主谅解。
一般地,C2000进入非法中断的原因多半是因为寄存器写入不正确引起的。例如,写了个不该写的寄存器。
1、楼主的代码中,对FLASH初始化,是放在后面的,而FLASH的初始化一般与Ramfuncs的定义有关。一般要把它放在使用Ramfuncs之前。而楼主把它放到了程序的偏后位置,不知道有没有影响。
2、CMD文件的安排也会影响程序的正确执行。
楼主可以这样实验一下,屏蔽一部分代码,看看未屏蔽部分会不会进入非法中断。如果代码太大,可以使用华罗庚的优选法。
一周热门 更多>