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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本实现通过按键触发外部中断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(); 为中断标志位清楚语句; ↩︎

### 解决 Cypress CY8C4148AZI-S455 器件选项不可用的问题 当遇到 Cypress CY8C4148AZI-S455 的器件选项在开发环境中显示为不可用时,可能的原因涉及硬件支持、软件版本兼容性以及项目配置等多个方面。以下是对此问题的详细分析: #### 1. **确认目标设备的支持情况** 确保所使用的 IDE 或工具链(如 PSoC Creator)已更新至最新版本,并验证其是否正式支持 CY8C4148AZI-S455 芯片。如果当前版本未提供对该芯片的支持,则需升级到更高版本[^1]。 #### 2. **检查项目设置中的器件选择** 进入项目的器件管理界面,重新核对器件型号的选择过程是否存在错误。具体操作如下: - 打开项目属性对话框; - 进入“Device Selection”页面; - 输入完整的器件编号 CY8C4148AZI-S455 并尝试匹配可用列表中的条目[^2]。 #### 3. **评估硬件资源初始化逻辑** 对于某些特定功能模块(例如 UART 中断或 GPIO 配置),可能存在依赖于底层驱动程序的情况。若发现相关外设无法正常工作,可能是由于 IO 口初始化代码未能正确执行所致[^3]。此时建议手动调整默认生成的 init 函数参数以适配实际需求。 #### 4. **排查潜在冲突因素** 还需注意以下几点可能导致此现象的因素: - 是否存在多个不同系列的目标板混连在同一套编译环境里? - 当前安装包路径下是否有残留旧版数据干扰新项目加载? 通过上述方法逐一排除可能性后仍无改善的话,可以考虑联系官方技术支持团队获取进一步帮助文档或者补丁文件来解决问题。 ```c // 示例:GPIO 初始化代码片段 void Init_GPIO(void){ /* 设置端口方向 */ Pin_LED_SetDriveMode(Pin_LED_DM_STRONG); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值