28027上电进入非法中断(ADC+SPI+TIMER)

2019-03-24 11:08发布

不知道为什么,每次每一次上电的时候,会进入非法中断,在ADC的打开的时候(其实和SPI和定时器没什么关系)
第一次开机(上电或调试)---->进入非法中断--->把ADC模块屏蔽或下载一个其他正常的工程到FLASH--->正常--->重新下载这个“有错的”工程或调试到FLASH--->正常

MAIN函数
  1. void main(void)
  2. {

  3.   InitSysCtrl();
  4.   InitGpio();
  5.   InitSciaGpio();

  6.   DINT;
  7.   InitPieCtrl();
  8.   PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
  9.   InitPieVectTable();
  10.   EALLOW;
  11.   PieVectTable.TINT0 = &cpu_timer0_isr;
  12.   EDIS;
  13.   IER |= M_INT1;
  14.   InitSpiGpio();
  15.   InitSpi();
  16.   SpiaRegs.SPITXBUF=0x00;
  17.   //spi_fifo_init();
  18.   
复制代码
  1. void ConfigAdc(void)
  2. {
  3.   EALLOW;
  4.   //通道0
  5.   AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
  6.   AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 1;
  7.   AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;

  8.   EDIS;
  9. }
复制代码

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
dontium
2019-03-25 02:01
本帖最后由 dontium 于 2014-7-31 11:24 编辑

最烦的是看代码了。今天才有时间看了楼主的代码,请楼主谅解。

一般地,C2000进入非法中断的原因多半是因为寄存器写入不正确引起的。例如,写了个不该写的寄存器。

1、楼主的代码中,对FLASH初始化,是放在后面的,而FLASH的初始化一般与Ramfuncs的定义有关。一般要把它放在使用Ramfuncs之前。而楼主把它放到了程序的偏后位置,不知道有没有影响。

2、CMD文件的安排也会影响程序的正确执行。


楼主可以这样实验一下,屏蔽一部分代码,看看未屏蔽部分会不会进入非法中断。如果代码太大,可以使用华罗庚的优选法。

一周热门 更多>

相关问题

    相关文章