FreeCalypso > hg > fc-tourmaline
diff src/cs/drivers/drv_core/inth/niq32.c @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cs/drivers/drv_core/inth/niq32.c Fri Oct 16 06:23:26 2020 +0000 @@ -0,0 +1,591 @@ +/****************************************************************************** + TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION + + Property of Texas Instruments -- For Unrestricted Internal Use Only + Unauthorized reproduction and/or distribution is strictly prohibited. This + product is protected under copyright law and trade secret law as an + unpublished work. Created 1987, (C) Copyright 1997 Texas Instruments. All + rights reserved. + + + Filename : niq32.c + + Description : Nucleus IQ initializations + + Project : Drivers + + Author : proussel@ti.com Patrick Roussel. + + Version number : 1.25 + + Date : 08/22/03 + + Previous delta : 12/19/00 14:24:51 + +*******************************************************************************/ + +#include "l1sw.cfg" + +#include "chipset.cfg" +#include "board.cfg" +#include "rf.cfg" +#include "swconfig.cfg" +#include "fc-target.h" + +#if(OP_L1_STANDALONE == 0) + #include "debug.cfg" + #include "rv/rv_defined_swe.h" + #include "rtc/board/rtc_config.h" +#else + #include "l1_macro.h" + #include "l1_confg.h" +#endif + +#if(OP_L1_STANDALONE == 0) +#include "swconfig.cfg" +#ifdef BLUETOOTH_INCLUDED +#include "btemobile.cfg" +#ifdef BT_CLK_REQ_INT +#include "board/bth_drv.h" +#endif +#endif +#endif + + +#if(L1_DYN_DSP_DWNLD == 1) + #include "l1_api_hisr.h" +#endif + +#if (OP_L1_STANDALONE == 0) + #include "main/sys_types.h" +#else + #include "sys_types.h" +#endif + +#if (CHIPSET == 12) + #include "sys_inth.h" +#else + #include "inth/inth.h" + #include "memif/mem.h" + #if (OP_L1_STANDALONE == 1) + #include "serialswitch_core.h" + #else + #include "uart/serialswitch.h" + #endif + + #if (OP_L1_STANDALONE == 0) + #include "sim/sim.h" + #endif +#endif + +#include "abb/abb_core_inth.h" // for External Interrupt +#define IQ_H +#include "inth/iq.h" +#include "ulpd/ulpd.h" +#if (BOARD == 34) + #include "csmi/csmi.h" +#endif + +#if (defined RVM_DAR_SWE) && (defined _GSM) + extern void dar_watchdog_reset(void); +#endif + +#if ((BOARD == 8) || (BOARD == 9) || (BOARD == 40) || (BOARD == 41) || (BOARD == 42) || (BOARD == 43) || (BOARD == 45)) +#include "armio/armio.h" + #if (OP_L1_STANDALONE == 0) + #include "uart/uartfax.h" + #endif +#endif + +/* External declaration */ +extern void GAUGING_Handler(void); +extern void TMT_Timer_Interrupt(void); +#if (OP_L1_STANDALONE == 1) + extern void TM_Timer1Handler(void); +#endif +extern void kpd_key_handler(void); +extern void TP_FrameIntHandler(void); + +#if (OP_L1_STANDALONE == 0) + #if (defined RVM_MPM_SWE) + extern void MPM_InterruptHandler(void); + #endif + + #if (TI_PROFILER == 1) + extern void ti_profiler_tdma_action(void); + #endif + + #if(RF_FAM==35) + extern void TSP_RxHandler(void); + #endif + + extern void RTC_GaugingHandler(void); + extern void RTC_ItTimerHandle(void); + extern void RTC_ItAlarmHandle(void); +#endif + + + +/* Global variables */ +unsigned IQ_TimerCount1; /* Used to check if timer is incrementing */ +unsigned IQ_TimerCount2; /* Used to check if timer is incrementing */ +unsigned IQ_TimerCount; /* Used to check if timer is incrementing */ +unsigned IQ_DummyCount; /* Used to check if dummy IT */ +unsigned IQ_FrameCount; /* Used to check if Frame IT TPU*/ +unsigned IQ_GsmTimerCount; /* Used to check if GSM Timer IT */ + + +#if (CHIPSET != 12) +/*--------------------------------------------------------------*/ +/* irqHandlers */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : Table of interrupt handlers */ +/* These MUST be 32-bit entries */ +/*--------------------------------------------------------------*/ + +SYS_FUNC irqHandlers[IQ_NUM_INT] = +{ + IQ_TimerHandler, /* Watchdog timer */ + IQ_TimerHandler1, /* timer 1 */ + IQ_TimerHandler2, /* timer 2 */ + IQ_Dummy, /* AIRQ 3 */ + IQ_FrameHandler, /* TPU Frame It AIRQ 4 */ + IQ_Dummy, /* AIRQ 5 */ +#if (OP_L1_STANDALONE == 0) + SIM_IntHandler, /* AIRQ 6 */ +#else + IQ_Dummy, /* AIRQ 6 */ +#endif +#if ((CHIPSET == 2) || (CHIPSET == 3)) + SER_uart_handler, /* AIRQ 7 */ +#elif ((CHIPSET == 4) || (CHIPSET == 5) || (CHIPSET == 6) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 9) || (CHIPSET == 10) || (CHIPSET == 11)) + SER_uart_modem_handler, /* AIRQ 7 */ +#endif +#if ((BOARD == 8) || (BOARD == 9) || (BOARD == 40) || (BOARD == 41)) + IQ_KeypadGPIOHandler, /* AIRQ 8 */ +#else + IQ_KeypadHandler, /* AIRQ 8 */ +#endif + IQ_Rtc_Handler, /* AIRQ 9 RTC Timer*/ +#if ((CHIPSET == 2) || (CHIPSET == 3)) + IQ_RtcA_GsmTim_Handler, /* AIRQ 10 RTC ALARM OR ULPD GSM TIMER*/ +#elif ((CHIPSET == 4) || (CHIPSET == 5) || (CHIPSET == 6) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 9) || (CHIPSET == 10) || (CHIPSET == 11)) + IQ_RtcA_Handler, /* AIRQ 10 RTC ALARM */ +#endif + IQ_Gauging_Handler, /* AIRQ 11 ULPD GAUGING */ + IQ_External, /* AIRQ 12 */ + IQ_Dummy, /* AIRQ 13 */ + IQ_Dummy, /* DMA interrupt */ +#if (CHIPSET == 4) + IQ_Dummy, /* LEAD */ + IQ_Dummy, /* SIM card-detect fast interrupt */ + IQ_Dummy, /* External fast interrupt */ + SER_uart_irda_handler, /* UART IrDA interrupt */ + IQ_GsmTim_Handler /* ULPD GSM timer */ +#elif ((CHIPSET == 5) || (CHIPSET == 6)) + IQ_Dummy, /* LEAD */ + IQ_Dummy, /* SIM card-detect fast interrupt */ + IQ_Dummy, /* External fast interrupt */ + SER_uart_irda_handler, /* UART IrDA interrupt */ + IQ_GsmTim_Handler, /* ULPD GSM timer */ + #if (BOARD == 34) + IQ_IcrHandler32, + #else + IQ_Dummy, /* Not mapped interrupt */ + #endif + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy /* GEA interrupt */ +#elif ((CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 10) || (CHIPSET == 11)) +#if (L1_DYN_DSP_DWNLD == 1) + IQ_ApiHandler, /* LEAD */ +#else + IQ_Dummy, /* LEAD */ +#endif + IQ_Dummy, /* SIM card-detect fast interrupt */ + IQ_Dummy, /* External fast interrupt */ + SER_uart_irda_handler, /* UART IrDA interrupt */ + IQ_GsmTim_Handler, /* ULPD GSM timer */ + IQ_Dummy /* GEA interrupt */ +#elif (CHIPSET == 9) + IQ_Dummy, /* LEAD */ + IQ_Dummy, /* SIM card-detect fast interrupt */ + IQ_Dummy, /* External fast interrupt */ + SER_uart_irda_handler, /* UART IrDA interrupt */ + IQ_GsmTim_Handler, /* ULPD GSM timer */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy /* Reserved */ +#else + IQ_Dummy /* LEAD */ +#endif +}; + +#if ((CHIPSET == 4) || (CHIPSET == 5) || (CHIPSET == 6) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 9) || (CHIPSET == 10) || (CHIPSET == 11)) + /*--------------------------------------------------------------*/ + /* fiqHandlers */ + /*--------------------------------------------------------------*/ + /* Parameters :none */ + /* Return :none */ + /* Functionality : Table of interrupt handlers */ + /* These MUST be 32-bit entries */ + /*--------------------------------------------------------------*/ + + SYS_FUNC fiqHandlers[IQ_NUM_INT] = + { + IQ_Dummy, /* Watchdog timer */ + IQ_Dummy, /* timer 1 */ + IQ_Dummy, /* timer 2 */ + #if ((OP_L1_STANDALONE == 0) && (RF_FAM == 35)) + TSP_RxHandler, /* 3 TSP */ + #else + IQ_Dummy, /* AIRQ 3 */ + #endif + IQ_Dummy, /* TPU Frame It AIRQ 4 */ + IQ_Dummy, /* AIRQ 5 */ + IQ_Dummy, /* AIRQ 6 */ + IQ_Dummy, /* AIRQ 7 */ + IQ_Dummy, /* AIRQ 8 */ + IQ_Dummy, /* AIRQ 9 RTC Timer */ + IQ_Dummy, /* AIRQ 10 RTC ALARM */ + IQ_Dummy, /* AIRQ 11 ULPD GAUGING */ + IQ_Dummy, /* AIRQ 12 */ + IQ_Dummy, /* AIRQ 13 Spi Tx Rx interrupt */ + IQ_Dummy, /* DMA interrupt */ + IQ_Dummy, /* LEAD */ + #if (OP_L1_STANDALONE == 0) + SIM_CD_IntHandler, /* SIM card-detect fast interrupt */ + #else + IQ_Dummy, /* SIM card-detect fast interrupt */ + #endif + IQ_Dummy, /* External fast interrupt */ + IQ_Dummy, /* UART_IRDA interrupt */ + #if (CHIPSET == 4) + IQ_Dummy /* ULPD GSM timer */ + #elif ((CHIPSET == 5) || (CHIPSET == 6)) + IQ_Dummy, /* ULPD GSM timer */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy /* GEA interrupt */ + #elif ((CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 10) || (CHIPSET == 11)) + IQ_Dummy, /* ULPD GSM timer */ + IQ_Dummy /* GEA timer */ + #elif (CHIPSET == 9) + IQ_Dummy, /* ULPD GSM timer */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy, /* Not mapped interrupt */ + IQ_Dummy /* Reserved */ + #endif +}; +#endif +#endif /* (CHIPSET != 12)*/ + +/*--------------------------------------------------------------*/ +/* IQ_Gauging_Handler */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : Handle unused interrupts */ +/*--------------------------------------------------------------*/ +void IQ_Gauging_Handler(void) +{ + GAUGING_Handler(); +#if (OP_L1_STANDALONE == 0) + RTC_GaugingHandler(); +#endif +} + + +/*--------------------------------------------------------------*/ +/* IQ_External */ +/*--------------------------------------------------------------*/ +/* Parameters : none */ +/* Return : none */ +/* Functionality : Handle External IRQ mapped on ABB. */ +/*--------------------------------------------------------------*/ +void IQ_External(void) +{ + #if (CHIPSET == 12) + // Mask external interrupt 12 + F_INTH_DISABLE_ONE_IT(C_INTH_ABB_IRQ_IT); + #else + // Mask external interrupt 12 + IQ_Mask(IQ_EXT); + #endif + + // The external IRQ is mapped on the ABB interrupt. + // The associated HISR ABB_Hisr is activated on reception on the external IRQ. + if(Activate_ABB_HISR()) + { + #if (CHIPSET == 12) + F_INTH_ENABLE_ONE_IT(C_INTH_ABB_IRQ_IT); + #else + // Mask external interrupt 12 + IQ_Unmask(IQ_EXT); + #endif + } +} + +#if (CHIPSET != 12) +/*--------------------------------------------------------------*/ +/* IQ_Dummy */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : Handle unused interrupts */ +/*--------------------------------------------------------------*/ +void IQ_Dummy(void) +{ + IQ_DummyCount++; +} +#endif + +/*--------------------------------------------------------------*/ +/* IQ_RTCHandler */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : Handle RTC Time interrupts */ +/*--------------------------------------------------------------*/ + +void IQ_Rtc_Handler(void) +{ +#if (OP_L1_STANDALONE == 0) + RTC_ItTimerHandle(); +#endif +} + +/*--------------------------------------------------------------*/ +/* IQ_RtcA_GsmTim_Handler */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : Handle RTC ALARM or GAUGING interrupts */ +/*--------------------------------------------------------------*/ + +#if ((CHIPSET == 4) || (CHIPSET == 5) || (CHIPSET == 6) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 9) || (CHIPSET == 10) || (CHIPSET == 11) || (CHIPSET == 12)) +void IQ_RtcA_Handler(void) +{ + #if (OP_L1_STANDALONE == 0) + /* INTH_DISABLEONEIT(IQ_RTC_ALARM); *//* RTC ALARM IT */ + if ( (* (SYS_WORD8 *) RTC_STATUS_REG) & RTC_ALARM ) + RTC_ItAlarmHandle(); + #endif +} + + void IQ_GsmTim_Handler(void) + { + + if ( (* (SYS_UWORD16 *) ULDP_GSM_TIMER_IT_REG) & ULPD_IT_TIMER_GSM ) + { + // it is GSM Timer it..... + IQ_GsmTimerCount++; + } + } +#else +void IQ_RtcA_GsmTim_Handler(void) +{ + #if (OP_L1_STANDALONE == 0) + if ( (* (SYS_UWORD16 *) ULDP_GSM_TIMER_IT_REG) & ULPD_IT_TIMER_GSM ) + { + // it is GSM Timer it..... + IQ_GsmTimerCount++; + } + else + { + /* INTH_DISABLEONEIT(IQ_RTC_ALARM); *//* RTC ALARM IT */ + if ( (* (SYS_WORD8 *) RTC_STATUS_REG) & RTC_ALARM ) + RTC_ItAlarmHandle(); + } + #endif +} +#endif + +#if (BOARD == 34) +/* + * IQ_IcrHandler32 + * + */ + void IQ_IcrHandler32(void) + { + CSMI_InterruptHandler(); + } +#endif + +/*--------------------------------------------------------------*/ +/* IQ_TimerHandler */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : Handle Timer interrupts */ +/*--------------------------------------------------------------*/ + void IQ_TimerHandler(void) +{ + IQ_TimerCount++; + TMT_Timer_Interrupt(); + #if (defined RVM_DAR_SWE) && (defined _GSM) + dar_watchdog_reset(); + #endif +} + +/*--------------------------------------------------------------*/ +/* IQ_FramerHandler */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : Handle Timer interrupts */ +/*--------------------------------------------------------------*/ + void IQ_FrameHandler(void) +{ + IQ_FrameCount++; + TMT_Timer_Interrupt(); + TP_FrameIntHandler(); + #if (OP_L1_STANDALONE == 0) + #if (TI_PROFILER == 1) + // TDMA treatment for profiling buffer + ti_profiler_tdma_action(); + #endif + #endif +} + +/*--------------------------------------------------------------*/ +/* IQ_TimerHandler1 */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : Handle Timer 1 interrupts */ +/*--------------------------------------------------------------*/ +void IQ_TimerHandler1(void) +{ + IQ_TimerCount1++; + #if (OP_L1_STANDALONE == 1) + TM_Timer1Handler(); + #endif +} + +/*--------------------------------------------------------------*/ +/* IQ_TimerHandler2 */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : Handle Timer 2 interrupts */ +/*--------------------------------------------------------------*/ + void IQ_TimerHandler2(void) +{ + IQ_TimerCount2++; + } +#if(L1_DYN_DSP_DWNLD == 1) + +/*-------------------------------------------------------*/ +/* IQ_ApiHandler() */ +/*-------------------------------------------------------*/ +/* Parameters : none */ +/* Return : none */ +/* Functionality : API int management */ +/*-------------------------------------------------------*/ +void IQ_ApiHandler(void) +{ + l1_api_handler(); +} /* IQ_ApiHandler() */ +#endif + + +#if (CHIPSET !=12) +/*--------------------------------------------------------------*/ +/* IQ_IRQ_isr */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : HHandle IRQ interrupts */ +/*--------------------------------------------------------------*/ +void IQ_IRQ_isr(void) +{ + irqHandlers[((* (SYS_UWORD16 *) INTH_B_IRQ_REG) & INTH_SRC_NUM)](); /* ACK IT */ + * (SYS_UWORD16 *) INTH_CTRL_REG |= (1 << INTH_IRQ); /* valid next IRQ */ +} + +/*--------------------------------------------------------------*/ +/* IQ_FIQ_isr */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : Handle FIQ interrupts */ +/*--------------------------------------------------------------*/ +void IQ_FIQ_isr(void) +{ + #if ((CHIPSET == 4) || (CHIPSET == 5) || (CHIPSET == 6) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 9) || (CHIPSET == 10) || (CHIPSET == 11)) + fiqHandlers[((* (SYS_UWORD16 *) INTH_B_FIQ_REG) & INTH_SRC_NUM)](); /* ACK IT */ + #endif + * (SYS_UWORD16 *) INTH_CTRL_REG |= (1 << INTH_FIQ); /* valid next FIQ */ +} +#endif /* chipset != 12 ) */ + +#if ((BOARD == 8) || (BOARD == 9) || (BOARD == 40) || (BOARD == 41)) + +/*--------------------------------------------------------------*/ +/* IQ_KeypadGPIOHandler */ +/*--------------------------------------------------------------*/ +/* Parameters : none */ +/* Return : none */ +/* Functionality : Handle keypad and GPIO interrupts */ +/*--------------------------------------------------------------*/ + +void IQ_KeypadGPIOHandler(void) +{ + + #if (OP_L1_STANDALONE == 0) + /* + * GPIO interrupt must be checked before the keypad interrupt. The GPIO + * status bit is reset when the register is read. + */ + + if (AI_CheckITSource (ARMIO_GPIO_INT)) { + #ifdef RVM_MPM_SWE + // check if the SWE has been started + MPM_InterruptHandler (); + #elif BT_CLK_REQ_INT + BT_DRV_ClkReqInterruptHandler( ); + #elif UARTFAX_CLASSIC_DTR_DCD + UAF_DTRInterruptHandler (); + #else + AI_MaskIT(ARMIO_MASKIT_GPIO); + AI_UnmaskIT(ARMIO_MASKIT_GPIO); + #endif + } + if (AI_CheckITSource (ARMIO_KEYPDAD_INT)) + { + kpd_key_handler (); + } + #endif +} + +#elif ((BOARD == 34) || (BOARD == 42) || (BOARD == 43) || (BOARD == 45)) + +/*--------------------------------------------------------------*/ +/* IQ_KeypadHandler */ +/*--------------------------------------------------------------*/ +/* Parameters :none */ +/* Return : none */ +/* Functionality : Handle keypad interrupts */ +/*--------------------------------------------------------------*/ +void IQ_KeypadHandler(void) +{ + #if (OP_L1_STANDALONE == 0) + #if (BOARD == 34) + IQ_Mask (IQ_ARMIO); + #else + kpd_key_handler (); + #endif + #endif +} + +#endif