TI工程师,你好。
我在调试OMAPL137的定时器时遇到如下问题:
连接仿真器的情况下定时器可以正常运行,但是从FLASH加载后定时器无法正常工作(确定FLASH烧写和加载均正常)
定时器使用的是TIMER0的TIM34,双32位,unchained模式,工作方式为连续。
代码如下:
*TIMER0_TGCR = 0x0104;//0x04;
OMAPL137_UART_putChar(uart1,0x1); // 从串口输出
_wait(15000);
*TIMER0_TGCR = *TIMER0_TGCR | 0x3; // remove from reset
OMAPL137_UART_putChar(uart1,0x2);
_wait(15000);
*TIMER0_PRD34 = 0x47ff;
OMAPL137_UART_putChar(uart1,0x3);
_wait(15000);
*TIMER0_INTCTLSTAT = 0x00020000;//0x00010000; //关闭timer int
OMAPL137_UART_putChar(uart1,0x4);
_wait(15000);
*TIMER0_TCR = 0x00800000; // mode1 enable
OMAPL137_UART_putChar(uart1,0x5);
_wait(15000);
IER = 0xFFFF; // 使能中断INT8
OMAPL137_UART_putChar(uart1,0x6);
_wait(15000);
*((unsigned int *)0x01800108) = 0x00000040; // 中断挂接 evt40 -> INT8
OMAPL137_UART_putChar(uart1,0x7);
_wait(15000);
*TIMER0_INTCTLSTAT = 0x00010000; //0x00020000; //使能timer int
OMAPL137_UART_putChar(uart1,0x8);
_wait(15000);
脱机运行发现每次串口输出完0x1后就再无输出,故推断是执行*TIMER0_TGCR = *TIMER0_TGCR | 0x3语句,打开定时器造成死机。
该问题已经困扰了好几天,项目进度比较急,工程师大大拜托啦!!
Shine:
用仿真器跟一下boot后的程序,看是运行到哪里出错了?GEL文件里的初始化代码有没有在aisgen里配置?http://processors.wiki.ti.com/index.php/Debugging_Boot_Issues
jianbo liu1:
回复 Shine:
谢谢回复。
我用的是和c6713类似的nor flash启动的方式,代码是自己写的,没有用GEL文件啊。
现在又发现,除定时器外,在写I2C相关的寄存器时也会死机,感觉像是boot后不能读写某段内存空间。
使用仿真器时一些正常。
Shine:
回复 jianbo liu1:
请问具体用的是nor flash boot里的哪种? Legacy? Direct? AIS?
le chang:
回复 Shine:
谢谢您的回复,我是楼主的同事。
nor flash boot使用的Legacy的方式。
从目前现象来看,我觉得也不像是因为写入某段内存空间就会出问题,因为
*TIMER0_TGCR = 0x0104;//0x04;
OMAPL137_UART_putChar(uart1,0x1); // 从串口输出
这一句是可以正常执行的,接下来
*TIMER0_TGCR = *TIMER0_TGCR | 0x3; // remove from reset
OMAPL137_UART_putChar(uart1,0x2);
从串口调试器看不到02的输出,所以估计是*TIMER0_TGCR = *TIMER0_TGCR | 0x3这一步出了问题。
麻烦您帮忙分析下,谢谢啦
Shine:
回复 le chang:
你用仿真器跟过boot后的代码吗,这个比较容易找出问题的所在。
你的代码有没有超过16KB?
le chang:
回复 Shine:
谢谢回复。
nor flash启动的方式也可以用仿真器跟BOOT后的代码吗?我没这么试过,不太会操作,请问有参考文档之类的吗?
再次感谢!
le chang:
回复 Shine:
您说的代码是指二次搬运的代码吗?没有超过16kb,主程序是192kb。
我用仿真器跟了boot后的代码,还是在*TIMER0_TGCR = TIMER0_TGCR | 0x3 这一句一执行就死机。我该怎么办啊,求助,楼主已经被领导撤了,现在我负责这块,我压力好大啊。神啊,救救我吧!
Shine:
回复 le chang:
板子是自己做的吗?量一下clkout有没有稳定的输出?
在仿真器调试阶段,二次bootloader能正确搬运代码并运行吗?
le chang:
回复 Shine:
是自己做的板子,
通过OBSCLK引脚观察,发现flash启动时和通过仿真器运行时的时钟输出不一样,频率呈线性关系,用仿真器时是55mhz,flash启动时是13mhz多,二次搬运代码都正常。
Shine:
回复 le chang:
boot其他简单的程序有问题吗? 还是就这个timer程序不行?如果把TGCR=0x3这句去掉,还能往下执行吗?
TI中文支持网


