S32K3系列MCAL配置详解之ICU 基于EB tresos

ICU

模块依赖:ICU port

ICU:Input Capture Unit,输入捕获单元。主要有以下功能:

边缘计数

边缘检测和通知

时间戳

信号测量

作为唤醒源使用

我们配置一个边沿检测和通知功能的ICU通道,下降沿检测,可以作为元器件的电压检测,即供电由高电平跳转为低电平时,触发我们的ICU通道的中断,可以在中断通知函数里去做响应的处理(关断部分功能做保护),当然如果只是做高低电平的检测,完全可以通过Dio channel1去读取,但是DIO channel读取后再做响应,对于一些实时性要求很高的元器件,很可能是无效的,即在响应之前,元器件已损坏,而ICU通道进行检测和通知,能满足较高的实时性要求

在ICU下新建一个channel,双击进入配置项

IcuDefaultStartEdge配置为falling edge,其余先不管

接下来我们在PORT下配置一个SIUL_EIRQ类型的通道,如下

返回ICU,在该选项卡下新增一个配置项

双击进入,在IcuSiul2Channels下新增一个通道,双击进入,配置如下

然后在这里去使能我们的通道的中断

然后回到ICU channel的配置界面做如下配置

Channel ref选择我们各个配置的siul通道即可;

Icu messurement mode设置为SIGNAL_EDGE_DETECT;

Icusignal Edge detection功能打开;

配置中断通知函数为current_falling_detect  (该函数名自拟即可)

 

回到general界面,IcuMAXchannel填入1,配了几个通道就填几

剩余API勾选如下

ICU函数调用

打开Suil2_Icu_Ip_Irq.c,查看SIUL2_ICU_IRQ_CH_3_ISR_USED定义在哪一个中断下,查找到其定义在SIUL2_EXT_IRQ_0_7_ISR,在platform初始化完成后,安装中断如下

Platform_InstallIrqHandler(SIUL_0_IRQn,&SIUL2_EXT_IRQ_24_31_ISR, NULL_PTR);

在主函数中,此ICU相关的函数或指令调用如下:

extern ISR(SIUL2_EXT_IRQ_0_7_ISR);  

void current_falling_detect(void);

void current_falling_detect(void)

{

    //function_forbiden;

}

int main()

{

    //init

    //....

     Platform_Init(NULL_PTR);

     Platform_InstallIrqHandler(SIUL_0_IRQn,&SIUL2_EXT_IRQ_24_31_ISR, NULL_PTR);

     //.....

     //....

}

我们可以在current_falling_detect中做相关的功能禁止,保护元器件

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值