| 在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: // 如果电平有变化 { ... ... // 对中断的处理 ... ... 至此一个完整的中断配置完成 |
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.