TI论坛
直播中

张秀兰

8年用户 1341经验值
私信 关注

请问为什么AM1808裸机跑StarterWare例程,不发生中断?

本帖最后由 一只耳朵怪 于 2018-6-21 15:24 编辑

大家好
        我们的一个项目使用AM1808,不带OS跑裸机。我最近正在做相关的学习。

使用的是hawkboard板子 + CCS4.1.2 + 合众达的SEED-XDS510PLUS仿真器。
        
        使用StarterWare中的timer示例快速组起了一个测试定时器的工程,编译通过。其中.cmd选用了bootloader用的.cmd文件,将其中的.init段注释掉。程序完全跑在片内ram中。
        添加近工程的源文件有:
        /drivers/psc.c
        /drivers/uart.c
        /examples/evmAM1808/timer/timerCounter.c        main在此
        /platform/evmAM1808/uart.c
        /system_config/ARMv5/am1808/interrupt.c
        /system_config/armv5/cgt/cpu.c
        /utils/uartStdio.c
成功连接target并下载后,能看到PC指针停在main函数开始处,但是Disassembly窗口各个地址的内容都显示问号(这是不是仿真器的问题?)。
        尝试了各种运行方式,都正常,只是启动和暂停的速度有点慢。计算机通过串口也能收到数据,但是发现一个问题,就是不发生中断,程序就等死在一个while语句上了。
我还尝试过组建其他例程,发现程序都是能跑起来,但就是没有中断。
我感觉会不会中断使能没有做好,比如cpu.c中的函数有问题?我之前想先用StarterWare把板子跑起来,所以还没有认真地阅读AM1808的有关资料,打算接下来好好看一下中断这一部分。同时也把问题写到这里,希望各位工程师给出宝贵的指导。另外我是个新手,如果描述有哪里不清楚也请各位提出,我会做补充。
        

谢谢!

回帖(5)

张秀兰

2018-6-21 06:51:21
仔细看了程序后,发现我根本没有把启动时用的源程序加进来,.cmd文件中的Entry也被我注释掉了。估计是这样导致我不能进入中断吧?我将system_config下的文件都加进来后,程序跑起来再挂起,好像是跑飞了,我想可能是中断时程序跳飞了。我现在其他事比较忙所以不能花太多时间调这些,所以求教各位。
请问TI的工程师们,用StarterWare建立CCS例程进行调试究竟是怎样的流程?有哪些需要注意,代码又有哪些需要添加和改动呢?我只是在必要的头文件中添加了am1808宏,cmd文件做了如上文所述的改动,这样是不是还不够?还是说我这样改不对?
谢谢!
举报

张秀兰

2018-6-21 07:01:38
引用: jhdfvs 发表于 2018-6-21 06:51
仔细看了程序后,发现我根本没有把启动时用的源程序加进来,.cmd文件中的Entry也被我注释掉了。估计是这样导致我不能进入中断吧?我将system_config下的文件都加进来后,程序跑起来再挂起,好像是跑飞了,我想可能是中断时程序跳飞了。我现在其他事比较忙所以不能花太多时间调这些,所以求教各位。
请问TI的工程师们,用Sta ...

还是没人回复呀,各位工程师都没遇到过类似问题么,还是说我描述得太模糊了?
请用过的人指导一下怎样用StarterWare的例程呀,应该很容易的不是吗?
另外hawkboard的板子有系统固化在里面,这会导致我现在遇到的问题么?
如果一直没人回答,我就只好过几天有空了仔细研究,再来自问自答了……
期待各位帮助,谢谢!
举报

张秀兰

2018-6-21 07:19:32
问题解决了。
估计是烧在板子上的U-boot在上电时把CP15的Register 1中的某一位设置了,导致ARM在中断时跳到0x00000018,而不是0xFFFF0018,从而导致程序在中断时跑飞。
在开头加上这些代码,重新设置寄存器,问题解决:
   MRC        p15, #0, R0, c1, c0, #0        ; read CP15 register1
   ORR        R0, R0, #0x2000                  ; turn on the Vbit (VINITHIGH)
   MCR        p15, #0, R0, c1, c0, #0        ; write back the CP15 register1
怪我之前Reference Manual没认真看,这些内容在2.4里讲得清清楚楚。
问题提出快有10天了吧,完全被无视了。哎……还是祝这个社区尽快发展吧。顺便希望这个帖子对其他遇到同样问题的人有所帮助。
举报

曹丽娜

2018-6-21 07:36:36
引用: jhdfvs 发表于 2018-6-21 07:19
问题解决了。
估计是烧在板子上的U-boot在上电时把CP15的Register 1中的某一位设置了,导致ARM在中断时跳到0x00000018,而不是0xFFFF0018,从而导致程序在中断时跑飞。
在开头加上这些代码,重新设置寄存器,问题解决:

一般调试starterware或者CCS的时候,都不会起uboot的 :)
                                                                         如果我的回答解决了您的问题,请确认答案,谢谢!:)
举报

更多回帖

发帖
×
20
完善资料,
赚取积分