Other Parts Discussed in Thread: AM6548
器件型号: AM6548
您好、
我之所以提出这项质询、是因为我无法就原来的质询作出答复。 也许是因为我迟到了我的答复(抱歉)。
我的原始问题是:
我们有一个在 AM6548 R5_0 内核上运行的应用。 出于安全原因、我们执行的任务是检查许多寄存器是否存在意外更改。 有时、当 R5 读取 VIM 中的 VIM_VEC_INT_j 寄存器(0x40F82000 +公式)时、它会陷入某种僵局。 我们已经尝试使用调试器连接到 R5_0 内核、但这无法实现(请参阅随附的图像)。 可以连接到其他内核 (R5_1、A53_x_y)。 当连接到其他内核之一 (R5_1) 时、可以读取 AM6548 SOC 上的存储器和寄存器。 对存储器和寄存器进行一些分析后、在读取 VIM_VEC_INT_j 寄存器时发生中断、似乎会发生死锁。
您能解释为什么会出现这种僵局吗?
我们如何监控 VIM_VEC_INT_j 寄存器?

下面是一些重现问题的代码示例:
#define READ_REGISTER32(address) (*(volatile uint32_t *)((uint32_t)(address)))
int main()
{
uint32_t value = 0;
uint32_t offset = 0x00002000;
uint32_t j = 0;
uint32_t count = 0;
/* Initialize board (pinmux, DMSC, interrupt controller, ... */
while (1)
{
offset = 0x00002000;
for (j = 0; j < 0x00000200; j++)
{
/* Disable interrupt */
setInterruptEnabled(FALSE);
value = READ_REGISTER32(0x40F80000 + offset);
/* Enable interrupt */
setInterruptEnabled(TRUE);
if (count == 1000000)
{
/* Print to see alive */
printf("o 0x%x v 0x%x\n", offset, value);
count = 0;
}
offset += 4;
count++;
}
}
return 0;
}
此致
约翰尼·莫斯特拉姆



