8015|26

33

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

28027上电进入非法中断(ADC+SPI+TIMER) [复制链接]

不知道为什么,每次每一次上电的时候,会进入非法中断,在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. }
复制代码


main和spi文件.rar

2.29 KB, 下载次数: 19

main.c和spi.c

最新回复

这个工程我都不能在我安装的CCS打开为什么,说是工程不能解释,刚接触CCS,不知道的太多了,求指教  详情 回复 发表于 2014-8-4 16:51
 
点赞 关注

回复
举报

2856

帖子

260

TA的资源

五彩晶圆(高级)

沙发
 
先不说你问题,你的程序结构有问题。在定时器里面刷屏,主程序不停的读AD采样值。正常结构定时器启动AD,在主程序里面刷屏。中断程序要尽可能短,当你在写一个复杂一些应用时就会感受到结构带来的“恶果”

点评

嗯,谢谢指导。我之所以在定时器里刷屏,就是觉得刷屏的时候应该小于100ms,而在While里一直刷屏的话,频率会更高。(硬件SPI的频率设置到了15MHz) 我按照您说的改了下程序,把刷屏程序写到while里,然后加了个50m  详情 回复 发表于 2014-7-30 14:08
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
ltbytyn 发表于 2014-7-30 12:39
先不说你问题,你的程序结构有问题。在定时器里面刷屏,主程序不停的读AD采样值。正常结构定时器启动AD,在 ...

嗯,谢谢指导。我之所以在定时器里刷屏,就是觉得刷屏的时候应该小于100ms,而在While里一直刷屏的话,频率会更高。(硬件SPI的频率设置到了15MHz)
我按照您说的改了下程序,把刷屏程序写到while里,然后加了个50ms的DELAY_US(50000)(不加的话显示频率太高,屏幕已经花了),显示还算正常,但上述问题仍然存在,我把仿真器拨下来再插上去,屏幕已经不显示了(flash启动后进入了非法中断),debug后看到果然一启动就进非法中断。
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

4
 
@dontium 有爱的斑竹求助
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

5
 
本帖最后由 dontium 于 2014-7-31 11:24 编辑

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

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

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

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


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

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

6
 
或者,把你完整的工程传来帮你找原因
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

7
 
本帖最后由 liangzr 于 2014-7-31 11:49 编辑

[删不掉此楼了。。在楼下,一样的内容]嗯嗯,多谢回复,其实经过多次测试我发现就是只要有这个InitAdc()就会在第一次上电时出问题。
这是整个工程

F28027_ADC_Display.rar

356.92 KB, 下载次数: 10

 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

8
 
dontium 发表于 2014-7-31 11:26
或者,把你完整的工程传来帮你找原因

嗯嗯,多谢回复,其实经过多次测试我发现就是只要有这个InitAdc()就会在第一次上电时出问题。
这是整个工程



F28027_ADC_Display.rar

356.92 KB, 下载次数: 8

 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

9
 
这个工程编译就没通过



是少了文件还是怎么回事?



"../28027_RAM_lnk.cmd", line 114: error #10099-D: program will not fit into available memory.  placement with alignment/blocking fails for section ".text" size 0x17ef page 0.  Available memory ranges:
   PRAML0       size: 0x900        unused: 0x900        max hole: 0x900     

>> Compilation failure
"../28027_RAM_lnk.cmd", line 122: error #10099-D: program will not fit into available memory.  placement with alignment/blocking fails for section ".econst" size 0xa6e page 1.  Available memory ranges:
   DRAML0       size: 0x700        unused: 0x620        max hole: 0x620     

undefined  first referenced
  symbol        in file     
---------  ----------------
_ConfigAdc ./main.obj      


点评

中间两个错误应该是你用RAM调试,好像放不下吧?最后一个,我在给你打包程序前,把我注释掉以及改的乱七八糟的东西改回去了,可能有的没有保存,就是void ConfigAdc(volatile union ADCSOCxCTL_REG *adcsoc, char ch  详情 回复 发表于 2014-7-31 14:19
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

10
 
dontium 发表于 2014-7-31 13:52
这个工程编译就没通过



中间两个错误应该是你用RAM调试,好像放不下吧?最后一个,我在给你打包程序前,把我注释掉以及改的乱七八糟的东西改回去了,可能有的没有保存,就是void ConfigAdc(volatile union ADCSOCxCTL_REG *adcsoc, char chsel, char trigsel, char acqps)这个函数没有在F2802x_GlobalPrototypes.h里面声明吧。你可以按我上面说的改一下试试,或者再下载我新上传了,抱歉我上传前改了东西却没Build,下面这个 是我编译通过的,CCSv6,TI6.2.7,这个可能需要改。或者有时间的话加我QQ:liangzr@outlook.com



F28027_ADC_Display.rar

418.53 KB, 下载次数: 11

 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

11
 
这个是没问题的:
F28027_ADC_Display.rar (356.04 KB, 下载次数: 30)


好好看看吧,原因我已经说了。

或者由此你会改变不认真看别人回帖的习惯吧

点评

为什么您发的那个好的工程我的CCS5.5打不开  详情 回复 发表于 2014-8-3 10:14
嗯,问题现在算基本解决了,还是和ADC有关,把flash那些放到最上面,我的spi什么的都不工作了,后来我慢慢的把一些东西移上去发现没问题,我把spi和初始化和lcd的初始化放到initflash上面,屏幕就有显示了,只要Init  详情 回复 发表于 2014-7-31 17:40
多谢斑竹,我看到差别了,把那个ifdef放到了前面,我已经调了快两天这个了,找到每一个可能解决的方案我都会认真去试了,但是我去汇编不大懂,没有理解您前面说的意思,我还以为是初始化flash——InitFlash()这个函  详情 回复 发表于 2014-7-31 17:32
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

12
 
dontium 发表于 2014-7-31 17:03
这个是没问题的:



多谢斑竹,我看到差别了,把那个ifdef放到了前面,我已经调了快两天这个了,找到每一个可能解决的方案我都会认真去试了,但是我去汇编不大懂,没有理解您前面说的意思,我还以为是初始化flash——InitFlash()这个函数要放到那个MemCopy()的前面,所以我只把这个改了,没看到效果,现在测试AD应该是没问题了——下载程序——断电——调试程序——正常(没有像以前进入非法中断),但是我的屏幕不亮了,还要再调调看。
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

13
 
dontium 发表于 2014-7-31 17:03
这个是没问题的:



嗯,问题现在算基本解决了,还是和ADC有关,把flash那些放到最上面,我的spi什么的都不工作了,后来我慢慢的把一些东西移上去发现没问题,我把spi和初始化和lcd的初始化放到initflash上面,屏幕就有显示了,只要InitAdc()在下面,应该都没问题


点评

哈哈,你为一个问题搞了两天,不多不多。我刚开始搞C2000,为一个问题让我四处求教,有的可能需要摸索一周。  详情 回复 发表于 2014-7-31 17:51
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

14
 
liangzr 发表于 2014-7-31 17:40
嗯,问题现在算基本解决了,还是和ADC有关,把flash那些放到最上面,我的spi什么的都不工作了,后来我慢 ...

哈哈,你为一个问题搞了两天,不多不多。我刚开始搞C2000,为一个问题让我四处求教,有的可能需要摸索一周。



 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

15
 
 
 
 

回复

172

帖子

0

TA的资源

一粒金砂(中级)

16
 
同样的问题求助啊,我单步调试,发现进入adc_init程序以后在最后一步的延时程序的时候会进入非法中断,我的程序比较简单,麻烦帮我看看可以吗


mb2.rar (452.43 KB, 下载次数: 10)
@dontium
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

17
 
不用看你现在给的项目文件,首先,把你项目的几个警告处理了再说。

因为原来看你的项目时,有几个警告我就觉得有些不对。

点评

版主也帮我看看吧。。。类似的问题,在adcinit的里的延时程序导致错误了  详情 回复 发表于 2014-8-1 21:39
 
 
 

回复

172

帖子

0

TA的资源

一粒金砂(中级)

18
 
dontium 发表于 2014-8-1 14:28
不用看你现在给的项目文件,首先,把你项目的几个警告处理了再说。

因为原来看你的项目时,有几个警告我 ...

版主也帮我看看吧。。。类似的问题,在adcinit的里的延时程序导致错误了

点评

你的程序是没有初始化FLASH,与楼主的问题差不多,楼主是因为放的位置不对,而你的是根本没有  详情 回复 发表于 2014-8-1 22:24
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

19
 
jetlin1992 发表于 2014-8-1 21:39
版主也帮我看看吧。。。类似的问题,在adcinit的里的延时程序导致错误了

你的程序是没有初始化FLASH,与楼主的问题差不多,楼主是因为放的位置不对,而你的是根本没有

点评

一般哪些程序是必须放在RAM运行的  详情 回复 发表于 2014-8-2 06:47
 
 
 

回复

172

帖子

0

TA的资源

一粒金砂(中级)

20
 
dontium 发表于 2014-8-1 22:24
你的程序是没有初始化FLASH,与楼主的问题差不多,楼主是因为放的位置不对,而你的是根本没有

一般哪些程序是必须放在RAM运行的

点评

没有 “ 必须 ” 放在RAM中运行的程序。因为在RAM中运行的速度快,所以对时间有要求的程序可以放在RAM中  详情 回复 发表于 2014-8-2 09:32
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表