崔嵬岱宗 发表于 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:       // 如果电平有变化
      {
      ...      ...                                    // 对中断的处理

      ...      ...

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




qiujinkai 发表于 2024-11-21 17:51:56

jjtz 发表于 2024-11-21 20:22:50

支持,很厉害啊

windmefly 发表于 2025-1-19 15:59:16

非常感谢分享!

asfjin72 发表于 2025-2-4 01:29:02

thank you

jayceon 发表于 6 天前

阿里嘎多
页: [1]
查看完整版本: 中断配置完整流程