久久精品国产精品国产一区,少妇扒开毛毛自慰喷水,国产精品无码电影在线观看 ,久久天天躁夜夜躁狠狠85麻豆

思澈科技軟件開發(fā)工具包  2.20
MAILBOX

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)都可以訪問。

Note
當(dāng)所有者子系統(tǒng)未處于低功耗模式時(shí)應(yīng)訪問mailbox模塊,否則行為未定義。

HPSYS 中的可用資源:
?- H2L_MAILBOX
?- HMUTEX_CH1
?- HMUTEX_CH2
LPSYS 中的可用資源:
?- L2H_MAILBOX
?- LMUTEX_CH1
?- LMUTEX_CH2
mailbox驅(qū)動(dòng)的詳細(xì)API請參考 MAILBOX

使用mailbox HAL 驅(qū)動(dòng)程序

通知功能

可以通過調(diào)用一些宏來使用mailbox通知功能,例如 調(diào)用 __HAL_MAILBOX_TRIGGER_CHANNEL_IT 觸發(fā)中斷,由于郵mailbox塊寄存器內(nèi)容在從待機(jī)模式喚醒后會(huì)丟失,建議發(fā)送者(即所有者)子系統(tǒng)屏蔽/取消屏蔽中斷。 在下面的示例中,HCPU觸發(fā)了LCPU的中斷:

static MAILBOX_HandleTypeDef mailbox_handle;
void hcpu_mailbox_ch1_init(void)
{
mailbox_handle.Instance = H2L_MAILBOX;
/* unmask HCPU2LCPU channel1 interrupt */
__HAL_MAILBOX_UNMASK_CHANNEL_IT(&mailbox_handle, MAILBOX_CHANNEL_1);
}
void hcpu_trigger_mailbox_ch1_interrupt(void)
{
__HAL_MAILBOX_TRIGGER_CHANNEL_IT(&mailbox_handle, MAILBOX_CHANNEL_1);
}
void lcpu_mailbox_ch1_init(void)
{
/* set the mailbox priority */
HAL_NVIC_SetPriority(HCPU2LCPU_IRQn, 3, 0);
/* enable the mailbox global Interrupt */
HAL_NVIC_EnableIRQ(HCPU2LCPU_IRQn);
}
void lcpu_mailbox_isr(void)
{
uint32_t status;
status = __HAL_MAILBOX_GET_STATUS(&mailbox_handle);
//do something according to status
//...
}

互斥功能

可以通過調(diào)用 HAL_MAILBOX_LockHAL_MAILBOX_UnLock 來使用互斥功能。 使用 HAL_MAILBOX_Lock 來鎖定互斥通道。 如果鎖定成功,則返回 MUTEX_UNLOCKED ,否則返回哪個(gè)內(nèi)核正在占用互斥通道。 使用 HAL_MAILBOX_UnLock 來解鎖互斥通道。通道只能由之前鎖定通道的所有者解鎖。 以下示例演示了 HCPU 鎖定和解鎖 LPSYS 互斥鎖通道

void test_hmutex_ch1(void)
{
handle.Instance = HMUTEX_CH1;
core = HAL_MAILBOX_Lock(&handle, 0);
//core should be MUTEX_UNLOCKED
core = HAL_MAILBOX_Lock(&handle, 0);
// core should be MUTEX_HCPU_LOCKED
HAL_MAILBOX_UnLock(&handle, 0);
}
HAL_MAILBOX_Lock
MUTEX_LockCoreIdTypeDef HAL_MAILBOX_Lock(MUTEX_HandleTypeDef const *const hmutex, uint8_t ch_id)
Lock mutex.
HAL_MAILBOX_UnLock
void HAL_MAILBOX_UnLock(MUTEX_HandleTypeDef const *const hmutex, uint8_t ch_id)
Unlock mutex.
__MAILBOX_HandleTypeDef::Instance
MAILBOX_CH_TypeDef * Instance
Definition: bf0_hal_mailbox.h:175
__MAILBOX_HandleTypeDef
MAILBOX handle structure definition.
Definition: bf0_hal_mailbox.h:174
__HAL_MAILBOX_UNMASK_CHANNEL_IT
#define __HAL_MAILBOX_UNMASK_CHANNEL_IT(__HANDLE__, __CHINDEX__)
Unmask the specified interrupt.
Definition: bf0_hal_mailbox.h:231
__MUTEX_HandleTypeDef::Instance
MUTEX_CH_TypeDef * Instance
Definition: bf0_hal_mailbox.h:190
HAL_NVIC_SetPriority
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
Set the priority of an interrupt.
__HAL_MAILBOX_CLEAR_STATUS
#define __HAL_MAILBOX_CLEAR_STATUS(__HANDLE__, __STATUS__)
clear the ISR status
Definition: bf0_hal_mailbox.h:281
HAL_NVIC_EnableIRQ
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
Enable a device specific interrupt in the NVIC interrupt controller.
__HAL_MAILBOX_TRIGGER_CHANNEL_IT
#define __HAL_MAILBOX_TRIGGER_CHANNEL_IT(__HANDLE__, __CHINDEX__)
Trigger the specified interrupt.
Definition: bf0_hal_mailbox.h:247
__MUTEX_HandleTypeDef
MUTEX handle structure definition.
Definition: bf0_hal_mailbox.h:189
__HAL_MAILBOX_GET_STATUS
#define __HAL_MAILBOX_GET_STATUS(__HANDLE__)
get the masked ISR status
Definition: bf0_hal_mailbox.h:273
HMUTEX_CH1
#define HMUTEX_CH1
Definition: register.h:650
H2L_MAILBOX
#define H2L_MAILBOX
Definition: register.h:648