找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

qcc30xx qcc51xx中断配置完整流程

2026-1-12 13:44| 发布者: 52bluetooth| 查看: 42| 评论: 6|原作者: 崔嵬岱宗

摘要: 在QCC51XX的开发板上配置中断首先需要知道以下函数: 1.PioCommonPioBank(uint8 pio) 作用:根据 PIO 引脚编号获取其所在的 Bank(硬件分组)PIO 引脚在硬件实现中分组管理,一个 Bank 中包含多个 PIO 输入参数: ...
在QCC51XX的开发板上配置中断首先需要知道以下函数:


1.PioCommonPioBank(uint8 pio)
作用:根据 PIO 引脚编号获取其所在的 Bank(硬件分组)<PIO 引脚在硬件实现中分组管理,一个 Bank 中包含多个 PIO>
输入参数:指定的 PIO 引脚编号,例如 20 表示 PIO20。
返回值:返回对应的 Bank 编号(uint16 类型)。

2.PioCommonPioMask(uint8 pio)
作用:获取指定 PIO 在其 Bank 中的位置掩码(Mask)<一个 Bank 内的 PIO 按位排列,每个 PIO 对应一个掩码>
输入参数:指定的 PIO 引脚编号。
返回值:返回掩码值(uint32 类型),用于标识该 PIO 在 Bank 中的位置。

3.PioSetMapPins32Bank(uint16 bank, uint32 mask, uint32 bits)
作用:将指定的 PIO 引脚映射(mapping)到软件控制模式,使软件能够对该引脚进行操作。
输入参数:
bank:PIO 引脚所属的 Bank。
mask:需要操作的 PIO 掩码。
bits:指定需要映射的 PIO。
返回值:返回 0 表示成功,非 0 表示失败。

4.PioSetDir32Bank(uint16 bank, uint32 mask, uint32 dir)
作用:设置指定 PIO 的方向(输入或输出)。
输入参数:
bank:PIO 引脚所属的 Bank。<pio所属的硬件分组>
mask:需要操作的 PIO 掩码。<具体哪个pio>
dir:0 表示输入模式。1 表示输出模式。
返回值:返回 0 表示成功,非 0 表示失败。

5.PioSet32Bank(uint16 bank, uint32 mask, uint32 bits)
作用:设置 PIO 的电平状态。
如果是输入模式,启用弱上拉(bits = 1)或弱下拉(bits = 0)。
如果是输出模式,设置为高电平(bits = 1)或低电平(bits = 0)。
输入参数:
bank:PIO 引脚所属的 Bank。
mask:需要操作的 PIO 掩码。
bits:指定电平状态:1 表示高电平或启用弱上拉。0 表示低电平或启用弱下拉。
返回值:返回 0 表示成功,非 0 表示失败。

6.PanicNotZero(int status)
作用:检查函数返回值是否为非 0,如果是非 0,则触发错误。

7.PioMonitorRegisterTask(Task task, uint8 pio)
作用:将指定的 PIO 注册为中断源,并指定任务(Task)作为中断处理程序。
输入参数:
task:任务结构体,包含中断处理函数。
pio:需要注册为中断源的 PIO 编号。
返回值:成功返回 0,失败返回非 0。
功能说明:注册后,当 PIO 状态变化时,会触发指定任务的处理函数。例如,中断触发时系统会向任务发送 MESSAGE_PIO_CHANGED 消息

以上函数知道后可以根据hall_effect.c(传感器)来配置中断,简洁方法具体如下:

1.定义变量:
uint16 bank;
uint32 mask;

2. 配置 PIO20 引脚:
bank = PioCommonPioBank(20);
mask = PioCommonPioMask(20);
PanicNotZero(PioSetMapPins32Bank(bank, mask, mask));
PanicNotZero(PioSetDir32Bank(bank, mask, 0));     // 输入模式
PanicNotZero(PioSet32Bank(bank, mask, mask));   // 上拉

3.注册中断处理任务
PioMonitorRegisterTask(&the_volume_service.volume_message_handler_task, 20);  // 我这里设置的volume_service.c中的任务处理结构体(包含中断处理函数)

4.在中断处理函数中实现中断后的行为

static void volumeMessageHandler(Task task, MessageId id, Message message)
{
    UNUSED(task);
    switch(id)
    {
        case MESSAGE_PIO_CHANGED:       // 如果电平有变化
        {
        ...        ...                                      // 对中断的处理

        ...        ...

至此一个完整的中断配置完成





路过

雷人

握手

鲜花

鸡蛋
发表评论

最新评论

引用 qiujinkai 2024-11-21 17:51
image.png
引用 jjtz 2024-11-21 20:22
支持,很厉害啊
引用 windmefly 2025-1-19 15:59
非常感谢分享!
引用 asfjin72 2025-2-4 01:29
thank you
引用 jayceon 2025-4-25 16:32
阿里嘎多
引用 wshangm 2026-1-12 08:30
很厉害,学习

查看全部评论(6)

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2026-1-16 22:23 , Processed in 0.076359 second(s), 18 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

返回顶部