При работе над внедрением системных сбоев для системы с микропроцессором ARM cortex-m4. Я включил сбои использования с помощью управления системным обработчиком и регистра состояния,
SCB->SHCSR |= SCB_SHCSR_USGFAULTENA_Msk;
и включил деление на ноль сбоев с помощью настраиваемого регистра управления.
SCB->CCR |= SCB_CCR_DIV_0_TRP_Msk;
Я также пытаюсь избегать многократного ввода ошибки использования , я хочу, чтобы программа вызывала ошибку ISR ошибки использования только один раз при возникновении ошибки, но вместо этого программа повторяет ошибку использования несколько раз . Я пытался использовать NVIC_ClearPendingIRQ(IRQnum)
, но не решил проблему.
Может ли кто-нибудь мне помочь, если мне не хватает установить регистр или что-то еще?
Код для ISR:
void UsageFault_Handler(void)
{
// CFSR (Configurable Fault status register)
// |--------------------|----------|---------| UFSR - usage fault status register.
// | UFSR | BFSR | MFSR | BFSR - bus fault status register.
// |--------------------|----------|---------| MFSR - MemManage Fault status register.
// 31 16 15 8 7 0
// ensure the USFR register is not empty before checking for particular usage faults.
if ((SCB->CFSR & 0xFFFF0000) != 0)
{
uint32_t CFSRValue = SCB->CFSR;// get the CFSR register and shift the register to extract the UFSR bits.
CFSRValue >>= 16; // right shift to lsb
if ((CFSRValue & (1 << 9)) != 0) // ensure the 25th bit (DIVBYZERO) of CFSR is not set.
{
LOG the fault
}
}
}
Я использую IAR с ucos-III для ARM cortex-m4.