【瑞萨RA4E1评估板】EXIT中断测试及抗干扰测试
[复制链接]
瑞萨在NEC时代芯片的抗干扰方面性能就出众,本次对RA4E1抗干扰进行测试,干扰通常在输入较多时更容易发生。所以本次同时测试的还有GPIO的中断输入测试。板子上的按钮SW1是连接到P205引脚上的,但是这个引脚没有直接的IRQ通道,但是连接了到了IRQ1-DS上面。
使用FSP工具生成项目IRQ_FSP_Project,
首先:
修改系统的调试接口为SWD
需要指定SWD的引脚,
增加驱动:
加入r_sci_uart和r_icu两个驱动。uart用来显示,icu用来设置IRQ1-DS中断。
需要设置sci为通道9,用来连接接口的uart引脚。指定sci_uart的回调函数user_uart_callback()
设置irq中断,这里使用了IRQ1-DS中断,选择好之后pin 205的设置就完成了。
pin 205自动完成
接下来设置IRQ中断驱动,
因为pin 205的引脚使用了IRQ1-DS所以这里使用channel为1,指定回调函数irq_ep_callback(),设备中断名称:g_external_irq后面程序要引用。
设置完成之后,生成项目驱动。使用keil打开项目,主要的程序都在hal_entry.c文件中。加入两个设备的驱动回调函数。user_uart_callback()和irq_ep_callback()
#define USER_SW_IRQ_NUMBER (0x01)
volatile bool uart_send_complete_flag = false;
volatile bool g_sw_press = false;
/*******************************************/
/* Callback function */
void user_uart_callback(uart_callback_args_t *p_args)
{
/* TODO: add your own code here */
switch(p_args->event)
{
case UART_EVENT_TX_COMPLETE:
uart_send_complete_flag =true;
break;
default:
break;
}
}
/* Callback function */
void irq_ep_callback(external_irq_callback_args_t *p_args)
{
/* TODO: add your own code here */
/* Make sure it's the right interrupt*/
if(USER_SW_IRQ_NUMBER == p_args->channel)
{
g_sw_press = true;
}
}
在hal_entry()函数中加入中断初始化代码。
/*******************************************************************************************************************//**
* main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function
* is called by main() when no RTOS is used.
**********************************************************************************************************************/
void hal_entry(void)
{
/* TODO: add your own code here */
fsp_err_t err = FSP_SUCCESS;
//icu_init();
//icu_enable();
err = R_ICU_ExternalIrqOpen(&g_external_irq_ctrl, &g_external_irq_cfg);
err = R_ICU_ExternalIrqEnable(&g_external_irq_ctrl);
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
for(;;){
if(g_sw_press)
{
unsigned char buff[]="RA4E1 IRQ\n\r";
size_t buff_len = strlen(buff);
err = R_SCI_UART_Write(&g_uart9_ctrl, buff, buff_len);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
g_sw_press = false;
}
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07, BSP_IO_LEVEL_HIGH);
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07, BSP_IO_LEVEL_LOW);
err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
完成后,运行调试。
每按一次按键打印“RA4E1 IRQ”
干扰进行测试
因手头没有什么好的,干扰发生源,所以就使用了一个用废了的电子打火机作为干扰源。我把铁皮的部分去掉,测试的时候不停的在芯片上打火,看看芯片的反应。
经过多次打火,板子没有受到干扰。
本次测试主要参考了icu_fpb_ra4e1_ep测试程序。干扰测试比较简易,但是这种方法我测试或其它的芯片,多次测试后还是偶尔会受到干扰地,所以这种方法还是有一定的测试效果地。当然干扰测试不一定是芯片单一的要素,很可能会受到板子整体的影响。但是出现问题还是需要注意地。
|