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条回答
ltbytyn
1楼-- · 2019-03-24 16:58
< 先不说你问题,你的程序结构有问题。在定时器里面刷屏,主程序不停的读AD采样值。正常结构定时器启动AD,在主程序里面刷屏。中断程序要尽可能短,当你在写一个复杂一些应用时就会感受到结构带来的“恶果”
liangzr
2楼-- · 2019-03-24 19:57
< :TI_MSP430_内容页_SA7 -->
ltbytyn 发表于 2014-7-30 12:39
先不说你问题,你的程序结构有问题。在定时器里面刷屏,主程序不停的读AD采样值。正常结构定时器启动AD,在 ...

嗯,谢谢指导。我之所以在定时器里刷屏,就是觉得刷屏的时候应该小于100ms,而在While里一直刷屏的话,频率会更高。(硬件SPI的频率设置到了15MHz)
我按照您说的改了下程序,把刷屏程序写到while里,然后加了个50ms的DELAY_US(50000)(不加的话显示频率太高,屏幕已经花了),显示还算正常,但上述问题仍然存在,我把仿真器拨下来再插上去,屏幕已经不显示了(flash启动后进入了非法中断),debug后看到果然一启动就进非法中断。
liangzr
3楼-- · 2019-03-24 22:08
 精彩回答 2  元偷偷看……
dontium
4楼-- · 2019-03-25 02:01
本帖最后由 dontium 于 2014-7-31 11:24 编辑

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

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

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

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


楼主可以这样实验一下,屏蔽一部分代码,看看未屏蔽部分会不会进入非法中断。如果代码太大,可以使用华罗庚的优选法。
dontium
5楼-- · 2019-03-25 03:00
或者,把你完整的工程传来帮你找原因
liangzr
6楼-- · 2019-03-25 03:34
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章