找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

查看: 443|回复: 4

[QCC5系列] 中断配置完整流程

[复制链接]
连续签到天数:1天
签到总天数:2天
签到总奖励:9金币
发表于 2024-11-21 09:49:36 | 显示全部楼层 |阅读模式

马上注册,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册  

×
本帖最后由 崔嵬岱宗 于 2024-11-21 09:54 编辑

在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:       // 如果电平有变化
        {
        ...        ...                                      // 对中断的处理

        ...        ...

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




评分

参与人数 1金币 +30 收起 理由
jjtz + 30 赞一个!

查看全部评分

楼主热帖
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
连续签到天数:1天
签到总天数:915天
签到总奖励:18732金币
发表于 2024-11-21 17:51:56 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册  

×
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:475天
签到总奖励:12052金币
发表于 2024-11-21 20:22:50 | 显示全部楼层
支持,很厉害啊
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:5天
签到总奖励:40金币
发表于 2025-1-19 15:59:16 | 显示全部楼层
非常感谢分享!
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:13天
签到总奖励:70金币
发表于 7 天前 | 显示全部楼层
thank you
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

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

GMT+8, 2025-2-11 01:33 , Processed in 0.173056 second(s), 18 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表