TI中文支持网
TI专业的中文技术问题搜集分享网站

指令总线错误,IBUS被置位

程序从复位执行若干时间后(5分钟以上),会进入FaultISR(),进入的时间不定。而在使用调试器运行时则不会出现这种情况。因此我修改FaultISR(),追踪状况。

static void
FaultISR(void)
{
char string[64]; uint32_t HFaultStat = HWREG(NVIC_HFAULT_STAT);
uint32_t FaultStat = HWREG(NVIC_FAULT_STAT);
uint32_t MmAddr = HWREG(NVIC_MM_ADDR);
SystemDelay(0.01);   //串口的波特率为115200,故延时0.01秒,以留够足够时间发完上次数据。
sprintf(string,"%x,%x,%x\n", HFaultStat,FaultStat,MmAddr); int length = strlen(string);
for(int i=0;i<length;i++)
ROM_UARTCharPutNonBlocking(UART_COMPUTER_BASE, (uint8_t)string[i]);
}

重复接收到的数据:40000000,100,e000

也就是寄存器HFAULTSTAT = 0x40000000,FAULTSTAT = 0x100,MMADDR = 0xE000.

查数据 手册得知是出现了指令总线错误,IBUS被置位

datasheet里关于这个错误的信息太少,请帮忙分析可能原因,另外,这种错误是否可以被清除?该采用什么顺序清除?

xyz549040622:

我在M3上出现过这种错误,用调试器没问题,实际运行出错,是由于printf函数引起的,你可以去掉串口,屏蔽掉sprintf函数看看

xyz549040622:

HFAULTSTAT = 0x40000000,FAULTSTAT = 0x100,MMADDR = 0xE000.你查查M4的指令手册,看看这个错误具体属于哪个外设

Michael Sun:

这种一般是硬件上的操作不当导致,建议定位并修改源码。

赞(0)
未经允许不得转载:TI中文支持网 » 指令总线错误,IBUS被置位
分享到: 更多 (0)