16 #include <drivers/xint/adi_xint.h> 17 #include <rtos_map/adi_rtos_map.h> 18 #include "adi_xint_def.h" 34 #pragma diag_suppress=Pm073,Pm143,Pm140,Pm136,Pm152 37 static inline void XIntCommonInterruptHandler (
const ADI_XINT_EVENT eEvent);
38 void Ext_Int0_Handler(
void);
39 void Ext_Int1_Handler(
void);
40 void Ext_Int2_Handler(
void);
41 void Ext_Int3_Handler(
void);
47 static ADI_XINT_CALLBACK_INFO *gpCallbackTable;
75 uint32_t
const MemorySize
94 if (gpCallbackTable == NULL)
97 memset(pMemory, 0, MemorySize);
99 gpCallbackTable = (ADI_XINT_CALLBACK_INFO *)pMemory;
121 if (NULL == gpCallbackTable)
129 gpCallbackTable = NULL;
164 ADI_INT_STATUS_ALLOC();
168 if (NULL == gpCallbackTable)
175 Mask = (BITM_XINT_CFG0_IRQ0MDE | BITM_XINT_CFG0_IRQ0EN) << (ADI_XINT_CFG_BITS * (uint32_t)eEvent);
184 Pattern = (BITM_XINT_CFG0_UART_RX_EN | ((uint32_t)eMode << BITP_XINT_CFG0_UART_RX_MDE));
186 XintIrq = XINT_EVT3_IRQn;
191 Pattern = (BITM_XINT_CFG0_IRQ0EN | eMode) << (ADI_XINT_CFG_BITS * (uint32_t)eEvent);
193 XintIrq = (IRQn_Type)((uint32_t)XINT_EVT0_IRQn + (uint32_t)eEvent);
197 ADI_ENTER_CRITICAL_REGION();
200 CfgReg = pADI_XINT0->CFG0;
203 pADI_XINT0->CFG0 = CfgReg;
205 ADI_EXIT_CRITICAL_REGION();
208 NVIC_EnableIRQ(XintIrq);
234 ADI_INT_STATUS_ALLOC();
238 if (NULL == gpCallbackTable)
247 XintIrq = XINT_EVT3_IRQn;
251 XintIrq = (IRQn_Type)((uint32_t)XINT_EVT0_IRQn + (uint32_t)eEvent);
255 NVIC_DisableIRQ(XintIrq);
258 Mask = (BITM_XINT_CFG0_IRQ0MDE | BITM_XINT_CFG0_IRQ0EN) << (ADI_XINT_CFG_BITS * (uint32_t)eEvent);
260 ADI_ENTER_CRITICAL_REGION();
262 CfgReg = pADI_XINT0->CFG0;
264 pADI_XINT0->CFG0 = CfgReg;
265 ADI_EXIT_CRITICAL_REGION();
302 ADI_INT_STATUS_ALLOC();
306 if (NULL == gpCallbackTable)
312 ADI_ENTER_CRITICAL_REGION();
313 gpCallbackTable[eEvent].pfCallback = pfCallback;
314 gpCallbackTable[eEvent].pCBParam = pCBParam;
315 ADI_EXIT_CRITICAL_REGION();
327 static inline void XIntCommonInterruptHandler(
const ADI_XINT_EVENT eEvent)
330 pADI_XINT0->CLR = (1u << (uint32_t)eEvent);
333 if(gpCallbackTable[eEvent].pfCallback != NULL)
335 gpCallbackTable[eEvent].pfCallback (gpCallbackTable[eEvent].pCBParam, (uint32_t) eEvent, NULL);
340 void Ext_Int0_Handler(
void)
347 void Ext_Int1_Handler(
void)
354 void Ext_Int2_Handler(
void)
362 void Ext_Int3_Handler(
void)
365 if((pADI_XINT0->EXT_STAT & BITM_XINT_EXT_STAT_STAT_UART_RXWKUP)==BITM_XINT_EXT_STAT_STAT_UART_RXWKUP)
ADI_XINT_RESULT adi_xint_Init(void *const pMemory, uint32_t const MemorySize)
Initializes the External Interrupt Driver.
ADI_XINT_RESULT adi_xint_RegisterCallback(const ADI_XINT_EVENT eEvent, ADI_CALLBACK const pfCallback, void *const pCBParam)
Register or unregister an application callback function for external pin interrupts.
ADI_XINT_RESULT adi_xint_UnInit(void)
Un-initialize the external interrupt driver.
#define ADI_XINT_MEMORY_SIZE
ADI_XINT_RESULT adi_xint_DisableIRQ(const ADI_XINT_EVENT eEvent)
Disable an External Interrupt.
ADI_XINT_RESULT adi_xint_EnableIRQ(const ADI_XINT_EVENT eEvent, const ADI_XINT_IRQ_MODE eMode)
Enable an External Interrupt.