Cypress单片机 CY8C4147AZI-S475的外部中断EXTI

该实现详细介绍了如何通过CypressPsoc4100plus系列单片机,利用外部中断EXTI控制LED灯。首先新建工程并参考例程,然后添加输出和输入IO组件,将它们绑定到芯片引脚。在主函数中,根据中断处理函数翻转的标志位控制LED状态。中断处理函数包括标志位翻转和中断清除。文章强调了中断清除语句的重要性。
摘要由CSDN通过智能技术生成

本实现通过按键触发外部中断EXTI,单片机检测到中断来点亮LED。开发板Cypress Psoc 4100 plus 系列MCU型号:CY8C4147AZI-S475;

1.新建一个工程

参考之前的例程;

2.添加组件

双击IDE右边TopDesign.cysch在左侧的Cypress Component中添加原理图组件;本实验中添加了两个IO,一个配置成输出,驱动LED灯;一个配置成输入,用于EXTI外部中断检测;
添加组件
EXTI输入引脚配置
LED输出引脚配置

3.将添加的组件绑定到芯片引脚

点击IDE右侧xxxx.cydwr,根据实际的硬件电路,在右侧选择需要绑定的引脚;本实验中需要绑定IO口一个作为输出,控制LED,一个作为输入用于KEY检测;
绑定芯片引脚

4.Build工程生成代码 并实现

extern volatile uint8_t exit_flag;
int main(void)
{
    //static uint8_t led_toggle=0;
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g.    MyInst_Start()) */
    Exit_isr_1_Start();
    for(;;)
    {
        /* Place your application code here. */
        {
            LED_Pin_Write(exit_flag); 
        }
    }
}

中断处理函数1

CY_ISR(Exit_isr_1_Interrupt)
{
    #ifdef Exit_isr_1_INTERRUPT_INTERRUPT_CALLBACK
        Exit_isr_1_Interrupt_InterruptCallback();
    #endif /* Exit_isr_1_INTERRUPT_INTERRUPT_CALLBACK */ 

    /*  Place your Interrupt code here. */
    /* `#START Exit_isr_1_Interrupt` */
     exit_flag^=1;
    Exit_isr_1_ClearPending();
    Exit_Pin_ClearInterrupt();
   
    /* `#END` */
}

按键按下第一次LED灯点亮,按下第二次LED灯熄灭;

5.总结

由于开发板上的按键没有上拉,故此IO输入配置成上拉输入,下降沿触发中断;中断清除语句Exit_isr_1_ClearPending();与Exit_Pin_ClearInterrupt();不可缺少,缺少任何一句,功能都无法实现。有帖子说两者保留一句就可以,但实验结果并不行,原因未知;


  1. 中断中给标志位exit_flag做翻转,主函数中根据exit_flag的值来判断灯是否应该点亮;Exit_isr_1_ClearPending();与Exit_Pin_ClearInterrupt(); 为中断标志位清楚语句; ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值