Mailbox HAL 驅(qū)動(dòng)程序提供高級(jí) API 以使用硬件郵箱模塊。 每個(gè)子系統(tǒng)都有一個(gè)硬件郵箱模塊。 它可用于觸發(fā)中斷以通知其他子系統(tǒng)或保護(hù)多個(gè)子系統(tǒng)共享的硬件資源。
主要功能包括:
?- 觸發(fā)中斷通知其他子系統(tǒng)。 例如HPSYS mailbox組1(::H2L_MAILBOX)用于觸發(fā)LPSYS中斷。
?- 每個(gè)mailbox組有16個(gè)通道,可以同時(shí)觸發(fā)所有中斷。
?- Mailbox中斷可以自動(dòng)喚醒處于 LIGHT/DEEP/STANDBY 低功耗模式的子系統(tǒng)。
?- Mailbox模塊有兩個(gè)互斥通道來保護(hù)共享資源。 所有子系統(tǒng)都可以訪問。
HPSYS 中的可用資源:
?- H2L_MAILBOX
?- HMUTEX_CH1
?- HMUTEX_CH2
LPSYS 中的可用資源:
?- L2H_MAILBOX
?- LMUTEX_CH1
?- LMUTEX_CH2
mailbox驅(qū)動(dòng)的詳細(xì)API請參考 MAILBOX 。
可以通過調(diào)用一些宏來使用mailbox通知功能,例如 調(diào)用 __HAL_MAILBOX_TRIGGER_CHANNEL_IT 觸發(fā)中斷,由于郵mailbox塊寄存器內(nèi)容在從待機(jī)模式喚醒后會(huì)丟失,建議發(fā)送者(即所有者)子系統(tǒng)屏蔽/取消屏蔽中斷。 在下面的示例中,HCPU觸發(fā)了LCPU的中斷:
可以通過調(diào)用 HAL_MAILBOX_Lock 和 HAL_MAILBOX_UnLock 來使用互斥功能。 使用 HAL_MAILBOX_Lock 來鎖定互斥通道。 如果鎖定成功,則返回 MUTEX_UNLOCKED ,否則返回哪個(gè)內(nèi)核正在占用互斥通道。 使用 HAL_MAILBOX_UnLock 來解鎖互斥通道。通道只能由之前鎖定通道的所有者解鎖。 以下示例演示了 HCPU 鎖定和解鎖 LPSYS 互斥鎖通道