Mailbox HAL 驱动程序提供高级 API 以使用硬件邮箱模块。 每个子系统都有一个硬件邮箱模块。 它可用于触发中断以通知其他子系统或保护多个子系统共享的硬件资源。
主要功能包括:
- 触发中断通知其他子系统。 例如HPSYS mailbox组1(::H2L_MAILBOX)用于触发LPSYS中断。
- 每个mailbox组有16个通道,可以同时触发所有中断。
- Mailbox中断可以自动唤醒处于 LIGHT/DEEP/STANDBY 低功耗模式的子系统。
- Mailbox模块有两个互斥通道来保护共享资源。 所有子系统都可以访问。
HPSYS 中的可用资源:
- H2L_MAILBOX
- HMUTEX_CH1
- HMUTEX_CH2
LPSYS 中的可用资源:
- L2H_MAILBOX
- LMUTEX_CH1
- LMUTEX_CH2
mailbox驱动的详细API请参考 MAILBOX 。
可以通过调用一些宏来使用mailbox通知功能,例如 调用 __HAL_MAILBOX_TRIGGER_CHANNEL_IT 触发中断,由于邮mailbox块寄存器内容在从待机模式唤醒后会丢失,建议发送者(即所有者)子系统屏蔽/取消屏蔽中断。 在下面的示例中,HCPU触发了LCPU的中断:
可以通过调用 HAL_MAILBOX_Lock 和 HAL_MAILBOX_UnLock 来使用互斥功能。 使用 HAL_MAILBOX_Lock 来锁定互斥通道。 如果锁定成功,则返回 MUTEX_UNLOCKED ,否则返回哪个内核正在占用互斥通道。 使用 HAL_MAILBOX_UnLock 来解锁互斥通道。通道只能由之前锁定通道的所有者解锁。 以下示例演示了 HCPU 锁定和解锁 LPSYS 互斥锁通道