ModusToolbox 实战入门 - PSOC C3 GPIO应用篇

摘要

新一代HVAC与热泵系统需要同时满足高性能、强安全性与快速上市的挑战。Infineon推出的PSOC Control C3 MCU微控制器整合了180MHz Arm® Cortex®-M33核心、CORDIC加速器、高速12Msps ADC、多通道比较器与高精度TCPWM模块,专为双电机与功率控制应用优化。内置平台级安全功能(包括TrustZone®与硬件加密单元),并支持OTA固件更新,满足现代设备的安全防护需求。结合ModusToolbox™与HVAC专用参考设计,PSOC Control C3加速设计流程,为OEM提供灵活、可靠且高性能的控制解决方案。

本文将帮助您探索 PSOC™ Control C3 MCU 的架构和开发工具,并向您展示如何使用 Eclipse IDE for ModusToolbox™ 创建您的第一个项目软件,同时展示一个GPIO的示例。通过操作GPIO,您将了解如何使用 ModusToolbox™ 控制 PSOC™ Control 3 MCU。

软件下载与安装

软件版本
ModusToolbox™ 软件3.4或以上。

要使用 ModusToolbox™ 访问不断增加的 PSOC™ Control C3 代码示例,请访问GitHub网站。

本文所使用的EVK为KIT_PSC3M5_EVK,详细可参考KIT_PSC3M5_EVK 。

本文开始

1. 点击File→New→ModusToolBox™ Application

2. 选择KIT_PSC3M5_EVK

3. 其中有许多的示例,以下创建一个 Empty App 作为示例

4. 新增完成后,可以在项目资源管理器中看到创建的Empty_App项目。同时,右侧窗口会展示Readme.md文件,介绍该示例的使用方法。

5. 点击Empty_App

6. 在下面的快速面板上会看到许多选项,点击最下面的Device Configurator 5.30。

7. 进入到PSOC™ Control C3的外设设置页面,如下,选择勾选 Port2→P2[0]。在右侧的参数栏中,可以配置此GPIO的许多选项,详细信息可点击 Configuration Help 的 Open GPIO Documentation 查看。

8. 就GPIO的驱动模式而言,PSOC™ Control C3有非常多的设置。

这里有八种主要的驱动模式。下面的图示是针对 CPU 寄存器、UDB/DSI 数字外设以及固定功能外设。

gpio_cpu_dm_block_diagram

在每一种模式下从引脚 (Pin) 视角看出去的简化版输出驱动器结构图。

gpio_periio_dm_block_diagram

高阻抗 (High-Impedance):这是标准的高阻抗(HI-Z)状态,建议用于模拟和数字输入。对于数字信号来说,输入缓冲器是开启的;对于模拟信号来说,输入缓冲器通常会关闭,以便在低功耗设计中减少栓流(crowbar current)和漏电流(leakage)。为了达到最低的芯片电流,未使用的 GPIO 必须设置为高阻抗模式且输入缓冲器关闭。输入缓冲器关闭的高阻抗模式也是引脚默认的复位状态。

电阻式上拉(Resistive Pull-Up)或电阻式下拉(Resistive Pull-Down):电阻模式会在其中一种数据状态时提供串联电阻,在另一种状态时提供强驱动。这些模式下的引脚可以用来作为数字输入或数字输出。如果需要电阻式上拉,就需要将该引脚的数据寄存器 (Data Register) 位写入 '1'。如果需要电阻式下拉,就需要将该引脚的数据寄存器写入 '0'。连接机械开关是这些驱动模式常见的应用。电阻模式也用于连接 PSoC 和开漏 (open drain) 的驱动线路。当输入是开漏低电平时会用到电阻式上拉,而当输入是开漏高电平时会用到电阻式下拉。

开汲极驱动 High(Open Drain Drives High)和开汲极驱动 Low(Open Drain Drives Low):开漏极模式会在其中一种数据状态时提供高阻抗,在另一种状态时提供强驱动。这些模式下的引脚可以作为数字输入或输出,非常实用。因此,这些模式被广泛应用于双向数字通信。当信号被外部下拉时,会使用开漏极驱动 high 模式;当信号被外部上拉时,会使用开漏极驱动 low 模式。开漏极驱动 low 模式常见的应用是驱动 I2C 总线的信号线。

强驱动 (Strong Drive):强驱动模式是引脚标准的数字输出模式;它能够在高电平和低电平两种状态下都提供强大的CMOS输出驱动力。正常情况下,强驱动模式的引脚不应该用作输入。这种模式通常用于输出数字信号或驱动外部设备。

电阻式上拉和电阻式下拉(Resistive Pull-Up and Resistive Pull-Down):在电阻式上拉和下拉模式下,GPIO 在逻辑 1 和逻辑 0 的输出状态都会有串联电阻。高数据状态会被上拉,而低数据状态会被下拉。当引脚被其他可能导致短路的信号驱动时,这种模式就非常有用。

9. 因为KIT_PSC3M5_EVK的SW4开关连接到P5.0,且LED Blue连接到P8.5。

所以在设备配置器的参数配置如下,

10. 配置完成后,ModusToolbox™尚未生成代码,需要在Launches下点击“Generate Launches for Empty_App”。完成后可以通过bsps→config→GeneratedSource查看。

12. 接下来主程序的部分可以按照以下顺序进行设置

#define GPIO_INTERRUPT_PRIORITY 7
#define DELAY_SHORT_MS          (250)   /* 毫秒 */
#define DELAY_LONG_MS           (500)   /* 毫秒 */
#define LED_BLINK_COUNT         (4)


    /* 初始化用户按钮 */
    Cy_GPIO_Pin_SecFastInit(CYBSP_USER_BTN_PORT, CYBSP_USER_BTN_PIN, CY_GPIO_DM_PULLUP, 1UL, HSIOM_SEL_GPIO);

    /* 配置GPIO5.0中断向量 */
    Cy_SysInt_Init(&intrCfgBTN, BTN_interrupt_handler_PDL);
    NVIC_EnableIRQ(ioss_interrupts_sec_gpio_5_IRQn);

    /* 启用全局中断 */
    __enable_irq();

    for (;;)
    {
        /* 检查中断状态 */
        if (true == gpio_intr_flag)
        {
            gpio_intr_flag = false;

            /* 更新LED切换延迟 */
            if (DELAY_LONG_MS == delay_led_blink)
            {
                delay_led_blink = DELAY_SHORT_MS;
            }
            else
            {
                delay_led_blink = DELAY_LONG_MS;
            }
        }
        /* LED闪烁四次 */
        for (count = 0; count < LED_BLINK_COUNT; count++)
        {
            Cy_GPIO_Write(CYBSP_USER_LED_PORT, CYBSP_USER_LED_PIN, CYBSP_LED_STATE_ON); /* LED 开 */
            Cy_SysLib_Delay(delay_led_blink);
            Cy_GPIO_Write(CYBSP_USER_LED_PORT, CYBSP_USER_LED_PIN, CYBSP_LED_STATE_OFF); /* LED 关 */
            Cy_SysLib_Delay(delay_led_blink);

        }
        /* 进入深度睡眠模式 */
        Cy_SysPm_CpuEnterDeepSleep(CY_SYSPM_WAIT_FOR_INTERRUPT);

    }

中断子程序

static void BTN_interrupt_handler_PDL()
{
    /* 清除引脚中断逻辑。需要清除以检测下一个中断 */
    Cy_GPIO_ClearInterrupt(CYBSP_USER_BTN_PORT, CYBSP_USER_BTN_PIN);
    gpio_intr_flag = true;

}

示例说明

为什么使用 Cy_GPIO_Pin_SecFastInit?

  • 比一般的 Cy_GPIO_Init() 更快,省略一堆参数,只适合单纯 GPIO用途。
  • 针对一些简单的 pin(如按钮、LED)快速设置,使代码更短。
/* 初始化用户按钮 */
Cy_GPIO_Pin_SecFastInit(CYBSP_USER_BTN_PORT, CYBSP_USER_BTN_PIN, CY_GPIO_DM_PULLUP, 1UL, HSIOM_SEL_GPIO);

设置 GPIO5.0 的中断

  • Cy_SysInt_Init():
    设置一个中断向量 (interrupt vector)把 intrCfgBTN(一个设置结构)传进去。
    里面会包含要连接哪一个硬件中断源,触发时调用哪个中断处理函数(BTN_interrupt_handler_PDL)。
  • Cy_SysInt_Init():
    设置一个中断向量 (interrupt vector),把 intrCfgBTN(一个设置结构)传进去。
    里面会包含要连接哪一个硬件中断源,触发时调用哪个中断处理函数(BTN_interrupt_handler_PDL)。
  • NVIC_EnableIRQ():
    打开 NVIC(嵌套向量中断控制器)中对应 GPIO5.0 的中断
    ioss_interrupts_sec_gpio_5_IRQn 这个 IRQ 是与 GPIO port 5 的某个 pin(比如 5.0)连接的。

/* 配置 GPIO5.0 中断向量 */
Cy_SysInt_Init(&intrCfgBTN, BTN_interrupt_handler_PDL);
NVIC_EnableIRQ(ioss_interrupts_sec_gpio_5_IRQn);

打开全局中断

  • __enable_irq() 是 ARM Cortex-M CPU 的指令。
  • 它会打开 CPU 接收任何中断信号

切换 LED 闪烁速度

/* 更新LED切换延迟 */
if (DELAY_LONG_MS == delay_led_blink)
{
    delay_led_blink = DELAY_SHORT_MS;
}
else
{
    delay_led_blink = DELAY_LONG_MS;
}
  • delay_led_blink 是一个变量,存储当前 LED 闪烁的时间间隔(单位:ms)。
  • 如果现在是长时间间隔(慢慢闪),就改成短时间间隔(快速闪)。
  • 如果是短的,就改回长的。

这样每按一次按钮,LED闪烁速度会切换快/慢

让 LED 闪烁四次

/* LED闪烁四次 */
for (count = 0; count < LED_BLINK_COUNT; count++)
{
    Cy_GPIO_Write(CYBSP_USER_LED_PORT, CYBSP_USER_LED_PIN, CYBSP_LED_STATE_ON); /* LED亮 */
    Cy_SysLib_Delay(delay_led_blink);
    Cy_GPIO_Write(CYBSP_USER_LED_PORT, CYBSP_USER_LED_PIN, CYBSP_LED_STATE_OFF); /* LED灭 */
    Cy_SysLib_Delay(delay_led_blink);
}
  • LED_BLINK_COUNT 通常为 4,表示需要闪烁 4 次。
  • Cy_GPIO_Write() 控制 GPIO 的电平,高低切换让 LED 亮/灭。
  • Cy_SysLib_Delay() 是阻塞式的延迟,单位是毫秒(ms)。

这里就是「闪烁四次 LED,间隔时间取决于刚刚按钮切换后的新延迟」。

进入 Deep Sleep

/* 进入深度睡眠模式 */
Cy_SysPm_CpuEnterDeepSleep(CY_SYSPM_WAIT_FOR_INTERRUPT);
  • 这行让 MCU进入 Deep Sleep 模式,节省功耗。
  • CY_SYSPM_WAIT_FOR_INTERRUPT 代表:只要有中断(例如按钮按下),就可以唤醒 CPU。

闪完 4 次 LED 之后,MCU 就进入超省电模式,等待下一次按钮唤醒。

整个流程总结

  1. 初始化按钮中断 → 允许中断进入。
  2. MCU主程序空闲等待。
  3. 点击按钮 → 中断来了 → 软件将 gpio_intr_flag 设置为 true。
  4. 主程序检测到 gpio_intr_flag,切换 LED 闪烁速度。
  5. LED闪四次。
  6. 闪完后 MCU 进入深度睡眠,等待下一次唤醒。

结论

通过本示例,我们展示了PSOC Control C3 MCU在低功耗模式下,利用GPIO中断唤醒CPU并实时执行ISR的能力。这种设计方式有效结合了系统能耗管理与高实时性需求,特别适合应用于HVAC与热泵设备中需长时间待机、但能迅速响应外部事件的场景。PSOC Control C3不仅提供强大的计算性能与丰富的电机控制功能,其在低功耗运行与灵活中断管理方面也展现了出色的设计灵活性。结合ModusToolbox™的开发资源,开发者可以更快速地导入类似的低功耗中断应用,加速产品开发流程,同时满足现代化HVAC系统对性能、功耗与实时性的严格要求。

解锁更多精彩技术文章可点击此处前往大大通哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值