在芯驰释放的 MCAL 功能安全认证版本 MCAL3.1,和 MCAL3.0 对比 GPIO 的中断代码发生了改变。为了更符合 Autosar 的代码规范,中断回调函数放在 EB 的 DIO 模块中去定义函数名。具体的实现放在测试代码中,而不是和 MCAL3.0 版本一样放在静态代码中。
图(1)
二、 代码分析
1.中断号的使用
如图(2)所示 MCAL3.1 的 GPIO 中断目前只使用了 4 和 11,分别对应与 SF Domain 和 AP Domain。旧版的以 port group 为一组的中断号使用方法在后面的补丁中可能也会加入。
图(2)
2.中断处理函数
针对两个中断号,在 Dio.c 中实现了 DIO_SFIrqHandler()和 DIO_APIrqHandler()两个函数。如图(3)所示,这两个函数用来判断中断源来自 Safety domain 还是 AP domain,然后给 Dio_Ip_IrqHandler()传入不同的参数。
图(3)
- Dio_Ip_IrqHandler( ) 函数
Dio_Ip_IrqHandler() 用于实际处理中断信号,包括读取相关寄存器判断中断具体来自哪一个 GPIO,然后将该 GPIO 的 ID 传给中断回调函数,在中断回调函数中做用户自定义的操作,回调关系参考图(4),最后清理中断。
图(4)
三、 测试
- 配置
本次测试中,选取 GPIO_H4 作为测试 GPIO,在 EB 的 Port 模块中,配置为 GPIO 模式,下降沿触发。详细如图(5)所示。
图(5)
图(6)为在 DIO 模块中配置中断回调函数。
图(6)
- 测试程序
测试程序的编写见图(7),需要在 dio_example.c 中加上对应的头文件,实现中断回调函数,注册中断。
图(7)
- 测试
重新生成镜像,并烧写到开发板中,执行 dio test,然后给 GPIO_H4 一个下降沿信号,观察打印信息可以确认中断回调函数的正确执行。图(8)为打印信息。
图(8)
四、 参考文献:
- E3400_E3600_MCU_Technical_Reference_Manual_Rev00.12.pdf
- SemiDrive_E3_MCAL User Guide.pdf
如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com
作者:Sim Guo / 郭夕峰
评论