1 /* 2 * Copyright (c) 2022 HPMicro 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 #include "hpm_soc.h" 9 #include "hpm_mbx_drv.h" 10 #include "hpm_ipc_event_mgr.h" 11 #include "hpm_ipc_event_mgr_mbx_config.h" 12 #include "hpm_ipc_event_mgr_mbx_internal.h" 13 14 /***************************************************************************************************************** 15 * 16 * Definitions 17 * 18 *****************************************************************************************************************/ 19 20 /***************************************************************************************************************** 21 * 22 * Prototypes 23 * 24 *****************************************************************************************************************/ 25 static void mbx_isr(void); SDK_DECLARE_EXT_ISR_M(IRQn_MBX,mbx_isr)26SDK_DECLARE_EXT_ISR_M(IRQn_MBX, mbx_isr) 27 28 /***************************************************************************************************************** 29 * 30 * Variables 31 * 32 *****************************************************************************************************************/ 33 34 /***************************************************************************************************************** 35 * 36 * Codes 37 * 38 *****************************************************************************************************************/ 39 void ipc_init_internal(void) 40 { 41 mbx_init(HPM_MBX); 42 } 43 ipc_enable_event_interrupt_internal(uint32_t priority)44void ipc_enable_event_interrupt_internal(uint32_t priority) 45 { 46 mbx_enable_intr(HPM_MBX, MBX_CR_RWMVIE_MASK); 47 intc_m_enable_irq_with_priority(IRQn_MBX, priority); 48 } 49 ipc_disable_event_interrupt_internal(void)50void ipc_disable_event_interrupt_internal(void) 51 { 52 mbx_disable_intr(HPM_MBX, MBX_CR_RWMVIE_MASK); 53 intc_m_disable_irq(IRQn_MBX); 54 } 55 ipc_tigger_event_internal(uint32_t remote_data)56hpm_stat_t ipc_tigger_event_internal(uint32_t remote_data) 57 { 58 return mbx_send_message(HPM_MBX, remote_data); 59 } 60 61 /*! 62 * @brief ISR handler 63 * 64 * This function is called when data from MBX is received 65 */ mbx_isr(void)66static void mbx_isr(void) 67 { 68 uint32_t data; 69 hpm_stat_t state; 70 71 state = mbx_retrieve_message(HPM_MBX, &data); 72 73 if (state == status_success) { 74 ipc_event_handler(data); 75 } 76 } 77