侧边栏壁纸
博主头像
Qokorii Note 博主等级

道阻且长,行则将至

  • 累计撰写 51 篇文章
  • 累计创建 22 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Cypress MCAL ICU 模块实现外部中断(边沿捕获)

Talon
2024-11-04 / 0 评论 / 0 点赞 / 173 阅读 / 0 字

外部中断使用ICU的边沿检测(ICU_MODE_SIGNAL_EDGE_DETECT)模式实现,可使用GPIOTCPWM作为外部资源。

MCAL 配置

使用GPIO实现

port配置:配置为GPIO数字输入模式即可。

Icu配置:

使用TCPWM实现

port配置:

Icu配置:

配置中断

对于有Os的系统是在Os中配置,本篇不介绍。

对于没有Os的系统,可使用Cypress官方提供的SDL库实现,以下是实现代码:

#define MCAL_PROJECT_CB_BUTTON_ICU_IRQ_NUMBER           277
#define MCAL_PROJECT_CB_BUTTON_ICU_IRQ_HANDLER          Icu_Isr_Vector_277_Cat2
//开中断
Cy_SysInt_SetSystemIrqVector((cy_en_intr_t)MCAL_PROJECT_CB_BUTTON_ICU_IRQ_NUMBER,        MCAL_PROJECT_CB_BUTTON_ICU_IRQ_HANDLER);
Cy_SysInt_InitIRQ( &(cy_stc_sysint_irq_t) { .sysIntSrc = (cy_en_intr_t)MCAL_PROJECT_CB_BUTTON_ICU_IRQ_NUMBER, .intIdx = CPUIntIdx3_IRQ

代码

初始化:

//边沿检测模式
Icu_EnableEdgeDetection(IcuConf_IcuChannel_IcuChannel_0);
Icu_EnableNotification(IcuConf_IcuChannel_IcuChannel_0);//必须使能才能触发边沿检测回调IcuSignalNotification

定义边沿检测回调通知:

void IcuSignalNotification_0()
{
    // 中断处理
}

如此,每检测到一个边沿都将触发一次中断。

0

评论区