简介
本文将详细介绍如何使用 EB 工具配置 Flagchip FC4150 MCAL 按键(Key1) 中断控制 LED。并重点强调了配置 icu 模块的过程以及对 icu 模块的详细解释。其中所使用到的模块有 mcu、port、dio、icu ,本文是基于“Flagchip FC4150 MCAL-点亮 LED 灯”这篇博文中增加 ICU 的内容, mcu、port、dio 模块可参考上一篇博文。
硬件平台:旗芯微 FC4150 DEMO BOARD V2 开发板
软件平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.04
MCAL: V1.1.0 & V1.1.1
一、MCAL 配置
1.1 配置 MCU 模块
根据 demo board LED原理图所示,我们需要在 MCU 模块-> PCC 下添加 Port B 、C、D 的外设并配置为时钟使能
▲ 图 1.1.1
▲ 图 1.1.2
▲ 图 1.1.3
1.2 配置 PORT 模块
进入 Port C 的 PortPin 界面下,添加 PTC28 引脚并命名为 KEY1,配置 PTC28 为 GPIO 、输入模式,默认电平为高。LED port 配置已在上一篇博文中配置完成。
▲ 图 1.2
1.3 配置 ICU 模块
1.3.1 在 Module Configurations 中添加 ICU 模块,在 ICU 模块中的 IcuPort 下添加 Port_C。
▲ 图 1.3.1
1.3.2 在 ICU 模块中的 IcuChannel 下添加通道。
▲ 图 1.3.2
1.3.3 双击 Index 3 进入 IcuChannel 的配置界面,选择 Icu Hardware Module 为 PORT_C,Channel Of Hardware Module 修改为 28 ,选择边沿检测方式为下降沿,检测方式为信号边沿检测,填入边沿检测名字和回调函数名字
▲ 图 1.3.3
二、示例代码解析
2.1 将 EB 配置好的工程编译并更新代码至 FCIDE 中
2.2 Main 函数
将 Bsp_Icu_Init 函数取消屏蔽
▲ 图 2.2
2.3 Icu_PBcfg.c
我们可以看到 PORTC-28 在 EB 工具配置好的属性与回调函数的声明
▲ 图 2.3
2.4 Bsp_Icu.c
2.4.1 demo 示例中已经提供了 Icu_Key1_Edge_Detect 函数实体,我们需要添加 Dio_FlipChannel 函数使 LED 灯翻转
▲ 图 2.4.1
2.4.2 找到 Bsp_Icu_Init 这是 demo 示例对 MCAL API 的调用
▲ 图 2.4.2
三、烧录 & 调试
3.1 将工程编译并烧录到开发板
观察 3 颗 LED ,初始化时灯为亮,当按键按下时灯熄灭,再次按下灯点亮。
▲ 图 3.1
四、MCAL ICU 模块详解
FC4150 ICU 模块提供边沿计数、信号边沿检测通知、周期性信号时间测量、边沿时间戳捕获、中断唤醒等功能
4.1 General 配置
▲ 图 4.1
① IcuConfigSet
- IcuMaxChannel:在 IcuChannel 内添加通道后需在 IcuMaxChannel 输入通道数量
② IcuGeneral
- IcuDevErrorDetect:Icu 模块开发错误检测使能
- IcuReportWakeupSource:开启唤醒源上报
- IcuOverflowTimeStatistics:用来信号测量,ICU Mode 选择 Icu_mode_signal_Messurement,溢出了后还可以再计数,计数值不会清零,用来延长计时时间
③ IcuNonAUTOSAR
- IcuGetInputLevelApi :启用后,该函数可以返回输入引脚状态
- IcuOverflowNotificationApi:使能溢出后的回调通知函数
④ IcuOptionalApis
根据功能需要,配置某个 API 使能,如 IcuDeInitApi 取消初始化 ICU 模块、Icu(Disable/Enable) WakeupApi 禁用或启用某个 ICU 通道的唤醒源、IcuSetModeApi 设置ICU(正常/睡眠)模式等。
4.2 IcuChannel 配置
添加对应 ICU 的通道来配置测量模式
▲ 图 4.2
- Icu Hardware Module :选择外设模块,选择外设模块前需要在 IcuFtu 或 IcuPort 中先添加
- Channel Of Hardware Module:选择外设通道
- IcuDefaultStartEdge :选择信号触发边沿
- IcuMeasurementMode:选择信号测量方式
- IcuOverflowNotification:填写定时溢出后的回调函数名称,需联合配置 IcuOverflowTimeStatistics, IcuOverflowNotificationApi
- IcuWakeupCapability:启用该通道的唤醒源
① IcuSignalEdgeDetection
当选择信号边沿触发时,需要在 IcuSignalNotification 填入回调函数名称
② IcuSignalMeasurement
当选择信号测量时,需要在 IcuSignalMeasurementProperty 填入测量类型,此类型不能在运行时更改
③IcuTimestampMeasurement
当时间戳测量时,在 IcuTimestampMeasurementProperty 选择环形队列或有限缓冲区,有限缓冲区将只被填充一次。且可以在 IcuTimestampNotification 中填入回调函数名称,当时间戳通知>0 时会进行回调函数的使用
④ IcuWakeup
当 IcuWakeupCapability 启用,且 IcuChannelWakeupInfo 启用后,则会将唤醒源信号传递给 ECU 抽象层
4.3 IcuFtu配置
▲ 图 4.3
- Ftu Hardware Module:选择 Ftux 外设
- Icu FlexTimer clock source:选择 Ftu 模块的时钟源
- Icu FlexTimer Prescale:配置 Ftu 模块的分频系数
- Icu FlexTimer Period Value:设定周期值
- Icu FlexTimer Channel Filter Prescaler:配置 Ftu 通道滤波器的分频系数
- Icu FlexTimer - Channel 0、1、2、3 Input Filter value:Ftu 通道滤波时间,0-15 可选,0 则不滤波
4.4 IcuPort 配置
可以添加 Port A、B、C、D、E 这些端口用于引脚中断。
▲ 图 4.4
4.5 IcuAontmr 配置
做定时唤醒使用
▲ 图 4.5
4.6 PublishedInformation ICU 模块版本信息
4.7 ICU 模块常用接口函数
- Icu_Init: 初始化 ICU 模块
- Icu_DeInit:将 ICU 模块复位至默认状态
- Icu_SetMode: 设置 ICU 工作模式
- Icu_DisableWakeup :失能单个 ICU 通道唤醒功能
- Icu_EnableWakeup: 使能单个 ICU 通道唤醒功能
- Icu_EnableNotification:使能单个 ICU 通道通知功能
- Icu_DisableNotification: 失能单个 ICU 通道通知功能
- Icu_EnableEdgeDetection:使能单个 ICU 通道边沿检测功能
- Icu_DisableEdgeDetection: 失能单个 ICU 通道边沿检测功能
- Icu_GetInputState:返回单个 ICU 通道 输入引脚状态
- Icu_SetActivationCondition:设置单个 ICU 通道 输入引脚边沿检测模式
- Icu_ResetEdgeCount:将单个 ICU 通道的边沿计数设置为 0
- Icu_EnableEdgeCount:使能单个 ICU 通道的边沿计数功能
- Icu_DisableEdgeCount: 失能单个 ICU 通道的边沿计数功能
- Icu_GetEdgeNumbers:读单个 ICU 通道的边沿计数值
- Icu_StartTimestamp:开启单个 ICU 通道边沿捕获时间计数
- Icu_StopTimestamp:停止单个 ICU 通道边沿捕获时间计数
- Icu_GetTimestampIndex: 读单个 ICU 通道的时间戳
- Icu_StartSignalMeasurement:开始对单个 ICU 通道信号进行测量
- Icu_StopSignalMeasurement: 停止对单个 ICU 通道信号进行测量
- Icu_GetTimeElapsed:读取单个 ICU 通道的信号周期时间
- Icu_GetDutyCycleValues:读取单个 ICU 通道的 PWM 周期与占空比
- Icu_GetInputLevel:读取单个 ICU 通道的当前输入电平
- Icu_GetVersionInfo: 获取 ICU 模块版本信息
五、总结
本文以按键中断控制 LED 为示例,详细介绍了如何配置和使用 ICU(Interrupt Control Unit)模块,通过本文的讲解,读者可以了解到如何正确配置 ICU 模块,以实现 Port 中断的功能。
六、参考文献
(1) AUTOSAR_SWS_IcuDriver.pdf
(2) FC4150 Reference Manual V3.0.pdf
如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com 作者:Memory
更多资讯,请扫码关注我们!