【简介】
查看S32K3 的芯片手册时发现C40IP(FLASH)是有中断信号输出到MCU的,对应的寄存器信号描述如下:

我们开启此信号触发中断来验证 Flash 的中断功能,S32DS 中断配置中开启FLASH1 的中断配置。

本地在之前擦除 flash 功能验证(【S32K3XX】Flash驱动使用)的测试代码基础上使能 flash 中断。
#if (1 == CFG_C40_IRQ_ENABLE)
void Flash0_IRQHandler(void)
{
IP_FLASH->MCR &= ~FLASH_MCR_PECIE_MASK;
PRINTF("Flash0_IRQHandler MCR %lx MCRS %lx \r\n", IP_FLASH->MCR, IP_FLASH->MCRS);
/* clear flag */
IP_FLASH->MCR &= ~FLASH_MCR_EHV_MASK;
IP_FLASH->MCR &= ~FLASH_MCR_ERS_MASK;
IP_FLASH->MCR &= ~FLASH_MCR_PGM_MASK;
PRINTF("Flash0_IRQHandler MCR %lx MCRS %lx \r\n", IP_FLASH->MCR, IP_FLASH->MCRS);
}
void Flash1_IRQHandler(void)
{
PRINTF("Flash1_IRQHandler %lx \r\n", IP_FLASH->MCRS);
}
void Flash2_IRQHandler(void)
{
PRINTF("Flash2_IRQHandler %lx \r\n", IP_FLASH->MCRS);
}
#endif
void flash_erase_test(void)
{
C40_Ip_StatusType t_ReturnValue = C40_IP_STATUS_ERROR;
t_ReturnValue = C40_Ip_ClearLock(FLS_SECTOR_TEST, FLS_MASTER_ID);
if(C40_IP_STATUS_SUCCESS != t_ReturnValue)
{
/* erase failed */
PRINTF("Flash clear lock failed %x \r\n", t_ReturnValue);
}
else
{
PRINTF("Flash clear lock success \r\n");
}
#if (1 == CFG_C40_IRQ_ENABLE)
/* Enable flash interrupts */
IP_FLASH->MCR |= FLASH_MCR_PECIE_MASK;
#endif
/* erase 0x50_0000 */
t_ReturnValue = C40_Ip_MainInterfaceSectorErase(FLS_SECTOR_TEST, FLS_MASTER_ID);
if(C40_IP_STATUS_SUCCESS != t_ReturnValue)
{
/* erase failed */
PRINTF("Flash erase failed %x \r\n", t_ReturnValue);
}
else
{
PRINTF("Flash erase success \r\n");
}
#if (1 != CFG_C40_IRQ_ENABLE)
t_ReturnValue = WaitForFlag(FLASH_MCR_ERS_MASK);
if(C40_IP_STATUS_SUCCESS != t_ReturnValue)
{
/* erase failed */
PRINTF("Flash waite erase failed %x \r\n", t_ReturnValue);
}
else
{
PRINTF("Flash wait erase success \r\n");
}
#endif
}上述测试代码运行后 中断测试代码已经按照预期的进入。

我要赚赏金
