diff nuc-fw/bsp/niq32.c @ 93:45911ad957fd

nuc-fw: beginning to integrate TI's BSP code
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sat, 31 Aug 2013 23:43:23 +0000
parents
children 4179acab05f7
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nuc-fw/bsp/niq32.c	Sat Aug 31 23:43:23 2013 +0000
@@ -0,0 +1,610 @@
+/******************************************************************************
+            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.12
+
+   Date and time	: 02/19/01 14:01:50
+
+   Previous delta 	: 12/19/00 14:24:51
+
+   SCCS file      	: /db/gsm_asp/db_ht96/dsp_0/gsw/rel_0/mcu_l1/release_gprs/mod/emu_p/EMU_P_FRED_ADC/drivers1/common/SCCS/s.niq32.c
+
+   Sccs Id  (SID)       : '@(#) niq32.c 1.12 02/19/01 14:01:50 '
+*******************************************************************************/
+
+#include "l1_sw.cfg"
+
+#if(!OP_L1_STANDALONE)
+  #include "chipset.cfg"
+  #include "debug.cfg"
+  #include "board.cfg"
+  #include "rv_defined_swe.h"    
+  #include "rtc_config.h"
+#endif
+
+#include "sys_types.h"
+#include "serialswitch.h"
+
+#include  "mem.h"
+#include  "inth.h"
+#include  "sim.h"
+#include  "abb_inth.h"	  // for External Interrupt
+
+#define IQ_H
+#include  "iq.h"
+#include  "ulpd.h"
+
+#if (defined RVM_DAR_SWE) && (defined _GSM)
+  extern void dar_watchdog_reset(void);
+#endif
+
+#if ((BOARD == 8) || (BOARD == 9) || (BOARD == 40) || (BOARD == 41) || (BOARD == 43) || (BOARD == 45))
+#include "armio.h"
+#include "uartfax.h"
+#endif
+
+/* External declaration */
+extern void GAUGING_Handler(void);
+extern void TMT_Timer_Interrupt(void);
+extern void kpd_key_handler(void);
+extern void TP_FrameIntHandler(void);
+
+#if (!OP_L1_STANDALONE)
+  #if (defined RVM_MPM_SWE)
+   extern void MPM_InterruptHandler(void);
+  #endif
+
+  #if (TI_PROFILER == 1)
+    extern void ti_profiler_tdma_action(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 */
+
+/* add this two variables for imported 188 functions, Jeffrey, 02/26/04 */
+typedef struct GPIO_HISR_INFO 
+{
+	NU_HISR		hisr;
+	char		hisr_stack[1024];	
+} T_GPIO_HISR_INFOS;
+
+static T_GPIO_HISR_INFOS gpio_hisr_infos = {0};
+int g_interrupt = 0;
+
+extern void Hall_OC_IntHandler( void ) ;
+
+
+/*--------------------------------------------------------------*/
+/*  	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)
+     IQ_Dummy,
+   #else
+     SIM_IntHandler,         /* 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) || (CHIPSET == 12))
+   SER_uart_modem_handler, /* AIRQ 7 */
+#endif
+   #if (CHIPSET == 12)
+     IQ_KeypadHandler,       /* AIRQ 8 */
+   #else
+#if ((BOARD == 8) || (BOARD == 9) || (BOARD == 40) || (BOARD == 41))
+   IQ_KeypadGPIOHandler,   /* AIRQ 8 */
+#else
+   IQ_KeypadHandler,       /* AIRQ 8 */
+#endif
+   #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) || (CHIPSET == 12))
+   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 */
+   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,               /* 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                /* 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 */
+#elif (CHIPSET == 12)
+   IQ_Dummy,               /* IRQ15 - LEAD */
+   IQ_Dummy,               /* IRQ16 - GPIO */
+   IQ_Dummy,               /* IRQ17 - External fast interrupt */
+   SER_uart_irda_handler,  /* IRQ18 - UART IrDA interrupt */
+   IQ_GsmTim_Handler,      /* IRQ19 - ULPD GSM timer */
+   IQ_Dummy,               /* IRQ20 - GEA interrupt */
+   IQ_Dummy,               /* IRQ21 - External general Purpose interrupt IRQ1 */
+   IQ_Dummy,               /* IRQ22 - External general Purpose interrupt IRQ2 */
+   IQ_Dummy,               /* IRQ23 - USIM card insertion/extraction */
+   IQ_Dummy,               /* IRQ24 - USIM */
+   IQ_Dummy,               /* IRQ25 - LCD */
+   IQ_Dummy,               /* IRQ26 - USB */
+   IQ_Dummy,               /* IRQ27 - MMC/SD/Memory Stick */
+   SER_uart_modem2_handler,/* IRQ28 - UART_MODEM2 */
+   IQ_Dummy,               /* IRQ29 - 2nd level interrupt handler */
+   IQ_Dummy,               /* IRQ30 - I2C or uWIRE */
+   IQ_Dummy                /* IRQ31 - NAND FLASH */
+#else
+   IQ_Dummy                /* LEAD */
+#endif
+};   
+
+#if ((CHIPSET == 4) || (CHIPSET == 5) || (CHIPSET == 6) || (CHIPSET == 7) || (CHIPSET == 8) || (CHIPSET == 9) || (CHIPSET == 10) || (CHIPSET == 11) || (CHIPSET == 12))
+  /*--------------------------------------------------------------*/
+  /*  	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 */
+    IQ_Dummy,          /* AIRQ 3 */   
+    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 (CHIPSET == 12)
+      IQ_Dummy,        /* IRQ16 - GPIO */
+    #else
+      #if (OP_L1_STANDALONE)
+        IQ_Dummy,
+      #else
+	  /* glowing, 2004-06-08, replace SIM with Hall according to 188 */
+	  Hall_OC_IntHandler,  /* glowing,2003-12-18, Hall open-close fast interrupt, it replace SIM_CD_IntHandler */
+	  //SIM_CD_IntHandler, /* SIM card-detect fast interrupt */
+    #endif
+    #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 */
+  #elif (CHIPSET == 12)
+    IQ_Dummy,        /* IRQ19 - ULPD GSM timer */
+    IQ_Dummy,        /* IRQ20 - GEA interrupt */
+    IQ_Dummy,        /* IRQ21 - External general Purpose interrupt IRQ1 */
+    IQ_Dummy,        /* IRQ22 - External general Purpose interrupt IRQ2 */
+    IQ_Dummy,        /* IRQ23 - USIM card insertion/extraction */
+    IQ_Dummy,        /* IRQ24 - USIM */
+    IQ_Dummy,        /* IRQ25 - LCD */
+    IQ_Dummy,        /* IRQ26 - USB */
+    IQ_Dummy,        /* IRQ27 - MMC/SD/Memory Stick */
+    IQ_Dummy,        /* IRQ28 - UART_MODEM2 */
+    IQ_Dummy,        /* IRQ29 - 2nd level interrupt handler */
+    IQ_Dummy,        /* IRQ30 - I2C or uWIRE */
+    IQ_Dummy         /* IRQ31 - NAND FLASH */
+  #endif
+};   
+#endif
+
+/*--------------------------------------------------------------*/
+/*  IQ_Gauging_Handler				                */
+/*--------------------------------------------------------------*/
+/* Parameters :none						*/
+/* Return     :	none						*/
+/* Functionality :   Handle unused interrupts 			*/
+/*--------------------------------------------------------------*/
+void IQ_Gauging_Handler(void)
+{
+   GAUGING_Handler();
+#if (!OP_L1_STANDALONE)
+   RTC_GaugingHandler();
+#endif
+} 
+
+
+/*--------------------------------------------------------------*/
+/*  IQ_External							                        */
+/*--------------------------------------------------------------*/
+/* Parameters : none						                    */
+/* Return     :	none						                    */
+/* Functionality : Handle External IRQ mapped on ABB.           */
+/*--------------------------------------------------------------*/
+void IQ_External(void)
+{
+  // Mask external interrupt (12)
+  IQ_Mask(IQ_EXT);
+
+  // 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())
+  {
+     IQ_Unmask(IQ_EXT);
+  }
+}
+
+/*--------------------------------------------------------------*/
+/*  IQ_Dummy							*/
+/*--------------------------------------------------------------*/
+/* Parameters :none						*/
+/* Return     :	none						*/
+/* Functionality :   Handle unused interrupts 			*/
+/*--------------------------------------------------------------*/
+void IQ_Dummy(void)
+{
+    IQ_DummyCount++;
+}   
+
+/*--------------------------------------------------------------*/
+/*  IQ_RTCHandler						*/
+/*--------------------------------------------------------------*/
+/* Parameters :none						*/
+/* Return     :	none						*/
+/* Functionality :    Handle RTC Time interrupts 		*/
+/*--------------------------------------------------------------*/
+
+void IQ_Rtc_Handler(void)
+{
+#if (!OP_L1_STANDALONE)
+  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)
+    /* 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)
+   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
+
+/*--------------------------------------------------------------*/
+/*  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)
+     #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++;  
+}
+ 
+/*--------------------------------------------------------------*/
+/*  IQ_TimerHandler2						*/
+/*--------------------------------------------------------------*/
+/* Parameters :none						*/
+/* Return     :	none						*/
+/* Functionality :    Handle Timer 2 interrupts 			*/
+/*--------------------------------------------------------------*/
+ void IQ_TimerHandler2(void)
+{
+  IQ_TimerCount2++;  
+ }
+
+/*--------------------------------------------------------------*/
+/*  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) || (CHIPSET == 12))
+    fiqHandlers[((* (SYS_UWORD16 *) INTH_B_FIQ_REG) & INTH_SRC_NUM)]();  /* ACK IT */
+  #endif
+    * (SYS_UWORD16 *) INTH_CTRL_REG |= (1 << INTH_FIQ);	/* valid next FIQ */
+}   
+
+#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)
+    /*
+     * GPIO interrupt must be checked before the keypad interrupt. The GPIO
+     * status bit is reset when the register is read.
+     */
+     
+	     g_interrupt = 80;
+    if (AI_CheckITSource (ARMIO_GPIO_INT)) {
+    #if 0
+    #ifdef RVM_MPM_SWE
+      /* check if the SWE has been started */
+      MPM_InterruptHandler ();
+    #else
+      UAF_DTRInterruptHandler ();
+    #endif
+    #endif
+	  /* Jeffrey, 02/26/04, add this line from 188 */
+	  gpio_handler();
+	}
+
+    if (AI_CheckITSource (ARMIO_KEYPDAD_INT))
+      kpd_key_handler ();
+ #endif
+}   
+
+/**
+ * function: gpio_handler  hall
+ */
+void gpio_handler(void)
+{
+	/* 2003/11/01 Robert.Chen for melody interrupt from GPIO1*/
+	/* modify from */
+	
+	/*
+	   AI_MaskIT(2);
+	 */
+	 
+	/* to */
+	AI_MaskIT(2);
+	/* end Robert.Chen */
+
+    /* Activate HISR to process the key event */
+      NU_Activate_HISR(&gpio_hisr_infos.hisr);
+	}
+
+/* 2003/11/01 Robert.Chen  Melody HISR entry */
+void MI_Melody_Hisr(void)
+{
+	MaDevDrv_IntHandler();
+	AI_UnmaskIT(0x02);
+}
+
+/**
+ * function: kpd_initialize_keypad_hardware
+ */
+void Gpio_hisr_initialize(void)
+{
+   int i;
+   
+	/* 2003/11/01 Robert.Chen, modify for Melody HISR */
+	/* modify from */
+   #if 0
+   /* HISR creation */
+   NU_Create_HISR(&gpio_hisr_infos.hisr,
+                  "GPIO_HISR",                  
+                  gpio_hisr_entry,
+                  2,
+                  gpio_hisr_infos.hisr_stack,
+                  sizeof(gpio_hisr_infos.hisr_stack));
+
+	AI_UnmaskIT(0x02);
+	
+   	i = HallOnOff();
+	
+	if(i){
+		AI_SelectIOForIT (2, 0);//ARMIO_FALLING_EDGE
+	}
+	else{
+
+		AI_SelectIOForIT (2, 1);//ARMIO_RISING_EDGE
+	}	
+	#endif
+	/* to */
+	NU_Create_HISR(&gpio_hisr_infos.hisr,
+                  "GPIO_HISR",                  
+                  MI_Melody_Hisr,
+                  2,
+                  gpio_hisr_infos.hisr_stack,
+                  sizeof(gpio_hisr_infos.hisr_stack));
+	
+	AI_EnableBit(5); /* MCSI_TXD as GPIO9 */
+	AI_ConfigBitAsInput(9); /* GPIO9 as input pin for YMU765 ~IRQ */		
+	AI_SelectIOForIT (9, 0); /* GPIO9 as input, falling edge triggered */
+	AI_UnmaskIT(0x02);		 /* enable GPIO IRQ */
+	
+	/* end modify, Robert.Chen */
+}
+/* end of imported functins, Jeffrey, 02/26/04 */
+/* ---------------------------------------------*/
+
+#elif ((BOARD == 43) || (BOARD == 45))
+
+/*--------------------------------------------------------------*/
+/*  IQ_KeypadHandler							*/
+/*--------------------------------------------------------------*/
+/* Parameters :none						*/
+/* Return     :	none						*/
+/* Functionality :   Handle keypad interrupts  			*/
+/*--------------------------------------------------------------*/
+void IQ_KeypadHandler(void)
+{
+ #if (!OP_L1_STANDALONE)
+     kpd_key_handler ();
+ #endif
+}   
+	
+#endif