1.Icu模块通常用于捕获PWM波形,得到占空比来计算一些物理量。
2.在EB中创建新工程,添加以下模块
捕获配置只需要以上模块,如果没有PWM输入源,建议配置一路PWM输出来验证Icu捕获的正确性。
3.在Port模块添加需要实现Icu功能的引脚,注意命名和添加UnTouchedPortPin。
4.在中断模块添加选定引脚的中断配置(采用的中断捕获的方式)
Emios的中断对应图如下
5.在Icu模块里具体配置对应引脚及功能
首先在General界面开启SAIC和采集功能,并关闭Wakeup相关的功能(3处)
使能对应Emios通道的中断
在IcueMios界面创建通道 (分频看主时钟频率和采集的PWM的频率来定,由于ICU采集周期默认最大65535,假定需采集的PWM频率为1khz,那么65535*1k=65Mhz,所以ICU的主要频率不能超过这个值,对应这个值去分频就行。选内部Bus,有的通道不支持内部就去MCL里面配置外部Bus)
在IcuChannel界面添加一路采集通道(注意名字的配置,这个名字就是最终代码中用到的)
6.注意全部模块的Pre预编译。
附上部分代码:
Icu_DutyCycleType DutyCycleValues_text; //定义结构体,可存放采集的占空比
Icu_StartSignalMeasurement(IcuChannel_0); //开启读PWM占空比
do {
Icu_GetDutyCycleValues(IcuChannel_0, &DutyCycleValues_text); //先读取占空比
} while(DutyCycleValues_text.PeriodTime == 0);
采集到后就可以在现场表达式中看定义的结构体里面是否有值
计算占空比为 ActiveTime/PeriodTime。