TriCore使用问题笔记

更新时间:2024-04-09 20:44:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

TriCore使用问题笔记

1.1 调试错误:No source available for “0xa00f0184()”

原因:应该是中断的问题,删除几个为空的中断之后就没有这个问题了,可以单步调试。总的来说是miniwigger的问题。

后来还是有相应的问题,直接运行程序应该没有问题,可以得到正确的输入输出。

问题由来:CAN驱动接收消息之后,单步调试,出现这个问题。 解决方案:

1.2 对SCU_SWRSTCON寄存器的修改,以促进软件置位操作

1. 软件置位的配置由SCU_RSTCON.SW[9:8]来确定,10表示应用置位,01表示系统置位。

2. Tricore中对所有的置位相关的处理器都加锁处理的,需要解锁才能设置,SCU_SWRSTCON.SWRSTREQ可以请求软件置位。

3. 解锁的过程有WDT_CON0和WDT_CON1完成.WDT_CON0.ENDINIT位为0的时候表示已经解锁,同时标志位WDT_CON0.LCK=0;

4. 为了修改WDT_CON0,必须将正确的密码写入WDT_CON0,密码由CON0与CON1的一些警戒位组合而成。要求如下:

5. 如果密码与要求匹配,WDT_CON0在密码访问结束时将统一解锁,解锁条件将由WDT_CON0.LCK = 0 指示。

6. PW的默认值为0,CON0REL的默认值为0xFFFC,或者读去CON0值之后取得。

7. 修改CON0,满足一下条件的写入是合理的,可以修改SW与REL的密码值。

8. 在解锁,ENDINIT被清零之后,对受初始化结束保护的寄存器的访问被再次开放。当WDT_CON0被解锁时,WDT被自动切换到超时模式,因此,访问窗口是有时间限制的。

9. 如果密码与要求匹配,WDT_CON0 在密码访问一结束将被解锁。解锁条

件将由 WDT_CON0.LCK=0 指示。

10. 如果在密码访问的过程中不正确的密码值被写入 WDT_CON0.PW,则会出现看门狗访问错误。位 WDT_SR.AE 置位并且进入预警模式。 11. 对WDT_CON0的修改必须满足一定的格式,如果访问不遵循这些条件,看门狗错误被检测,WDT_SR.AE 置位,并且进入预警模式。

12. 在修改访问结束之后,WDT_CON0.LCK 再次置位,自动重新锁住 WDT_CON0。在寄存器可再次被修改之前,必须重新执行有效的密码访问。 13. 超时模式由位WDT_SR.TO=1 指示。定时器被设置为 FFFCH 并开始向上计数。超时模式只可由置位 ENDINIT=1 且通过正确的访问序列正确退出。如果执行对 WDT 的不正确访问,或者如果定时器在 ENDINIT 置位之前溢出,则产生一个不可屏蔽中断请求(WDT_NMI),并且进入预警模式。 14. 在正常模式(DR=0)下,WDT 工作在标准的看门狗方式中。

15. 当检测到看门狗错误时,总是进入预警模式。正常模式、超时模式下的定时器溢出,或者对寄存器 WDT_CON0 的无效访问都可能导致 WDT 进入预警模式。发生上述情况时,WDT 使能系统在复位发生前由预警进入一个安全状态,而不是立即请求设备复位。

1.3 往DFLASH中写入关键数据

注意:

1. 用普华提供的FLASH驱动,只能写DFLASH0中的数据。 2. 一次只能写一个块,一个DFLASH的一个块是128 BYTE。 3. 调用Fls_Write,MainFunction。

1.4 PCP调试

首先说明PCP是一个独立的核,跟TriCore主核相比,有其独立的指令,所以需要独立编程并编译生成PCP的代码。TriCore的第三方集成开发工具(Tasking, HighTec)都可以对PCP进行编程编译。Tasking集成开发环境下带的Debugger是不支持PCP调试的。所以选择专业的调试工具,像第三方Lauterbach Trace32,PLS UAD2+,iSystem IC5000,都是支持多核调试的。

1.5 软件复位

配置SCU驱动,通过Scu_SoftReset

1.6 PCP文件编译

Pcp.c文件的编译错误,在TASKING中试试加上以下代码:

#ifdef__CPU__

#include __SFRFILE__(__CPU__)

#endif

PCP中用printf函数不能输出。

1.7 CIC61508中的DEMO移植后不能进入GPTA0中断

修改GPTA0.c中的源代码:

GPTA0_LTCCTR00.U = 0x00000112; // load LTC0 control register GPTA0_LTCCTR01.U = 0x00000039; // load LTC1 control register GPTA0_LTCCTR04.U = 0x00000039; // load LTC4 control register

可能的原因是DAVE中的配置不正确

1.8 Safety Path Control的控制问题

根据61508的用户手册,按照规定配置相应的NVM不能得到正确的结果(经过测试,根据SYSTEMINTEGRITY的状态、SYSDISA/B/C的LED灯来判定结果。

下面的测试结果以供参考:

测试结果: READY:A + B ACTIVE:B + C OTHER: NONE

SYSDISA SYSDISB SYSDISC NOT-READY READY L L ACTIVE L L DISABLE L L L TRIPPING L L 1.9 与61508通信的时候不能产生定时器中断

可能存在的问题是中断嵌套, 在中断处理程序中添加__enable使能全局中断的产生.

本文来源:https://www.bwwdw.com/article/ch6r.html

Top