主题中讨论的其他器件:TMDSRM48HDK
您好!
我们偶尔会遇到一些问题、现在我们通过使用 CCS IDE 和 RM48开发板(Hercules 安全 MCU 开发套件 RM4 MCU)设法随附项目一起重现这些问题。
我们在现实生活中所要做的事情
HET 运行并计算毫秒时间
2.应用程序每秒读取一次 HET 时间,并将时间经过与等效的 RTI 时间经过进行比较
就像在一个月中发生一次一样、我们收到了一个错误、其中1个故障收到了以下日志:(1000 = RTI_DIFF、2842175 = n2het_diff、d:='DIFF'、t;=允许的容差、 f:=顺序故障、T1:= RTI 'new'-prev'、T2:= N2HET 'new'-'prev'
Drif_ERR:Elaps:1000 vs 2842175、d:2841175、t:3、f:1
时间:T1:2843242-2842242、T2:5682352-2840177
Drif_ERR:Elaps:1000 vs 4292127120、d:4292126120、t:3、f:2
时间:T1:2844242-2843242、T2:2842176-5682352
从 N2HET 接收到5682352的时间就可以看出、这是错误的、因为之前的时间是2840177、而下一个时间是2842176 (1999年介于两者之间)、因此应该已经从 N2HET 接收到2841177或2841176。 由于之前和之前一样收到过完全的考考考考考、因此第二次的课程比较失败(第二次"新"时间正确)。
我们在实际应用中将 EXT_CLK 作为 RTI clk-source、并且我们还通过 DCC 监视 OSCIN&EXT_CLK 是否有效、DCC 满足所有条件。 我们还需要监控时间戳、因为时钟源不会生成有助于"生成"时间戳的时间戳、因此基于此监控、我们发现基于 n2het 的时间戳存在实际问题。
现在、随附的简化项目会发生完全相同的行为、它基本上可以像我们的实际应用中那样执行某些操作、但"快得多"、只需运行它、您就会看到"u32ReadSuccess"与"u32Fails "匹配。 我们已经使用2个不同的 RM48开发板和2台不同的计算机对其进行了测试、这两台计算机位于不同的 IT 组织和不同的地理位置。 请注意、添加了重新读取以说明第一次访问可能失败(预期结果大约为~2倍)和第二次访问提供预期时间的问题。
重现步骤:
1.使用附加的项目并将其下载到 RM48板
2.将 CPU 设置为"run"、等待5秒、然后停止
3.检查'u32ReadSuccess'和'u32Fails '变量
您还可以在 u32ReReadSuccess++行中设置断点、并看到"u32Time"大约是"u32Read "时间的2倍。
注1:您可以将 dma.c 中的代码剪切并粘贴到 sys_main.c 和行为更改
注2:如果注释掉_enable_interrupt_();则不会检测到故障
注3:如果您修改_enable_interrupt_()函数,以便仅启用 FIQ 或 IRQ (但不启用两者),则错误仍然存在
Note4:如果您在2个 HET_TimeGet ()函数之间放置__nop(),则错误看起来会消失。
我看到2种可能性
a) N2HET 代码有错误、但我们只是找不到它-仍然无法理解 n2HET 代码中的错误如何会导致 RAM 内容"本身"乘以2、然后恢复...
b)某种程度的 N2HET RAM 访问问题-我从 TRM 中了解到、访问是原子的、并且允许从 CPU 进行访问、并且 ADD 指令是原子的 ("case 110:immediate Data Field[31:0]= IR2")、因此默认情况下、我们正在执行的操作应该是正常的
TRM 20.2.2.1:"N2HET 对其自身内部 RAM 的存取优先于来自外部主机(CPU 或 DMA)的存取、"
请指出问题、因为使用该重新读取的实数代码将是"修复症状"而非根本原因、同样基于"去二极管"的实验表明、在进行一些修改后、还会遇到"u32ReadFails (u32ReadFails)"- -另外、我不理解 FIQ&IRQ 使能如何影响这一点、也不理解为什么当您将代码从文件剪切粘贴到另一个文件或添加"nop"... 这是某种管道问题、以便应该给出"MB""DSB"的结构、还是某种问题?
这是用于 RM48开发板的项目
e2e.ti.com/.../5444.N2HET_5F00_read_5F00_problem.zip