Browse Source

support GNUC cross compiler(GNUM16CM32Cv1101-ELF) for renesas M16C porting

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2047 bbd45198-f89e-11dd-88c7-29a3b14d5316
dzzxzz@gmail.com 13 years ago
parent
commit
a321f3da64

+ 6 - 1
bsp/m16c62p/SConscript

@@ -3,7 +3,12 @@ Import('RTT_ROOT')
 from building import *
 
 src_c = ['application.c', 'startup.c', 'board.c', 'bsp.c', 'uart.c']
-src_asm = ['cstartup.asm', 'interrupts.asm', 'vectors.asm']
+
+# add for startup script 
+if rtconfig.CROSS_TOOL == 'gcc':
+    src_asm = ['start.S', 'vects.S', 'interrupts.S']
+elif rtconfig.CROSS_TOOL == 'iar':
+    src_asm = ['cstartup.asm', 'interrupts.asm', 'vectors.asm']
 
 src	= File(src_c + src_asm)
 

+ 1 - 1
bsp/m16c62p/board.c

@@ -24,7 +24,7 @@
 /**
  * This function will initial m16c board.
  */
-void rt_hw_board_init()
+void rt_hw_board_init(void)
 {
 #ifdef RT_USING_UART0
 	rt_hw_uart_init();

+ 3 - 0
bsp/m16c62p/board.h

@@ -16,6 +16,9 @@
 #ifndef __BOARD_H__
 #define __BOARD_H__
 
+#define M16C62P_SRAM_SIZE         31L
+#define M16C62P_SRAM_END          (0x400 + M16C62P_SRAM_SIZE * 1024 - 1)
+
 void rt_hw_board_init(void);
 
 #endif

+ 20 - 20
bsp/m16c62p/bsp.c

@@ -21,49 +21,49 @@
 
 void led_init(void)
 {
-    pu37 = 1;
-    pd11_0 = 1;
+    PUR3.BIT.PU37 = 1;
+    PD11.BIT.PD11_0 = 1;
 
     led_off();
 }
 
 void led_on(void)
 {
-    p11_0 = 0;
+    P11.BIT.P11_0 = 0;
 }
 
 void led_off(void)
 {
-    p11_0 = 1;
+    P11.BIT.P11_0 = 1;
 }
 
 static void mcu_init(void)
 {
 	volatile  rt_uint32_t  count;
 	                                                            /* Configure clock for divide by 1 mode                     */
-	prcr           |= 0x01;                                     /* Enable access to clock registers           PRCR.PRC0 = 1 */
-	cm1             = 0x20;                                     /* Set CM16, CM17 divide ratio to 1:                        */
+	PRCR.BYTE      |= 0x01;                                     /* Enable access to clock registers           PRCR.PRC0 = 1 */
+	CM1.BYTE             = 0x20;                                     /* Set CM16, CM17 divide ratio to 1:                        */
 									                            /*  ... main clock on in high drive no PLL                  */
-	cm0            &= ~0x40;                                    /* Set divide ratio to 1                      CM0.CM06  = 0 */			
+	CM0.BYTE            &= ~0x40;                                    /* Set divide ratio to 1                      CM0.CM06  = 0 */			
 
                                                                 /* Configure main PLL                                       */
-	prcr           |= 0x02;                                     /* Allow writing to processor mode register   PRCR.PRC0 = 1 */
-	pm2            |= 0x01;                                     /* Set SFR access to 2 wait, which is required for          */
+	PRCR.BYTE           |= 0x02;                                     /* Allow writing to processor mode register   PRCR.PRC0 = 1 */
+	PM2.BYTE            |= 0x01;                                     /* Set SFR access to 2 wait, which is required for          */
    									                            /*  ... operation greater than 16 MHz         PM2.PM20  = 1 */
-	prcr           &= ~0x02;                                    /* Protect processor mode register            PRCR.PRC0 = 0 */
-	plc0            = 0x91;                                     /* Enable and turn on PLL                                   */
+	PRCR.BYTE           &= ~0x02;                                    /* Protect processor mode register            PRCR.PRC0 = 0 */
+	PLC0.BYTE            = 0x91;                                     /* Enable and turn on PLL                                   */
 
     count           = 20000;                                    /* Delay while PLL stabilizes                               */
 	while (count > 0) {
         count--;
     }
 
-    cm1            |= 0x02;                                     /* Switch to PLL                              CM1.CM11  = 1 */
-    prcr           &= ~0x01;                                    /* Protect clock control register             PRCR.PRC0 = 0 */
+    CM1.BYTE            |= 0x02;                                     /* Switch to PLL                              CM1.CM11  = 1 */
+    PRCR.BYTE           &= ~0x01;                                    /* Protect clock control register             PRCR.PRC0 = 0 */
 	
-	prcr           |= 0x02;                                     /* Allow writing to processor mode register   PRCR.PRC0 = 1 */
-	pm1            |= 0x01;                                     /* Enable data flash area                     PM1.PM10  = 1 */
-	prcr           &= ~0x02;                                    /* Protect processor mode register            PRCR.PRC0 = 0 */
+	PRCR.BYTE           |= 0x02;                                     /* Allow writing to processor mode register   PRCR.PRC0 = 1 */
+	PM1.BYTE            |= 0x01;                                     /* Enable data flash area                     PM1.PM10  = 1 */
+	PRCR.BYTE           &= ~0x02;                                    /* Protect processor mode register            PRCR.PRC0 = 0 */
 }
 
 /*
@@ -91,13 +91,13 @@ static void timer_tick_init(void)
 {
 	                                                            /* Set timer to timer mode                                  */
                                                                 /* Set count source as PLL clock / 8 (f8)                   */
-	tb0mr                   = 0x40;
+	TB0MR.BYTE = 0x40;
                                                                 /* Assign timer value and reload value                      */
-	tb0                     = (CPU_CLK_FREQ / 8) / RT_TICK_PER_SECOND;
+	TB0        = (CPU_CLK_FREQ / 8) / RT_TICK_PER_SECOND;
 	                                                            /* Set timer B channel 0 interrupt level = 7                */
 	                                                            /* Clear interrupt request                                  */
-    tb0ic                   = 0x07;
-	tabsr                  |= 0x20;                             /* Start timer                                              */
+    TB0IC.BYTE = 0x07;
+	TABSR.BYTE |= 0x20;                             /* Start timer                                              */
 }
 
 void system_init(void)

+ 61 - 0
bsp/m16c62p/interrupts.S

@@ -0,0 +1,61 @@
+/*
+ * File      : interrupt.s34
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2009, RT-Thread Development Team
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rt-thread.org/license/LICENSE
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2010-04-20     fify         the first version
+ *
+ * For       : Renesas M16C
+ * Toolchain : IAR's EW for M16C v3.401
+ */
+
+ 	.text
+
+	.globl	_rt_hw_context_switch_interrupt_do
+	.type	_rt_hw_context_switch_interrupt_do, #function
+_rt_hw_context_switch_interrupt_do:
+    MOV.B   #0, _rt_thread_switch_interrupt_flag
+    MOV.W   _rt_interrupt_from_thread, A0
+    STC     ISP, [A0]
+    
+    MOV.W   _rt_interrupt_to_thread, A0
+    LDC     [A0], ISP
+    POPM    R0,R1,R2,R3,A0,A1,SB,FB             ; Restore all processor registers from the new task's stack
+    REIT
+    
+ 	.text
+	.globl	_rt_hw_timer_handler
+	.type	_rt_hw_timer_handler, #function
+_rt_hw_timer_handler:
+    PUSHM   R0,R1,R2,R3,A0,A1,SB,FB             ; Save current task's registers
+    jsr.a     _rt_interrupt_enter
+    jsr.a     _rt_tick_increase
+    jsr.a     _rt_interrupt_leave
+
+    CMP.B   #1, _rt_thread_switch_interrupt_flag
+    JEQ     _rt_hw_context_switch_interrupt_do
+    
+    POPM    R0,R1,R2,R3,A0,A1,SB,FB             ; Restore current task's registers
+    REIT                                        ; Return from interrup
+
+ 	.text
+	.globl	_rt_hw_uart0_receive_handler
+	.type	_rt_hw_uart0_receive_handler, #function
+_rt_hw_uart0_receive_handler:
+    PUSHM   R0,R1,R2,R3,A0,A1,SB,FB             ; Save current task's registers
+    jsr.a     _rt_interrupt_enter 
+    jsr.a     _u0rec_handler
+    jsr.a     _rt_interrupt_leave
+
+    CMP.B   #1, _rt_thread_switch_interrupt_flag
+    JEQ     _rt_hw_context_switch_interrupt_do
+    
+    POPM    R0,R1,R2,R3,A0,A1,SB,FB             ; Restore current task's registers
+    REIT                                        ; Return from interrup
+

+ 2757 - 0
bsp/m16c62p/iom16c62p.h

@@ -0,0 +1,2757 @@
+/****************************************************************
+KPIT Cummins Infosystems Ltd, Pune, India. 1-April-2006.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*****************************************************************/
+/****************************************************************/
+/*      M16C/60 62P Include File                                */
+/****************************************************************/
+
+
+/*------------------------------------------------------
+    Processor mode register 0  //0x0004
+------------------------------------------------------*/
+union st_pm0 {               /* union PM0    	   					*/
+  struct {             		 /* Bit  Access 		   				*/
+	 unsigned char 	PM0_0:1; /* Processor mode bit 0 				*/
+	 unsigned char 	PM0_1:1; /* Processor mode bit 1 				*/
+	 unsigned char 	PM0_2:1; /* R/W mode select bit  				*/
+	 unsigned char 	PM0_3:1; /* Software reset bit					*/
+	 unsigned char 	PM0_4:1; /* Multiplexed bus space select bit 0	*/
+	 unsigned char 	PM0_5:1; /* Multiplexed bus space select bit 1	*/
+	 unsigned char 	PM0_6:1; /* Port P40 to P43 function select bit */
+	 unsigned char 	PM0_7:1; /* BCLK output disable bit		      	*/
+  } BIT;   		     		 /*        						    	*/
+	unsigned  char BYTE;     /*  Byte Access 						*/
+};                           /* 						            */
+
+/*------------------------------------------------------
+    Processor mode register 1  //0x0005
+------------------------------------------------------*/
+union st_pm1 {              /* union PM1    	   					 */
+  struct {            		/* Bit  Access 		   					 */
+	 unsigned char PM1_0:1; /* CS2 area switching bit                */
+	 unsigned char PM1_1:1; /* Port P3_4 to P3_7 function select bit */
+	 unsigned char PM1_2:1; /* Watch dog timer function select bit   */
+	 unsigned char PM1_3:1; /* Intermal reserved area expansion bit  */
+	 unsigned char PM1_4:1; /* Memory area expansion bit             */
+	 unsigned char PM1_5:1; /* Memory area expansion bit             */
+	 unsigned char PM1_6:1; /* Reserved bit  						 */
+	 unsigned char PM1_7:1; /* PM17 - Wait bit				    	 */
+  } BIT;   		    		/*        						    	 */
+	 unsigned char BYTE;    /*  Byte Access 						 */
+};                          /* 						            	 */
+
+/*------------------------------------------------------
+    System clock control register 0  //0x0006
+------------------------------------------------------*/
+union st_cm0 {               /* union CM0    	   					*/
+  struct {             		 /* Bit  Access 		   				*/
+	 unsigned char 	CM0_0:1; /* Clock output function select bit 	*/
+	 unsigned char 	CM0_1:1; /* Clock output function select bit 	*/
+	 unsigned char 	CM0_2:1; /* WAIT peripheral function clock stop bit */
+	 unsigned char 	CM0_3:1; /* Xcin-Xcout drive capacity select bit*/
+	 unsigned char 	CM0_4:1; /* Port Xc select bit 					*/
+	 unsigned char 	CM0_5:1; /* Main clock stop bit					*/
+	 unsigned char 	CM0_6:1; /* Main clock division select bit 0 	*/
+	 unsigned char 	CM0_7:1; /* System clock select bit 			*/
+  } BIT;   		     		 /*        						    	*/
+	unsigned char BYTE;      /*  Byte Access 						*/
+};                           /* system clock control register  0    */
+
+
+/*------------------------------------------------------
+    System clock control register 1 //0x0007
+------------------------------------------------------*/
+union st_cm1 {               /* union CM1    	   					*/
+  struct {             		 /* Bit  Access 		   				*/
+	 unsigned char 	CM1_0:1; /* All clock stop control bit 			*/
+	 unsigned char 		 :1; /* Reserved bit always set to 0		*/
+	 unsigned char 	 	 :1; /* Reserved bit always set to 0		*/
+	 unsigned char 		 :1; /* Reserved bit always set to 0		*/
+	 unsigned char 		 :1; /* Reserved bit always set to 0		*/
+	 unsigned char 	CM1_5:1; /* Xin-Xouts drive capacity select bit */
+	 unsigned char 	CM1_6:1; /* Main clock division select bit 1 	*/
+	 unsigned char 	CM1_7:1; /* Main clock division select bit 1 	*/
+  } BIT;   		     		 /*        						    	*/
+	unsigned char BYTE;      /*  Byte Access 						*/
+};                           /* system clock control register 1     */
+
+
+/*------------------------------------------------------
+    Chip select control register //0x0008
+------------------------------------------------------*/
+union st_csr {               /* union CSR    	   					*/
+   struct {             	 /* Bit  Access 		   				*/
+	 unsigned char	CS0 :1;  /* CS0~ output enable bit				*/
+	 unsigned char	CS1 :1;  /* CS1~ output enable bit 				*/
+	 unsigned char	CS2 :1;  /* CS2~ output enable bit 				*/
+	 unsigned char	CS3 :1;  /* CS3~ output enable bit 				*/
+	 unsigned char	CS0W:1;  /* CS0~ wait bit 						*/
+	 unsigned char	CS1W:1;  /* CS1~ wait bit 						*/
+	 unsigned char	CS2W:1;  /* CS2~ wait bit 						*/
+	 unsigned char	CS3W:1;  /* CS3~ wait bit 						*/
+   } BIT;   		         /*        						    	*/
+	 unsigned char BYTE;     /* Byte Access 						*/
+};                           /* Chip select control register		*/
+
+/*------------------------------------------------------
+    Address match interrupt enable register //0x0009
+------------------------------------------------------*/
+union st_aier {               /* union AIER    	   					*/
+   struct {              	  /* Bit  Access 		   				*/
+	 unsigned char 	AIER0:1;  /* Address match interrupt0 enable bit*/
+	 unsigned char 	AIER1:1;  /* Address match interrupt1 enable bit*/
+	 unsigned char 		 :1;  /* Nothing assigned 					*/
+	 unsigned char 		 :1;  /* Nothing assigned 					*/
+	 unsigned char 		 :1;  /* Nothing assigned  					*/
+	 unsigned char 		 :1;  /* Nothing assigned  					*/
+	 unsigned char 	 	 :1;  /* Nothing assigned 					*/
+	 unsigned char 		 :1;  /* Nothing assigned  					*/
+   } BIT;   		      	  /*       						    	*/
+	 unsigned char BYTE;      /* Byte Access 						*/
+};                            /* Address match interrupt enable register	*/
+
+
+/*------------------------------------------------------
+   Protect register //0x000A
+-----------------------------------------------------*/
+union st_prcr {               /* union PRCR    	   					*/
+   struct {              	  /* Bit  Access 		   				*/
+	 unsigned char 	PRC0:1;   /* Enables writing to system clock control registers 0 & 1 */
+	 unsigned char 	PRC1:1;   /* Enables writing to processor mode registers 0 & 1 */
+	 unsigned char 	PRC2:1;   /* Enables writing to port P9 direction register & SI/Oi control register(i=3,4)*/
+	 unsigned char 	PRC3:1;   /* Enable writting to Power supply detection register 2 and Power supply down detection register */
+	 unsigned char 		:1;   /* Nothing assigned  					*/
+	 unsigned char 		:1;   /* Nothing assigned  					*/
+	 unsigned char 	 	:1;   /* Nothing assigned 					*/
+	 unsigned char 		:1;   /* Nothing assigned  					*/
+   } BIT;   		      	  /*       						    	*/
+	 unsigned char BYTE;      /* Byte Access 						*/
+};                            /* Protect register					*/
+
+/*------------------------------------------------------
+	Data bank register //0x000B
+------------------------------------------------------*/
+union st_dbr {                /* union DBR   	   					*/
+   struct {              	  /* Bit  Access 		   				*/
+	 unsigned char 	    :1;   /* Nothing assigned  					*/
+	 unsigned char 	    :1;   /* Nothing assigned  					*/
+	 unsigned char 	OFS :1;   /* Offset bit                         */
+	 unsigned char 	BSR0:1;   /* Bank select bit 0                  */
+	 unsigned char 	BSR1:1;   /* Bank select bit 1                  */
+	 unsigned char 	BSR2:1;   /* Bank select bit 2                  */
+	 unsigned char 	 	:1;   /* Nothing assigned 					*/
+	 unsigned char 		:1;   /* Nothing assigned  					*/
+   } BIT;   		      	  /*       						    	*/
+	 unsigned char BYTE;      /* Data bank register						*/
+};
+
+/*------------------------------------------------------
+	Oscillation stop detection register //0x000C
+------------------------------------------------------*/
+union st_cm2 {                /* union CM2  	   					 */
+   struct {              	  /* Bit  Access 		   				 */
+	 unsigned char 	CM2_0:1;   /* Oscillation stop detection bit     */
+	 unsigned char 	CM2_1:1;   /* Main clock switch bit              */
+	 unsigned char 	CM2_2:1;   /* Oscillation stop detection status  */
+	 unsigned char 	CM2_3:1;   /* Clock monitor bit                  */
+	 unsigned char 	     :1;   /* Nothing assigned                   */
+	 unsigned char 	     :1;   /* Nothing assigned                   */
+	 unsigned char 	 	 :1;   /* Nothing assigned 					 */
+	 unsigned char 	CM2_7:1;   /* Operation select bit(when an oscillation stop is detected) */
+   } BIT;   		      	   /*       						    	*/
+	 unsigned char BYTE;      /* Oscillation stop detection register						*/
+};
+
+/*------------------------------------------------------
+   Watchdog timer control register //0x000f
+-----------------------------------------------------*/
+union st_wdc {               /* union WDC    	   					*/
+   struct {             	 /* Bit  Access 		   				*/
+     unsigned char 	 B0:1; 	 /* High-order bit of watchdog timer	*/
+     unsigned char 	 B1:1; 	 /* High-order bit of watchdog timer	*/
+     unsigned char 	 B2:1; 	 /* High-order bit of watchdog timer	*/
+     unsigned char 	 B3:1;   /* High-order bit of watchdog timer	*/
+     unsigned char 	 B4:1; 	 /* High-order bit of watchdog timer	*/
+     unsigned char WDC5:1; 	 /* Cold start / warm start discrimination flag */
+     unsigned char 	 B6:1; 	 /* Reserved bit, must always be 0		*/
+     unsigned char WDC7:1;   /* Prescaler select bit				*/
+   } BIT;   		    	 /*        						    	*/
+     unsigned char BYTE;     /*  Byte Access 						*/
+};                           /* Watchdog timer control register     */
+
+/*------------------------------------------------------
+   Address match interrupt register 0 //0x0010
+-----------------------------------------------------*/
+union st_rmad0 {
+   struct{
+	unsigned char RMAD0L;     /* Address match interrupt register 0 low  8 bit */
+	unsigned char RMAD0M;     /* Address match interrupt register 0 mid  8 bit */
+	unsigned char RMAD0H;     /* Address match interrupt register 0 high 8 bit */
+	unsigned char NC;         /* non use 									   */
+   } BYTE;					  /* Byte access								   */
+	unsigned long   DWORD;	  /*	Word Access								   */
+};							  /* Address match interrupt register 0 32 bit 	   */
+
+/*------------------------------------------------------
+   Address match interrupt register 1 //0x0014
+-----------------------------------------------------*/
+union st_rmad1 {
+   struct{
+	unsigned char RMAD1L;     /* Address match interrupt register 1 low  8 bit */
+	unsigned char RMAD1M;     /* Address match interrupt register 1 mid  8 bit */
+	unsigned char RMAD1H;     /* Address match interrupt register 1 high 8 bit */
+	unsigned char NC;         /* non use 									   */
+   } BYTE;					  /* Byte access								   */
+   unsigned long   DWORD;	  /*	Word Access								   */
+};							  /* Address match interrupt register 1 32 bit 	   */
+
+/*------------------------------------------------------
+   Voltage Detection Register 1 //0x0019
+-----------------------------------------------------*/
+union st_vcr1 {               /* union VCR1    	   					*/
+   struct {             	 /* Bit  Access 		   				*/
+     unsigned char 	  B0:1;	 /* Reserved bit,must be 0          	*/
+     unsigned char 	  B1:1;	 /* Reserved bit,must be 0          	*/
+     unsigned char 	  B2:1;	 /* Reserved bit,must be 0          	*/
+     unsigned char VC1_3:1;  /* Voltage down monitor flag           */
+     unsigned char 	  B4:1;  /* Reserved bit,must be 0	            */
+     unsigned char    B5:1;  /* Reserved bit,must be 0              */
+     unsigned char 	  B6:1;  /* Reserved bit, must always be 0		*/
+     unsigned char    B7:1;  /* Reserved bit,must be 0				*/
+   } BIT;   		    	 /*        						    	*/
+     unsigned char BYTE;     /*  Byte Access 						*/
+};                           /* Voltage Detection Register 1     */
+
+/*------------------------------------------------------
+   Voltage Detection Register 2 //0x001A
+-----------------------------------------------------*/
+union st_vcr2 {               /* union VCR2    	   					*/
+   struct {             	 /* Bit  Access 		   				*/
+     unsigned char 	  B0:1;	 /* Reserved bit,must be 0          	*/
+     unsigned char 	  B1:1;	 /* Reserved bit,must be 0          	*/
+     unsigned char 	  B2:1;	 /* Reserved bit,must be 0          	*/
+     unsigned char    B3:1;  /* Reserved bit,must be 0           */
+     unsigned char 	  B4:1;  /* Reserved bit,must be 0	            */
+     unsigned char    B5:1;  /* Reserved bit,must be 0              */
+     unsigned char VC2_6:1;  /* Reset area monitor bit		*/
+     unsigned char VC2_7:1;  /* Voltage down monitor bit			*/
+   } BIT;   		    	 /*        						    	*/
+     unsigned char BYTE;     /*  Byte Access 						*/
+};                           /* Voltage Detection Register 1     */
+
+/*------------------------------------------------------
+   Chip select expansion control register//0x001B
+-----------------------------------------------------*/
+union st_cse {               /* union CSE    	   					*/
+   struct {             	 /* Bit  Access 		   				*/
+     unsigned char CSE00W:1; /* CS0~ wait expansion bit */
+     unsigned char CSE01W:1; /* CS0~ wait expansion bit */
+     unsigned char CSE10W:1; /* CS1~ wait expansion bit */
+     unsigned char CSE11W:1; /* CS1~ wait expansion bit */
+     unsigned char CSE20W:1; /* CS2~ wait expansion bit */
+     unsigned char CSE21W:1; /* CS2~ wait expansion bit */
+     unsigned char CSE30W:1; /* CS3~ wait expansion bit */
+     unsigned char CSE31W:1; /* CS3~ wait expansion bit */
+   } BIT;   		    	 /*        						    	*/
+     unsigned char BYTE;     /*  Byte Access 						*/
+};                           /* Chip select expansion control register    */
+
+/*------------------------------------------------------
+   PLL control register 0 //0x001C
+-----------------------------------------------------*/
+union st_plc0 {               /* union      	   					*/
+   struct {             	 /* Bit  Access 		   				*/
+     unsigned char PLC00:1; /* Programmable counter select bit */
+     unsigned char PLC01:1; /* Programmable counter select bit */
+     unsigned char PLC02:1; /* Programmable counter select bit */
+     unsigned char      :1; /* Nothing assigned */
+     unsigned char      :1; /* Reserved bit,set to one */
+     unsigned char      :1; /* Reserved bit,set to zero */
+     unsigned char      :1; /* Reserved bit,set to zero */
+     unsigned char PLC07:1; /* Operation enable bit */
+   } BIT;   		    	 /*        						    	*/
+     unsigned char BYTE;     /*  Byte Access 						*/
+};                           /* PLL control register 0    */
+
+/*------------------------------------------------------
+   Processor mode register 2 //0x001E
+-----------------------------------------------------*/
+union st_pm2 {               /* union      	   					                   */
+   struct {             	 /* Bit  Access 		   				               */
+     unsigned char PM2_0:1; /* Specifying wait when accessing SFR at PLL operation */
+     unsigned char PM2_1:1; /* System clock protective bit */
+     unsigned char PM2_2:1; /* WDT count source protective bit */
+     unsigned char      :1; /* Reserved bit,set to zero */
+     unsigned char      :1; /* Reserved bit,set to zero */
+     unsigned char      :1; /* Nothing assigned */
+     unsigned char      :1; /* Nothing assigned */
+     unsigned char      :1; /* Nothing assigned */
+   } BIT;   		    	 /*        						    	*/
+     unsigned char BYTE;     /*  Byte Access 						*/
+};                           /* Processor mode register 2    */
+
+/*------------------------------------------------------
+   Power supply down detection register //0x001F
+-----------------------------------------------------*/
+union st_d4int {               /* union      	   					                   */
+   struct {             	 /* Bit  Access 		   				               */
+     unsigned char D40:1; /* Power supply down detection interrupt enable bit */
+     unsigned char D41:1; /* STOP mode deactivation control bit */
+     unsigned char D42:1; /* Power supply change detection flag */
+     unsigned char D43:1; /* WDT overflow detect flag */
+     unsigned char DF0:1; /* Sampling clock select bit */
+     unsigned char DF1:1; /* Sampling clock select bit */
+     unsigned char    :1; /* Nothing assigned */
+     unsigned char    :1; /* Nothing assigned */
+   } BIT;   		    	 /*        						    	*/
+     unsigned char BYTE;     /*  Byte Access 						*/
+};                           /* Power supply down detection register   */
+
+/*------------------------------------------------------
+   DMA0 source pointer //0x0020
+-----------------------------------------------------*/
+union st_sar0 {
+   struct{
+	unsigned char SAR01;     /* DMA0 source pointer low  8 bit 				 */
+	unsigned char SAR0M;     /* DMA0 source pointer mid  8 bit 				 */
+	unsigned char SAR0H;     /* DMA0 source pointer high 8 bit 				 */
+	unsigned char NC;        /* non use 									 */
+   } BYTE;				 	 /* Byte access									 */
+   unsigned long   DWORD;	 /*	Word Access									 */
+};							 /* DMA0 source pointer 32 bit				 	 */
+
+/*------------------------------------------------------
+   DMA1 source pointer //0x0030
+-----------------------------------------------------*/
+union st_sar1 {
+   struct{
+	unsigned char SAR11;     /* DMA1 source pointer low  8 bit 				 */
+	unsigned char SAR1M;     /* DMA1 source pointer mid  8 bit 				 */
+	unsigned char SAR1H;     /* DMA1 source pointer high 8 bit 				 */
+	unsigned char NC;        /* non use 									 */
+   } BYTE;					 /* Byte access									 */
+   unsigned long   DWORD;	 /* Word Access									 */
+};					         /* DMA1 source pointer 32 bit				 	 */
+
+/*------------------------------------------------------
+   DMA0 destination pointer //0x0024
+-----------------------------------------------------*/
+union st_dar0 {				 /* DMA0 destination pointer 32 bit	   			 */
+   struct{
+	unsigned char DAR0L;     /* DMA0 destination pointer low  8 bit  		 */
+	unsigned char DAR0M;     /* DMA0 destination pointer mid  8 bit     	 */
+	unsigned char DAR0H;     /* DMA0 destination pointer high 8 bit  		 */
+	unsigned char NC;        /* non use 							   		 */
+   } BYTE;					 /* Byte access						   			 */
+    unsigned long DWORD;	 /* Word Access						   			 */
+};
+
+/*------------------------------------------------------
+  DMA1 destination pointer //0x0034
+-----------------------------------------------------*/
+union st_dar1 {				  /* DMA1 destination pointer 32 bit			 */
+   struct{
+	unsigned char DAR1L;     /* DMA1 destination pointer low  8 bit			 */
+	unsigned char DAR1M;     /* DMA1 destination pointer mid  8 bit			 */
+	unsigned char DAR1H;     /* DMA1 destination pointer high 8 bit			 */
+	unsigned char NC;        /* non use 									 */
+   } BYTE;					 /* Byte access									 */
+   unsigned long   DWORD;	 /* Word Access									 */
+};
+
+/*------------------------------------------------------
+  DMA0 transfer counter //0x0028
+-----------------------------------------------------*/
+union st_tcr0 {			  	 /* DMA0 transfer counter 16 bit 	 			 */
+   struct{
+	unsigned char TCR0L;     /* DMA0 transfer counter low  8 bit 			 */
+	unsigned char TCR0H;     /* DMA0 transfer counter high 8 bit 			 */
+   } BYTE;					 /* Byte access					     			 */
+   unsigned short   WORD;	 /* Word Access					     			 */
+};
+
+/*------------------------------------------------------
+  DMA1 transfer counter //0x0038
+-----------------------------------------------------*/
+union st_tcr1 {				  /* DMA1 transfer counter 16 bit 	   			 */
+   struct{
+	unsigned char TCR1L;     /* DMA1 transfer counter low  8 bit   			 */
+	unsigned char TCR1H;     /* DMA1 transfer counter high 8 bit   			 */
+   } BYTE;					 /* Byte access					       			 */
+   unsigned short WORD;	     /* Word Access					       			 */
+};
+
+/*------------------------------------------------------
+    DMA0 control register //0x002c
+------------------------------------------------------*/
+union st_dm0con {		       /* DMA0 control register				*/
+   struct{
+     unsigned char    DMBIT:1; /* Transfer unit bit select bit 				*/
+     unsigned char    DMASL:1; /* Repeat transfer mode select bit 			*/
+     unsigned char    DMAS :1; /* DMA request bit 							*/
+     unsigned char    DMAE :1; /* DMA enable bit 							*/
+     unsigned char    DSD  :1; /* Source address direction select bit   	*/
+     unsigned char    DAD  :1; /* Destination address direction select bit  */
+     unsigned char    	   :1;
+     unsigned char         :1;
+   }BIT;
+    unsigned char  BYTE;
+};
+
+/*------------------------------------------------------
+    DMA1 control register //0x003c
+------------------------------------------------------*/
+union st_dm1con {		/*    DMA1 control register union */
+    struct{
+     unsigned char    DMBIT:1; /* Transfer unit bit select bit 				*/
+     unsigned char    DMASL:1; /* Repeat transfer mode select bit 			*/
+     unsigned char    DMAS :1; /* DMA request bit 							*/
+     unsigned char    DMAE :1; /* DMA enable bit 							*/
+     unsigned char    DSD  :1; /* Source address direction select bit  		*/
+     unsigned char    DAD  :1; /* Destination address direction select bit  */
+     unsigned char    	   :1; /*Nothing assigned */
+     unsigned char         :1; /*Nothing assigned */
+    }BIT;
+    unsigned char  BYTE;
+};
+
+union st_icr {		     	   /*    interrupt control registers	  */
+    struct{
+     unsigned char    ILVL0:1; /* Interrupt priority level select bit */
+     unsigned char    ILVL1:1; /* Interrupt priority level select bit */
+     unsigned char    ILVL2:1; /* Interrupt priority level select bit */
+     unsigned char    IR   :1; /* Interrupt request bit 			  */
+     unsigned char    POL  :1; /* Polarity select bit 				  */
+     unsigned char         :1; /* Reserved bit, set to 0              */
+     unsigned char    	   :1; /* Nothing assigned					  */
+     unsigned char         :1; /* Nothing assigned					  */
+    }BIT;
+    unsigned char    BYTE;
+};
+
+union st_icr1 {		     	   /*    interrupt control registers	  */
+    struct{
+     unsigned char    ILVL0:1; /* Interrupt priority level select bit */
+     unsigned char    ILVL1:1; /* Interrupt priority level select bit */
+     unsigned char    ILVL2:1; /* Interrupt priority level select bit */
+     unsigned char    IR   :1; /* Interrupt request bit 			  */
+     unsigned char         :1; /* Nothing assigned					  */
+     unsigned char         :1; /* Nothing assigned					  */
+     unsigned char    	   :1; /* Nothing assigned					  */
+     unsigned char         :1; /* Nothing assigned					  */
+    }BIT;
+    unsigned char    BYTE;
+};
+
+/*------------------------------------------------------
+     bcnic //0x004a
+------------------------------------------------------*/
+union st_bcnic {					/*    interrupt control registers*/
+    struct{
+     unsigned char    ILVL0_BCNIC:1;/* Interrupt priority level select bit */
+     unsigned char    ILVL1_BCNIC:1;/* Interrupt priority level select bit */
+     unsigned char    ILVL2_BCNIC:1;/* Interrupt priority level select bit */
+     unsigned char    IR_BCNIC   :1;/* Interrupt request bit */
+     unsigned char    		     :1;
+     unsigned char               :1;
+     unsigned char               :1;
+     unsigned char               :1;
+    }BIT;
+    unsigned char    BYTE;
+};
+
+/*------------------------------------------------------
+     dm0ic //0x004b
+------------------------------------------------------*/
+union st_dm0ic {					/*    interrupt control registers*/
+    struct{
+     unsigned char    ILVL0_DM0IC:1;/* Interrupt priority level select bit */
+     unsigned char    ILVL1_DM0IC:1;/* Interrupt priority level select bit */
+     unsigned char    ILVL2_DM0IC:1;/* Interrupt priority level select bit */
+     unsigned char    IR_DM0IC   :1;/* Interrupt request bit			   */
+     unsigned char    		     :1;
+     unsigned char               :1;
+     unsigned char               :1;
+     unsigned char               :1;
+    }BIT;
+    unsigned char    BYTE;
+};
+
+/*------------------------------------------------------
+    Flash identification register //0x01b4
+------------------------------------------------------*/
+union st_fidr {		           /*    Flash identification register         */
+    struct{
+     unsigned char    FIDR0:1; /* Flash identification value */
+     unsigned char    FIDR1:1; /* Flash identification value */
+     unsigned char         :1; /* Nothing assigned							*/
+     unsigned char         :1; /* Nothing assigned							*/
+     unsigned char         :1; /* Nothing assigned                  		*/
+     unsigned char         :1; /* Nothing assigned                          */
+     unsigned char    	   :1; /* Nothing assigned */
+     unsigned char         :1; /* Nothing assigned */
+    }BIT;
+    unsigned char  BYTE;
+};
+
+/*------------------------------------------------------
+    Flash memory control register 1 //0x01b5
+------------------------------------------------------*/
+union st_fmr1 {		           /*    Flash identification register         */
+    struct{
+     unsigned char         :1; /* Reserved bit   */
+     unsigned char    FMR11:1; /* EW1 mode select bit */
+     unsigned char         :1; /* Reserved bit   */
+     unsigned char         :1; /* Reserved bit   */
+     unsigned char         :1; /* Reserved bit	*/
+     unsigned char         :1; /* Reserved bit    */
+     unsigned char    FMR16:1; /* Lock bit status flag */
+     unsigned char         :1; /* Reserved bit   */
+    }BIT;
+    unsigned char  BYTE;
+};
+
+/*------------------------------------------------------
+    Flash memory control register 0 //0x01b7
+------------------------------------------------------*/
+union st_fmr0 {		           /*    Flash identification register         */
+    struct{
+     unsigned char    FMR00:1; /* RY/BY~ status flag */
+     unsigned char    FMR01:1; /* EW0 mode select bit */
+     unsigned char    FMR02:1; /* Lock bit disable bit */
+     unsigned char    FMSTP:1; /* Flash memory stop bit */
+     unsigned char         :1; /* Reserved bit	*/
+     unsigned char    FMR05:1; /* User ROM area select bit */
+     unsigned char    FMR06:1; /* Program status flag */
+     unsigned char    FMR07:1; /* Erase status flag */
+    }BIT;
+    unsigned char  BYTE;
+};
+
+/*------------------------------------------------------
+   Address match interrupt register 2 //0x01b8
+-----------------------------------------------------*/
+union st_rmad2 {
+   struct{
+	unsigned char RMAD2L;     /* Address match interrupt register 2 low  8 bit */
+	unsigned char RMAD2M;     /* Address match interrupt register 2 mid  8 bit */
+	unsigned char RMAD2H;     /* Address match interrupt register 2 high 8 bit */
+	unsigned char NC;         /* non use 									   */
+   } BYTE;					  /* Byte access								   */
+   unsigned long   DWORD;	  /*	Word Access								   */
+};							  /* Address match interrupt register 2 32 bit 	   */
+
+
+/*------------------------------------------------------
+    Address match interrupt enable register 2 //0x01bb
+------------------------------------------------------*/
+union st_aier2 {		           /* Address match interrupt enable register 2        */
+    struct{
+     unsigned char    AIER20:1; /* Address match interrupt 2 enable bit */
+     unsigned char    AIER21:1; /* Address match interrupt 3 enable bit */
+     unsigned char          :1; /* Nothing assigned */
+     unsigned char          :1; /* Nothing assigned */
+     unsigned char          :1; /* Nothing assigned	*/
+     unsigned char          :1; /* Nothing assigned */
+     unsigned char          :1; /* Nothing assigned */
+     unsigned char          :1; /* Nothing assigned */
+    }BIT;
+    unsigned char  BYTE;
+};
+
+/*------------------------------------------------------
+   Address match interrupt register 3 //0x01bc
+-----------------------------------------------------*/
+union st_rmad3 {
+   struct{
+	unsigned char RMAD3L;     /* Address match interrupt register 3 low  8 bit */
+	unsigned char RMAD3M;     /* Address match interrupt register 3 mid  8 bit */
+	unsigned char RMAD3H;     /* Address match interrupt register 3 high 8 bit */
+	unsigned char NC;         /* non use 									   */
+   } BYTE;					  /* Byte access								   */
+   unsigned long   DWORD;	  /*	Word Access								   */
+};							  /* Address match interrupt register 3 32 bit 	   */
+
+/*------------------------------------------------------
+    Peripheral clock select register //0x025e
+------------------------------------------------------*/
+union st_pclkr {		           /* Peripheral clock select register        */
+    struct{
+     unsigned char    PCLK0 :1; /* TimerA,B clock select bit */
+     unsigned char    PCLK1 :1; /* SI/O clock select bit */
+     unsigned char          :1; /* Reserved bit,set to 0 */
+     unsigned char          :1; /* Reserved bit,set to 0 */
+     unsigned char          :1; /* Reserved bit,set to 0	*/
+     unsigned char          :1; /* Reserved bit,set to 0 */
+     unsigned char          :1; /* Reserved bit,set to 0 */
+     unsigned char          :1; /* Reserved bit,set to 0 */
+    }BIT;
+    unsigned char  BYTE;
+};
+
+/*------------------------------------------------------
+    Timer B3,4,5 Count start flag //0x0340
+------------------------------------------------------*/
+union st_tbsr {              /* union tbsr    	   					*/
+	struct {                 /* Bit  Access 		   				*/
+	 unsigned char 		:1;  /* Nothing Assigned					*/
+	 unsigned char 		:1;  /* Nothing Assigned					*/
+	 unsigned char 		:1;  /* Nothing Assigned					*/
+	 unsigned char 		:1;  /* Nothing Assigned					*/
+	 unsigned char 		:1;  /* Nothing Assigned					*/
+	 unsigned char 	TB3S:1;  /* Timer B3 count start flag 			*/
+	 unsigned char 	TB4S:1;  /* Timer B4 count start flag 			*/
+	 unsigned char 	TB5S:1;  /* Timer B5 count start flag 			*/
+	} BIT;   		         /*        						    	*/
+	unsigned  char BYTE;     /*  Byte Access 						*/
+};                           /* Timer B3,4,5 Count start flag       */
+
+/*------------------------------------------------------
+   Three-phase PWM control regester 0 //0x0348
+------------------------------------------------------*/
+union st_invc0 {            /* union invc0 	   						*/
+	struct {            	/* Bit  Access 		   					*/
+	 unsigned char 	INV00:1;/* Effective interrupt output polarity select bit */
+	 unsigned char 	INV01:1;/* Effective interrupt output specification bit */
+	 unsigned char 	INV02:1;/* Mode select bit 						*/
+	 unsigned char 	INV03:1;/* Output control bit 					*/
+	 unsigned char 	INV04:1;/* Positive and negative phases concurrent L output disable function enable bit */
+	 unsigned char 	INV05:1;/* Positive and negative phases concurrent L output detect flag */
+	 unsigned char 	INV06:1;/* Modulation mode select bit 			*/
+	 unsigned char 	INV07:1;/* Software trigger bit 				*/
+	} BIT;   		     	/*        						    	*/
+	 unsigned char BYTE;    /*  Byte Access 						*/
+};                          /* 						            	*/
+
+/*------------------------------------------------------
+    Three-phase PWM control regester 1 //0x0349
+------------------------------------------------------*/
+union st_invc1 {            /* union invc1 	   							*/
+	struct {            	/* Bit  Access 		   						*/
+	 unsigned char 	INV10:1;/* Timer Ai start trigger signal select bit */
+	 unsigned char 	INV11:1;/* Timer A1-1,A2-1,A4-1 control bit 		*/
+	 unsigned char 	INV12:1;/* Short circuit timer count source select bit*/
+	 unsigned char 		 :1;/* Nothing Assigned							*/
+	 unsigned char 		 :1;/* Reserved bit (always 0)					*/
+	 unsigned char 		 :1;/* Nothing Assigned							*/
+	 unsigned char 	 	 :1;/* Nothing Assigned							*/
+	 unsigned char 		 :1;/* Nothing Assigned							*/
+	} BIT;   		     	/*        						    		*/
+	unsigned char BYTE;     /*  Byte Access 							*/
+};                          /* 						            		*/
+
+/*------------------------------------------------------
+    Three-phase output buffer register 0 //0x034a
+------------------------------------------------------*/
+union st_idb0 {            /* union idb0 	   						*/
+	struct {           	   /* Bit  Access 		   					*/
+	 unsigned char 	DU0 :1;/* U  phase output buffer 0 				*/
+	 unsigned char 	DUB0:1;/* U~ phase output buffer 0 				*/
+	 unsigned char 	DV0 :1;/* V  phase output buffer 0 				*/
+	 unsigned char 	DVB0:1;/* V~ phase output buffer 0 				*/
+	 unsigned char 	DW0 :1;/* W  phase output buffer 0 				*/
+	 unsigned char 	DWB0:1;/* W~ phase output buffer 0 				*/
+	 unsigned char 		:1;/* Nothing Assigned						*/
+	 unsigned char 		:1;/* Nothing Assigned						*/
+	} BIT;   		   	   /*        						    	*/
+	unsigned char BYTE;    /*  Byte Access 							*/
+};                         /* 						            	*/
+
+/*------------------------------------------------------
+    Three-phase output buffer register 1 //0x034b
+------------------------------------------------------*/
+union st_idb1 {            /* union idb1 	   						*/
+	struct {	           /* Bit  Access 		   					*/
+	 unsigned char 	DU1 :1;/* U  phase output buffer 1				*/
+	 unsigned char	DUB1:1;/* U~ phase output buffer 1 				*/
+	 unsigned char	DV1 :1;/* V  phase output buffer 1 				*/
+	 unsigned char	DVB1:1;/* V~ phase output buffer 1 				*/
+	 unsigned char	DW1 :1;/* W  phase output buffer 1 				*/
+	 unsigned char	DWB1:1;/* W~ phase output buffer 1 				*/
+	 unsigned char		:1;/* Nothing Assigned						*/
+	 unsigned char		:1;/* Nothing Assigned						*/
+	} BIT;  	 		   /*        						    	*/
+	unsigned char BYTE;    /*  Byte Access 							*/
+};                         /* 						            	*/
+
+/*----------------------------------------------------------------------------------
+   Timer mode registers  //0x035b,0x035c,0x035d,0x0396,
+                           0x0397,0x0398,0x0399,0x039a,0x039b,0x039c
+---------------------------------------------------------------------------------*/
+union st_tmr {               /* union tmr    	   					*/
+	struct {             	 /* Bit  Access 		   				*/
+	 unsigned char 	TMOD0:1; /* Operation mode select bit 			*/
+	 unsigned char	TMOD1:1; /* Operation mode select bit 			*/
+	 unsigned char	MR0	 :1; /* Pulse output function select bit	*/
+	 unsigned char	MR1  :1; /* External trigger select bit			*/
+	 unsigned char	MR2  :1; /* Trigger select bit					*/
+	 unsigned char	MR3  :1; /* Must always be "0" in one-shot timer*/
+	 unsigned char	TCK0 :1; /* Count source select bit 			*/
+	 unsigned char	TCK1 :1; /* Count source select bit 			*/
+	} BIT;   		     	 /*       						    	*/
+	unsigned char BYTE;      /*  Byte Access 						*/
+};
+
+/*------------------------------------------------------
+   Interrupt request cause select register 2  //0x035e
+------------------------------------------------------*/
+union st_ifsr2a {               /* union ifsr2a   	   					*/
+	struct {             	 /* Bit  Access 				*/
+	 unsigned char 	      :1; /* Nothing assigned			*/
+	 unsigned char	      :1; /* Nothing assigned 			*/
+	 unsigned char	      :1; /* Nothing assigned    		*/
+	 unsigned char	      :1; /* Nothing assigned			*/
+	 unsigned char	      :1; /* Nothing assigned			*/
+	 unsigned char	      :1; /* Nothing assigned            */
+	 unsigned char IFSR26 :1; /* Interrupt request cause select bit */
+	 unsigned char IFSR27 :1; /* Interrupt request cause select bit */
+	} BIT;   		     	 /*       						    	*/
+	unsigned char BYTE;      /*  Byte Access 						*/
+};
+
+/*------------------------------------------------------
+Interrupt request cause select register //0x035f
+-----------------------------------------------------*/
+union st_ifsr {              /* union IFSR    	   						*/
+	struct {             	 /* Bit  Access 		   					*/
+	 unsigned char 	IFSR0:1; /* INT0~ interrupt polarity switching bit  */
+	 unsigned char	IFSR1:1; /* INT1~ interrupt polarity switching bit  */
+	 unsigned char	IFSR2:1; /* INT2~ interrupt polarity switching bit  */
+	 unsigned char	IFSR3:1; /* INT3~ interrupt polarity switching bit  */
+	 unsigned char	IFSR4:1; /* INT4~ interrupt polarity switching bit  */
+	 unsigned char	IFSR5:1; /* INT5~ interrupt polarity switching bit  */
+	 unsigned char	IFSR6:1; /* Interrupt request cause select bit 		*/
+	 unsigned char	IFSR7:1; /* Interrupt request cause select bit 		*/
+	} BIT;   		     	 /*        						    		*/
+	unsigned char BYTE;      /*  Byte Access 							*/
+};                           /* 						            	*/
+
+/*------------------------------------------------------
+   SI/O4 control registers //0x0360
+------------------------------------------------------*/
+union st_s4c {              /* union S4C    	   						*/
+	struct {   		        /* Bit  Access 		   						*/
+	 unsigned char 	SM40:1; /* Internal synchronous clock select bit */
+	 unsigned char	SM41:1; /* Internal synchronous clock select bit */
+	 unsigned char	SM42:1; /* Sout4 output disable bit */
+	 unsigned char	SM43:1; /* SI/O4 port select bit */
+	 unsigned char	SM44:1; /* CLK polarity select bit */
+	 unsigned char	SM45:1; /* Transfer direction select bit */
+	 unsigned char	SM46:1; /* Synchronous clock select bit */
+	 unsigned char	SM47:1; /* Sout4 initial value set bit */
+	} BIT;   		    	/*        						    		*/
+	unsigned char BYTE;     /*  Byte Access 							*/
+};
+
+/*------------------------------------------------------
+   SI/O3 control registers //0x0362
+------------------------------------------------------*/
+union st_s3c {              /* union S3C    	   						*/
+	struct {            	/* Bit  Access 		   						*/
+	 unsigned char 	SM30:1; /* Internal synchronous clock select bit */
+	 unsigned char	SM31:1; /* Internal synchronous clock select bit */
+	 unsigned char	SM32:1; /* Sout3 output disable bit */
+	 unsigned char	SM33:1; /* SI/O3 port select bit */
+	 unsigned char	SM34:1;	/* CLK polarity select bit */
+	 unsigned char	SM35:1; /* Transfer direction select bit */
+	 unsigned char	SM36:1; /* Synchronous clock select bit */
+	 unsigned char	SM37:1; /* Sout3 initial value set bit */
+	} BIT;   		   		/*        						    		*/
+	unsigned char BYTE;     /*  Byte Access 							*/
+};                          /* 						            		*/
+
+/*------------------------------------------------------
+   UART0 special mode register 4 //0x036c
+------------------------------------------------------*/
+union st_u0smr4 {              /* union u0smr4  	   						*/
+	struct {            	   /* Bit  Access 		   						*/
+	 unsigned char 	STAREQ :1; /* Start condition generate bit   */
+	 unsigned char	RSTAREQ:1; /* Restart condition generate bit */
+	 unsigned char	STPREQ :1; /* Stop condition generate bit    */
+	 unsigned char	STSPSEL:1; /* SCL,SDA output select bit      */
+	 unsigned char	ACKD   :1; /* ACK data bit                   */
+	 unsigned char	ACKC   :1; /* ACK data output enable bit     */
+	 unsigned char	SCLHI  :1; /* SCL output stop enable bit     */
+	 unsigned char	SWC9   :1; /* Final bit L hold enable bit    */
+	} BIT;   		   		/*        						    		*/
+	unsigned char BYTE;     /*  Byte Access 							*/
+};                          /* 						            		*/
+
+/*------------------------------------------------------
+   UART0 special mode register 3 //0x036d
+------------------------------------------------------*/
+union st_u0smr3 {              /* union u0smr3  	   						*/
+	struct {            	   /* Bit  Access 		   						*/
+	 unsigned char 	       :1; /* Nothing is assigned                */
+	 unsigned char	CKPH   :1; /* Clock phase set bit                */
+	 unsigned char	       :1; /* Nothing is assigned                */
+	 unsigned char	NODC   :1; /* Clock output set bit               */
+	 unsigned char	       :1; /* Nothing is assigned                */
+	 unsigned char	DL0    :1; /* SDA0(TxD0) digital delay setup bit */
+	 unsigned char	DL1    :1; /* SDA0(TxD0) digital delay setup bit */
+	 unsigned char	DL2    :1; /* SDA0(TxD0) digital delay setup bit */
+	} BIT;   		   		   /*        						     */
+	unsigned char BYTE;        /*  Byte Access 						 */
+};                             /* 						             */
+
+/*------------------------------------------------------
+   UART0 special mode register 2 //0x036e
+------------------------------------------------------*/
+union st_u0smr2 {              /* union u0smr2  	   						*/
+	struct {            	   /* Bit  Access 		   						*/
+	 unsigned char 	IICM2 :1; /* IIC mode selection bit 2 */
+	 unsigned char	CSC   :1; /* Clock-synchronous bit    */
+	 unsigned char	SWC   :1; /* SCL wait output bit      */
+	 unsigned char	ALS   :1; /* SDA output stop bit      */
+	 unsigned char	STAC  :1; /* UART0 initialization bit */
+	 unsigned char	SWC2  :1; /* SCL wait output bit 2    */
+	 unsigned char	SDHI  :1; /* SDA output disable bit   */
+	 unsigned char	      :1; /* Nothing is assigned      */
+	} BIT;   		   		   /*        						     */
+	unsigned char BYTE;        /*  Byte Access 						 */
+};                             /* 						             */
+
+/*------------------------------------------------------
+   UART0 special mode register  //0x036f
+------------------------------------------------------*/
+union st_u0smr {              /* union u0smr  	   						*/
+	struct {            	   /* Bit  Access 		   						*/
+	 unsigned char 	IICM:1; /* IIC mode selection bit */
+	 unsigned char	ABC :1; /* Arbitration lost detecting flag control bit */
+	 unsigned char	BBS :1; /* Bus busy flag */
+	 unsigned char	    :1; /* Reserved bit,set to 0 */
+	 unsigned char	ABSC:1; /* Bus collision detect sampling clock select bit */
+	 unsigned char	ACSE:1; /* Auto clear function select bit of transmit enable bit */
+	 unsigned char	SSS :1; /* Transmit start condition select bit */
+	 unsigned char	    :1; /* Nothing is assigned      */
+	} BIT;   		   		   /*        						     */
+	unsigned char BYTE;        /*  Byte Access 						 */
+};                             /* 						             */
+
+/*------------------------------------------------------
+   UART1 special mode register 4 //0x0370
+------------------------------------------------------*/
+union st_u1smr4 {              /* union u1smr4  	   						*/
+	struct {            	   /* Bit  Access 		   						*/
+	 unsigned char 	STAREQ:1; /* Start condition generate bit */
+	 unsigned char	RSTARE:1; /* Restart condition generate bit */
+	 unsigned char	STPREQ:1; /* Stop condition generate bit */
+	 unsigned char	STSPSE:1; /* SCL,SDA output select bit */
+	 unsigned char	ACKD  :1; /* ACK data bit */
+	 unsigned char	ACKC  :1; /* ACK data output enable bit */
+	 unsigned char	SCLHI :1; /* SCL output stop enable bit */
+	 unsigned char	SWC9  :1; /* Final bit L hold enable bit */
+	} BIT;   		   		   /*        						     */
+	unsigned char BYTE;        /*  Byte Access 						 */
+};                             /* 						             */
+
+/*------------------------------------------------------
+   UART1 special mode register 3 //0x0371
+------------------------------------------------------*/
+union st_u1smr3 {              /* union u1smr3  	   						*/
+	struct {            	   /* Bit  Access 		   						*/
+	 unsigned char 	       :1; /* Nothing is assigned                */
+	 unsigned char	CKPH   :1; /* Clock phase set bit                */
+	 unsigned char	       :1; /* Nothing is assigned                */
+	 unsigned char	NODC   :1; /* Clock output set bit               */
+	 unsigned char	       :1; /* Nothing is assigned                */
+	 unsigned char	DL0    :1; /* SDA1(TxD1) digital delay setup bit */
+	 unsigned char	DL1    :1; /* SDA1(TxD1) digital delay setup bit */
+	 unsigned char	DL2    :1; /* SDA1(TxD1) digital delay setup bit */
+	} BIT;   		   		   /*        						     */
+	unsigned char BYTE;        /*  Byte Access 						 */
+};                             /* 						             */
+
+/*------------------------------------------------------
+   UART1 special mode register 2 //0x0372
+------------------------------------------------------*/
+union st_u1smr2 {              /* union u1smr2  	   						*/
+	struct {            	   /* Bit  Access 		   						*/
+	 unsigned char 	IICM2 :1; /* IIC mode selection bit 2 */
+	 unsigned char	CSC   :1; /* Clock-synchronous bit    */
+	 unsigned char	SWC   :1; /* SCL wait output bit      */
+	 unsigned char	ALS   :1; /* SDA output stop bit      */
+	 unsigned char	STAC  :1; /* UART0 initialization bit */
+	 unsigned char	SWC2  :1; /* SCL wait output bit 2    */
+	 unsigned char	SDHI  :1; /* SDA output disable bit   */
+	 unsigned char	      :1; /* Nothing is assigned      */
+	} BIT;   		   		   /*        						     */
+	unsigned char BYTE;        /*  Byte Access 						 */
+};                             /* 						             */
+
+/*------------------------------------------------------
+   UART1 special mode register  //0x0373
+------------------------------------------------------*/
+union st_u1smr {              /* union u1smr  	   						*/
+	struct {            	   /* Bit  Access 		   						*/
+	 unsigned char 	IICM:1; /* IIC mode selection bit */
+	 unsigned char	ABC :1; /* Arbitration lost detecting flag control bit */
+	 unsigned char	BBS :1; /* Bus busy flag */
+	 unsigned char	    :1; /* Reserved bit,set to 0 */
+	 unsigned char	ABSC:1; /* Bus collision detect sampling clock select bit */
+	 unsigned char	ACSE:1; /* Auto clear function select bit of transmit enable bit */
+	 unsigned char	SSS :1; /* Transmit start condition select bit */
+	 unsigned char	    :1; /* Nothing is assigned      */
+	} BIT;   		   		   /*        						     */
+	unsigned char BYTE;        /*  Byte Access 						 */
+};                             /* 						             */
+
+/*------------------------------------------------------
+   UART2 special mode register 4 //0x0374
+------------------------------------------------------*/
+union st_u2smr4 {              /* union u1smr4  	   						*/
+	struct {            	   /* Bit  Access 		   						*/
+	 unsigned char 	STAREQ:1; /* Start condition generate bit */
+	 unsigned char	RSTARE:1; /* Restart condition generate bit */
+	 unsigned char	STPREQ:1; /* Stop condition generate bit */
+	 unsigned char	STSPSE:1; /* SCL,SDA output select bit */
+	 unsigned char	ACKD  :1; /* ACK data bit */
+	 unsigned char	ACKC  :1; /* ACK data output enable bit */
+	 unsigned char	SCLHI :1; /* SCL output stop enable bit */
+	 unsigned char	SWC9  :1; /* Final bit L hold enable bit */
+	} BIT;   		   		   /*        						     */
+	unsigned char BYTE;        /*  Byte Access 						 */
+};                             /* 						             */
+
+/*------------------------------------------------------
+    UART2 special mode register 3 //0x0375
+------------------------------------------------------*/
+union st_u2smr3 {              /* union U2SMR3    	   					*/
+	struct {            	   /* Bit  Access 		   					*/
+	 unsigned char 	       :1; /* Nothing is assigned                */
+	 unsigned char	 CKPH  :1; /* Clock phase set bit                */
+	 unsigned char	       :1; /* Nothing is assigned                */
+	 unsigned char	 NODC  :1; /* Clock output set bit               */
+	 unsigned char	       :1; /* Nothing is assigned                */
+	 unsigned char	 DL0   :1; /* SDA digital delay setup bit 			*/
+	 unsigned char	 DL1   :1; /* SDA digital delay setup bit 			*/
+	 unsigned char	 DL2   :1; /* SDA digital delay setup bit 			*/
+	} BIT;   		    	/*        						    	*/
+	unsigned char BYTE;     /*  Byte Access 						*/
+};                          /* 						            	*/
+
+/*------------------------------------------------------
+    UART2 special mode register 2 //0x0376
+------------------------------------------------------*/
+union st_u2smr2 {            /* union U2SMR2    	   					*/
+	struct {	             /* Bit  Access 		   					*/
+	 unsigned char 	IICM2:1; /* IIC mode selection bit 2				*/
+	 unsigned char	CSC  :1; /* Clock-synchronous bit 					*/
+	 unsigned char	SWC  :1; /* SCL wait output bit 					*/
+	 unsigned char	ALS  :1; /* SDA output stop bit 					*/
+	 unsigned char	STAC :1; /* UART2 initialization bit 				*/
+	 unsigned char	SWC2 :1; /* SCL wait output bit 2 					*/
+	 unsigned char	SDHI :1; /* SDA output disable bit					*/
+	 unsigned char	     :1; /* Nothing is assigned		*/
+	} BIT;   			     /*        						    		*/
+	unsigned char BYTE;      /*  Byte Access 							*/
+};                           /* 						            	*/
+
+/*------------------------------------------------------
+    UART2 special mode register //0x0377
+------------------------------------------------------*/
+union st_u2smr {             /* union U2SMR    	   							*/
+	struct {             	 /* Bit  Access 		  	 					*/
+	 unsigned char 	IICM :1; /* IIC mode selection bit						*/
+	 unsigned char	ABC  :1; /* Arbitration lost detecting flag control bit */
+	 unsigned char	BBS  :1; /* Reserved bit,set to 0							*/
+	 unsigned char	     :1; /* SCLL sync output enable bit 				*/
+	 unsigned char	ABSCS:1; /* Bus collision detect sampling clock select bit */
+	 unsigned char	ACSE :1; /* Auto clear function select bit of transmit enable bit */
+	 unsigned char	SSS  :1; /* Transmit start condition select bit			*/
+	 unsigned char	     :1; /* Nothing is assigned 				*/
+	} BIT;   		     	 /*        						 		   		*/
+	unsigned char BYTE;      /*  Byte Access 								*/
+};                           /* 						     		       	*/
+
+/*------------------------------------------------------
+    UART2 transmit/receive mode register //0x0378
+------------------------------------------------------*/
+union st_u2mr {              	  /* union U2MR	   							*/
+	struct {             	      /* Bit  Access	  	 					*/
+	 unsigned char 	SMD0_U2MR :1; /* Serial I/O mode select bit 			*/
+	 unsigned char	SMD1_U2MR :1; /* Serial I/O mode select bit 			*/
+	 unsigned char	SMD2_U2MR :1; /* Serial I/O mode select bit 			*/
+	 unsigned char	CKDIR_U2MR:1; /* Internal/external clock select bit		*/
+	 unsigned char	STPS_U2MR :1; /* Stop bit length select bit 			*/
+	 unsigned char	PRY_U2MR  :1; /* Odd/even parity select bit 			*/
+	 unsigned char	PRYE_U2MR :1; /* Parity enable bit 						*/
+	 unsigned char	IOPOL_U2MR:1; /* TxD RxD I/O polarity reverse bit 		*/
+	} BIT;   		     		  /*        						 		   		*/
+	unsigned char BYTE;           /*  Byte Access							*/
+};
+
+/*------------------------------------------------------
+    UART2 Transmit buffer register 16 bit //0x037a
+------------------------------------------------------*/
+union st_u2tb {				 /* UART2 Transmit buffer register 16 bit ; Use "MOV" instruction when writing to this register. */
+   struct{
+	unsigned char U2TBL;     /* UART2 Transmit buffer register low  8 bit 	 */
+	unsigned char U2TBH;     /* UART2 Transmit buffer register high 8 bit  	 */
+   } BYTE;				 	 /* Byte access					   				 */
+   unsigned short   WORD;	 /* Word Access					   				 */
+};
+
+/*------------------------------------------------------
+    UART2 transmit/receive control register 0//0x037c
+------------------------------------------------------*/
+union st_u2c0 {              	/* union U2C0	   							*/
+	struct {             		/* Bit  Access	  	 						*/
+	 unsigned char 	CLK0 :1; 	/* BRG count source select bit 				*/
+	 unsigned char	CLK1 :1; 	/* BRG count source select bit 				*/
+	 unsigned char	CRS  :1; 	/* CTS~/RTS~ function select bit 			*/
+	 unsigned char	TXEPT:1; 	/* Transmit register empty flag 			*/
+	 unsigned char	CRD  :1; 	/* CTS~/RTS~ disable bit 					*/
+	 unsigned char		 :1; 	/* Nothing Assigned							*/
+	 unsigned char	CKPOL:1; 	/* CLK polarity select bit 					*/
+	 unsigned char	UFORM:1; 	/* Transfer format select bit 				*/
+	} BIT;   		     		/*   						 		   		*/
+	unsigned char BYTE;         /* Byte Access 								*/
+}; 								/* UART2 transmit/receive control register 0*/
+
+/*------------------------------------------------------
+    UART2 transmit/receive control register 1 //0x037d
+-----------------------------------------------------*/
+union st_u2c1 {              	/* union U2C1	   							*/
+	struct {             		/* Bit  Access	  	 						*/
+	 unsigned char 	TE_U2C1:1; 	/* Transmit enable bit 						*/
+	 unsigned char	TI_U2C1:1; 	/* Transmit buffer empty flag 				*/
+	 unsigned char	RE_U2C1:1; 	/* Receive enable bit 						*/
+	 unsigned char	RI_U2C1:1; 	/* Receive complete flag 					*/
+	 unsigned char	U2IRS  :1; 	/* UART2 transmit interrupt cause select bit*/
+	 unsigned char	U2RRM  :1; 	/* UART2 continuous receive mode enable bit */
+	 unsigned char	U2LCH  :1; 	/* Data logic select bit 					*/
+	 unsigned char	U2ERE  :1; 	/* Error signal output enable bit 			*/
+	} BIT;   		     		/*   						 		   		*/
+	unsigned char BYTE;         /* Byte Access 								*/
+}; 								/*UART2 transmit/receive control register 1 */
+
+/*------------------------------------------------------
+    UART2 receive buffer registers //0x037e
+------------------------------------------------------*/
+union st_u2rb {     				/* UART2 receive buffer register */
+    struct {						/*  Bit  Access */
+	 unsigned char 			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char   		:1;		/*  Receive data       				*/
+	 unsigned char   		:1;		/* Nothing assigned	   				*/
+	 unsigned char   		:1;		/* Nothing assigned	   				*/
+ 	 unsigned char  ABT_U2RB:1;     /* Arbitration lost detecting flag  */
+ 	 unsigned char  OER_U2RB:1;     /* Overrun error flag 				*/
+ 	 unsigned char  FER_U2RB:1;     /* Framing error flag				*/
+ 	 unsigned char  PER_U2RB:1;     /* Parity error flag 				*/
+ 	 unsigned char  SUM_U2RB:1;     /* Error sum flag 					*/
+    }BIT;
+    struct{
+ 	 unsigned char    U2RBL;        /* Low  8 bit						*/
+ 	 unsigned char    U2RBH;        /* High 8 bit 						*/
+    }BYTE;
+    unsigned short  WORD;
+};
+
+/*------------------------------------------------------
+    Count start flag //0x0380
+------------------------------------------------------*/
+union st_tabsr {              	/* union TABSR	   							*/
+	struct {             		/* Bit  Access	  	 						*/
+     unsigned char	TA0S:1; 	/* Timer A0 count start flag 				*/
+     unsigned char	TA1S:1; 	/* Timer A1 count start flag 				*/
+     unsigned char	TA2S:1; 	/* Timer A2 count start flag 				*/
+     unsigned char	TA3S:1; 	/* Timer A3 count start flag 				*/
+     unsigned char	TA4S:1; 	/* Timer A4 count start flag 				*/
+     unsigned char	TB0S:1; 	/* Timer B0 count start flag 				*/
+     unsigned char	TB1S:1; 	/* Timer B1 count start flag 				*/
+     unsigned char	TB2S:1; 	/* Timer B2 count start flag 				*/
+	} BIT;   		     		/*   						 		   		*/
+	unsigned char BYTE;         /* Byte Access 								*/
+}; 								/*UART2 transmit/receive control register 1 */
+
+/*------------------------------------------------------
+    Clock prescaler reset flag //0x0381
+------------------------------------------------------*/
+union st_cpsrf {              /* union CPSRF    	   						*/
+struct {      /* Bit  Access		   						*/
+     unsigned char 		:1;   /* 											*/
+     unsigned char 		:1;   /* 											*/
+     unsigned char 		:1;   /* 											*/
+     unsigned char 		:1;   /* 											*/
+     unsigned char 		:1;   /* 				 							*/
+     unsigned char 		:1;   /* 				 							*/
+     unsigned char 	 	:1;   /* 											*/
+     unsigned char 	CPSR:1;   /* Clock prescaler reset flag 				*/
+        } BIT;   	  /*       						    			*/
+     unsigned char BYTE;      /* Byte Access 								*/
+};                            /* Watchdog timer start register				*/
+
+/*------------------------------------------------------
+    One-shot start flag //0x0382
+------------------------------------------------------*/
+union st_onsf {              	/* union ONSF	   							*/
+	struct {             		/* Bit  Access	  	 						*/
+	 unsigned char 	 TA0OS:1; 	/* Timer A0 one-shot start flag 			*/
+	 unsigned char 	 TA1OS:1; 	/* Timer A1 one-shot start flag 			*/
+	 unsigned char	 TA2OS:1; 	/* Timer A2 one-shot start flag 			*/
+	 unsigned char	 TA3OS:1; 	/* Timer A3 one-shot start flag 			*/
+	 unsigned char	 TA4OS:1; 	/* Timer A4 one-shot start flag 			*/
+	 unsigned char	 TAZIE:1; 	/* Z phase input enable bit     			*/
+	 unsigned char	TA0TGL:1; 	/* Timer A0 event/trigger select bit 		*/
+	 unsigned char	TA0TGH:1; 	/* Timer A0 event/trigger select bit 		*/
+	} BIT;   		     		/*   						 		   		*/
+	unsigned char BYTE;         /* Byte Access 								*/
+}; 								/*UART2 transmit/receive control register 1 */
+
+/*------------------------------------------------------
+    Trigger select register //0x0383
+------------------------------------------------------*/
+union st_trgsr {              	/* union TRGSR	   							*/
+		struct {             	/* Bit  Access	  	 						*/
+	 unsigned char 	TA1TGL:1; 	/* Timer A1 event/trigger select bit 		*/
+	 unsigned char	TA1TGH:1; 	/* Timer A1 event/trigger select bit 		*/
+	 unsigned char	TA2TGL:1; 	/* Timer A2 event/trigger select bit 		*/
+	 unsigned char	TA2TGH:1; 	/* Timer A2 event/trigger select bit 		*/
+	 unsigned char	TA3TGL:1; 	/* Timer A3 event/trigger select bit 		*/
+	 unsigned char	TA3TGH:1; 	/* Timer A3 event/trigger select bit 		*/
+	 unsigned char	TA4TGL:1; 	/* Timer A4 event/trigger select bit 		*/
+	 unsigned char	TA4TGH:1; 	/* Timer A4 event/trigger select bit 		*/
+	} BIT;   			     	/*   						 		   		*/
+	unsigned char BYTE;           	/* Byte Access 								*/
+}; 								/*UART2 transmit/receive control register 1 */
+
+/*------------------------------------------------------
+    Timer B2 special mode register //0x039e
+------------------------------------------------------*/
+union st_tb2sc {              	/* union tb2sc	   							 */
+		struct {             	/* Bit  Access	  	 						 */
+	 unsigned char 	PWCON :1; 	/* Timer B2 reload timing switching bit      */
+	 unsigned char	IVPCR1:1; 	/* Three phase output port NMI control bit 1 */
+	 unsigned char	      :1; 	/* Nothing is assigned                 		 */
+	 unsigned char	      :1; 	/* Nothing is assigned  		             */
+	 unsigned char	      :1; 	/* Nothing is assigned  		             */
+	 unsigned char	      :1; 	/* Nothing is assigned  		             */
+	 unsigned char	      :1; 	/* Nothing is assigned  		             */
+	 unsigned char	      :1; 	/* Nothing is assigned  		             */
+	} BIT;   			     	/*   						 		   		 */
+	unsigned char BYTE;         /* Byte Access 								*/
+}; 								/*UART2 transmit/receive control register 1 */
+
+/*------------------------------------------------------
+    UART0 transmit/receive mode register //0x03a0
+------------------------------------------------------*/
+union st_u0mr {              	  /* union U0MR	   							*/
+	struct {             	      /* Bit  Access	  	 					*/
+	 unsigned char 	SMD0_U0MR :1; /* Serial I/O mode select bit 			*/
+	 unsigned char 	SMD1_U0MR :1; /* Serial I/O mode select bit 			*/
+	 unsigned char 	SMD2_U0MR :1; /* Serial I/O mode select bit 			*/
+	 unsigned char 	CKDIR_U0MR:1; /* Internal/external clock select bit 	*/
+	 unsigned char 	STPS_U0MR :1; /* Stop bit length select bit 			*/
+	 unsigned char 	PRY_U0MR  :1; /* Odd/even parity select bit 			*/
+	 unsigned char 	PRYE_U0MR :1; /* Parity enable bit 						*/
+	 unsigned char 	IOPOL_U0MR :1; /* TxD,RxD I/O polarity reverse bit		*/
+	} BIT;   		     	  	  /*   						 		   		*/
+	unsigned char BYTE;           /* Byte Access 							*/
+};
+
+/*------------------------------------------------------
+    UART0 transmit/receive mode register //0x03a2
+------------------------------------------------------*/
+union st_u0tb {				/* UART0 Transmit buffer register 16 bit ; Use "MOV" instruction when writing to this register. */
+   struct{
+	unsigned char U0TBL;     /* UART0 Transmit buffer register low  8 bit 	 */
+	unsigned char U0TBH;     /* UART0 Transmit buffer register high 8 bit 	 */
+   } BYTE;					 /* Byte access					   				 */
+   unsigned short   WORD;	 /* Word Access					   				 */
+};
+
+/*------------------------------------------------------
+    UARTi transmit/receive control register 0 //0x03a4
+------------------------------------------------------*/
+union st_u0c0 {              	/* union U0C0	   							*/
+	struct {             		/* Bit  Access	  	 						*/
+	 unsigned char 	CLK0 :1; 	/* BRG count source select bit 				*/
+	 unsigned char	CLK1 :1; 	/* BRG count source select bit 				*/
+	 unsigned char	CRS  :1; 	/* CTS~/RTS~ function select bit 			*/
+	 unsigned char	TXEPT:1; 	/* Transmit register empty flag 			*/
+	 unsigned char	CRD  :1; 	/* CTS~/RTS~ disable bit 					*/
+	 unsigned char	NCH  :1; 	/* Data output select bit 					*/
+	 unsigned char	CKPOL:1; 	/* CLK polarity select bit 					*/
+	 unsigned char	UFORM:1; 	/* Transfer format select bit 				*/
+	} BIT;   		     		/*   						 		   		*/
+	unsigned char BYTE;         /* Byte Access 								*/
+}; 								/*UARTi transmit/receive control register 0 */
+
+/*------------------------------------------------------
+    UART0 transmit/receive control register 1 //0x03a5
+------------------------------------------------------*/
+union st_u0c1 {             /* union U0C1		   							*/
+	struct {            	/* Bit  Access	  	 							*/
+	 unsigned char 	TE     :1; 	/* Transmit enable bit 							*/
+	 unsigned char	TI     :1; 	/* Transmit buffer empty flag 					*/
+	 unsigned char	RE     :1; 	/* Receive enable bit 							*/
+	 unsigned char	RI     :1; 	/* Receive complete flag 						*/
+	 unsigned char	       :1; 	/* Nothing Assigned						 		*/
+	 unsigned char	       :1; 	/* Nothing Assigned						 		*/
+	 unsigned char	U0LCH  :1; 	/* Data logic select bit */
+	 unsigned char	U0ERE  :1; 	/* Error signal output enable bit */
+	} BIT;   		    	/*   						 		   			*/
+	unsigned char BYTE;     /* Byte Access 									*/
+}; 							/*UART0 transmit/receive control register 1 	*/
+
+/*------------------------------------------------------
+    UART0 receive buffer register //0x03a6
+------------------------------------------------------*/
+union st_u0rb {						/*  UART0 receive buffer register 	*/
+    struct {						/*  Bit  Access 				 	*/
+	 unsigned char 			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char  		:1;		/*  Receive data       				*/
+	 unsigned char  		:1;		/* Nothing assigned	   				*/
+	 unsigned char  		:1;		/* Nothing assigned	   				*/
+ 	 unsigned char  ABT_U0RB:1;     /* Arbitration lost detecting flag	*/
+ 	 unsigned char  OER_U0RB:1;     /* Overrun error flag 				*/
+ 	 unsigned char  FER_U0RB:1;     /* Framing error flag				*/
+ 	 unsigned char  PER_U0RB:1;     /* Parity error flag 				*/
+ 	 unsigned char  SUM_U0RB:1;     /* Error sum flag 					*/
+    }BIT;
+    struct{
+     unsigned char U0RBL;        	/* Low  8 bit 						*/
+     unsigned char U0RBH;           /* High 8 bit 						*/
+    }BYTE;
+    unsigned short  WORD;
+};
+
+/*------------------------------------------------------
+    UART1 transmit/receive mode register //0x03a8
+------------------------------------------------------*/
+union st_u1mr {              	  /* union U1MR	   							*/
+	struct {             	 	  /* Bit  Access	  	 					*/
+	 unsigned char 	SMD0_U1MR  :1; /* Serial I/O mode select bit 			*/
+	 unsigned char	SMD1_U1MR  :1; /* Serial I/O mode select bit 			*/
+	 unsigned char	SMD2_U1MR  :1; /* Serial I/O mode select bit 			*/
+	 unsigned char	CKDIR_U1MR :1; /* Internal/external clock select bit 	*/
+	 unsigned char	STPS_U1MR  :1; /* Stop bit length select bit 			*/
+	 unsigned char	PRY_U1MR   :1; /* Odd/even parity select bit 			*/
+	 unsigned char	PRYE_U1MR  :1; /* Parity enable bit 						*/
+	 unsigned char	IOPOL_U1MR :1; /* TxD,RxD I/O polarity reverse bit			*/
+	} BIT;   		     	  	  /*   						 		   		*/
+	unsigned char BYTE;           /* Byte Access 							*/
+};
+
+/*------------------------------------------------------
+    UART1 transmit buffer register //0x03aa
+------------------------------------------------------*/
+union st_u1tb {				 /* UART1 Transmit buffer register 16 bit ; Use "MOV" instruction when writing to this register. */
+   struct{
+	unsigned char U1TBL;     /* UART1 Transmit buffer register low  8 bit    */
+	unsigned char U1TBH;     /* UART1 Transmit buffer register high 8 bit    */
+   } BYTE;					 /* Byte access					   				 */
+   unsigned short   WORD;	 /* Word Access					   				 */
+};
+
+/*------------------------------------------------------
+     UART1 transmit/receive control register 0 //0x03ac
+------------------------------------------------------*/
+union st_u1c0 {              	/* union UCR	   							*/
+	struct {             		/* Bit  Access	  	 						*/
+	 unsigned char 	CLK0 :1; 	/* BRG count source select bit 				*/
+	 unsigned char	CLK1 :1; 	/* BRG count source select bit 				*/
+	 unsigned char	CRS  :1; 	/* CTS~/RTS~ function select bit 			*/
+	 unsigned char	TXEPT:1; 	/* Transmit register empty flag 			*/
+	 unsigned char	CRD  :1; 	/* CTS~/RTS~ disable bit 					*/
+	 unsigned char	NCH  :1; 	/* Data output select bit 					*/
+	 unsigned char	CKPOL:1; 	/* CLK polarity select bit 					*/
+	 unsigned char	UFORM:1; 	/* Transfer format select bit 				*/
+	} BIT;   		     		/*   						 		   		*/
+	unsigned char BYTE;         /* Byte Access 								*/
+}; 								/*UARTi transmit/receive control register 0 */
+
+/*------------------------------------------------------
+     UART1 transmit/receive control register 1 //0x03ad
+------------------------------------------------------*/
+union st_u1c1 {             /* union U1C1	   								*/
+	struct {            	/* Bit  Access	  	 							*/
+	 unsigned char 	TE:1; 	/* Transmit enable bit 							*/
+	 unsigned char	TI:1; 	/* Transmit buffer empty flag 					*/
+	 unsigned char	RE:1; 	/* Receive enable bit 							*/
+	 unsigned char	RI:1; 	/* Receive complete flag 						*/
+	 unsigned char	  :1; 	/*  											*/
+	 unsigned char	  :1; 	/*  											*/
+	 unsigned char	  :1; 	/*  											*/
+	 unsigned char	  :1; 	/*  											*/
+	} BIT;   		     	/*   						 		   		    */
+	 unsigned char BYTE;    /* Byte Access 								    */
+}; 							/*UART1 transmit/receive control register 1     */
+
+/*------------------------------------------------------
+     UART1 receive buffer register //0x03ae
+------------------------------------------------------*/
+union st_u1rb {						/* UART1 receive buffer register */
+    struct {						/*  Bit  Access */
+	 unsigned char 			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char			:1;		/*  Receive data       				*/
+	 unsigned char  		:1;		/*  Receive data       				*/
+	 unsigned char  		:1;		/* Nothing assigned	   				*/
+	 unsigned char  		:1;		/* Nothing assigned	   				*/
+ 	 unsigned char  ABT_U1RB:1;     /* Arbitration lost detecting flag	*/
+ 	 unsigned char  OER_U1RB:1;     /* Overrun error flag 				*/
+ 	 unsigned char  FER_U1RB:1;     /* Framing error flag				*/
+ 	 unsigned char  PER_U1RB:1;     /* Parity error flag 				*/
+ 	 unsigned char  SUM_U1RB:1;     /* Error sum flag 					*/
+    }BIT;
+    struct{
+     unsigned char U1RBL;           /* Low  8 bit 						*/
+     unsigned char U1RBH;           /* High 8 bit 						*/
+    }BYTE;
+    unsigned short  WORD;
+};
+
+/*------------------------------------------------------
+    UART transmit/receive control register 2 //0x03b0
+------------------------------------------------------*/
+union st_ucon {              	/* union UCON   							*/
+	struct {             		/* Bit  Access	  	 						*/
+	 unsigned char 	U0IRS :1; 	/* UART0 transmit interrupt cause select bit*/
+	 unsigned char	U1IRS :1; 	/* UART1 transmit interrupt cause select bit*/
+	 unsigned char	U0RRM :1; 	/* UART0 continuous receive mode enable bit */
+	 unsigned char	U1RRM :1; 	/* UART1 continuous receive mode enable bit */
+	 unsigned char	CLKMD0:1; 	/* CLK/CLKS select bit 0					*/
+	 unsigned char	CLKMD1:1; 	/* CLK/CLKS select bit 1					*/
+	 unsigned char	RCSP  :1; 	/* Separate CTS~/RTS~ bit               	*/
+	 unsigned char	      :1; 	/* 											*/
+	} BIT;   		     		/*   						 		   		*/
+	unsigned char BYTE;        /* Byte Access 								*/
+}; 								/*UART transmit/receive control register 2  */
+
+/*------------------------------------------------------
+    DMA0 request cause select register //0x03b8
+------------------------------------------------------*/
+union st_dm0sl {			  /*    DMAi request cause select registers			*/
+    struct{
+     unsigned char    DSEL0:1;/* DMA request cause select bit 				*/
+     unsigned char    DSEL1:1;/* DMA request cause select bit 				*/
+     unsigned char    DSEL2:1;/* DMA request cause select bit 				*/
+     unsigned char    DSEL3:1;/* DMA request cause select bit 				*/
+     unsigned char         :1;
+     unsigned char         :1;
+     unsigned char    DMS  :1;/* DMA request cause expansion bit 			*/
+     unsigned char    DSR  :1;/* Software DMA request bit 					*/
+    }BIT;
+     unsigned char  BYTE;
+};
+
+/*------------------------------------------------------
+    DMA1 request cause select register //0x03ba
+------------------------------------------------------*/
+union st_dm1sl {			   /*    DMAi request cause select registers	*/
+    struct{
+     unsigned char    DSEL0:1; /* DMA request cause select bit 				*/
+     unsigned char    DSEL1:1; /* DMA request cause select bit 				*/
+     unsigned char    DSEL2:1; /* DMA request cause select bit 				*/
+     unsigned char    DSEL3:1; /* DMA request cause select bit 				*/
+     unsigned char     	   :1;
+     unsigned char    	   :1;
+     unsigned char    DMS  :1; /* DMA request cause expansion bit 			*/
+     unsigned char    DSR  :1; /* Software DMA request bit 					*/
+    }BIT;
+    unsigned char  BYTE;
+};
+
+/*------------------------------------------------------
+    CRC data register //0x03bc
+------------------------------------------------------*/
+union st_crcd {				 /* CRC data register 16 bit     				 */
+   struct{
+	unsigned char CRCDL;     /* CRC data register low  8 bit 				 */
+	unsigned char CRCDH;     /* CRC data register high 8 bit 				 */
+   } BYTE;					 /* Byte access					 				 */
+   unsigned short   WORD;    /* Word Access					 				 */
+};
+
+/*------------------------------------------------------
+    A/D register 0 //0x03c0
+------------------------------------------------------*/
+union st_ad0 {				 /* A/D register 0 16 bit 						*/
+   struct{
+	unsigned char AD0L;      /* A/D register 0 low  8 bit 					*/
+	unsigned char AD0H;      /* A/D register 0 high 8 bit 					*/
+   }BYTE;					 /* Byte access					    			*/
+   unsigned short   WORD;	 /* Word Access					    			*/
+};
+
+/*------------------------------------------------------
+    A/D register 1 //0x03c2
+------------------------------------------------------*/
+ union st_ad1 {				 /* A/D register 1 16 bit 						*/
+   struct{
+	unsigned char AD1L;      /* A/D register 1 low  8 bit 					*/
+	unsigned char AD1H;      /* A/D register 1 high 8 bit 					*/
+   } BYTE;					 /* Byte access					    			*/
+   unsigned short   WORD;	 /* Word Access					    			*/
+};
+
+/*------------------------------------------------------
+    A/D register 2 //0x03c4
+------------------------------------------------------*/
+union st_ad2 {				 /* A/D register 2 16 bit 						*/
+  struct{
+	unsigned char AD2L;      /* A/D register 2 low  8 bit 					*/
+	unsigned char AD2H;      /* A/D register 2 high 8 bit 					*/
+  } BYTE;					 /* Byte access					    			*/
+  unsigned short   WORD;	 /* Word Access					    			*/
+};
+
+/*------------------------------------------------------
+    A/D register 3 //0x03c6
+------------------------------------------------------*/
+union st_ad3 {			     /* A/D register 3 16 bit 						*/
+  struct{
+	unsigned char AD3L;      /* A/D register 3 low  8 bit 					*/
+	unsigned char AD3H;      /* A/D register 3 high 8 bit 					*/
+  } BYTE;					 /* Byte access					    			*/
+	unsigned short   WORD;	 /* Word Access					    			*/
+};
+
+/*------------------------------------------------------
+    A/D register 4 //0x03c8
+------------------------------------------------------*/
+union st_ad4 {			     /* A/D register 4 16 bit 						*/
+  struct{
+	unsigned char AD4L;      /* A/D register 4 low  8 bit 					*/
+	unsigned char AD4H;      /* A/D register 4 high 8 bit 					*/
+  } BYTE;				     /* Byte access					   				*/
+  unsigned short   WORD;	 /* Word Access					    			*/
+};
+
+/*------------------------------------------------------
+    A/D register 5 //0x03ca
+------------------------------------------------------*/
+union st_ad5 {				 /* A/D register 5 16 bit 						*/
+  struct{
+	unsigned char AD5L;      /* A/D register 5 low  8 bit 					*/
+	unsigned char AD5H;      /* A/D register 5 high 8 bit 					*/
+  } BYTE;					 /* Byte access					   				*/
+	unsigned short   WORD;	 /* Word Access					   				*/
+};
+
+/*------------------------------------------------------
+    A/D register 6 //0x03cc
+------------------------------------------------------*/
+union st_ad6 {				 /* A/D register 6 16 bit 						*/
+   struct{
+	unsigned char AD6L;      /* A/D register 6 low  8 bit 					*/
+	unsigned char AD6H;      /* A/D register 6 high 8 bit 					*/
+   } BYTE;					 /* Byte access					    			*/
+   unsigned short   WORD;	 /* Word Access					    			*/
+ };
+
+/*------------------------------------------------------
+    A/D register 7 //0x03ce
+------------------------------------------------------*/
+union st_ad7 {				 /* A/D register 7 16 bit 						*/
+   struct{
+	unsigned char AD7L;      /* A/D register 7 low  8 bit 					*/
+	unsigned char AD7H;      /* A/D register 7 high 8 bit 					*/
+   } BYTE;					 /* Byte access					    			*/
+   unsigned short   WORD;	 /* Word Access					    			*/
+ };
+
+/*------------------------------------------------------
+    A/D control register 2 //0x03d4
+------------------------------------------------------*/
+union st_adcon2 {				/* union ADCON2						*/
+    struct {					/*  Bit  Access 					*/
+	 unsigned char     SMP     :1;	    /* A/D conversion method select bit */
+	 unsigned char     ADGSEL0 :1;		/* Reserved bit (Always set to 0 )  */
+	 unsigned char     ADGSEL1 :1;		/* Reserved bit (Always set to 0 )  */
+	 unsigned char    	       :1;		/* Reserved bit (Always set to 0 )  */
+	 unsigned char     CKS2    :1;		/* Nothing Assigned.		        */
+	 unsigned char    	       :1;		/* Nothing Assigned.		        */
+	 unsigned char    	       :1;		/* Nothing Assigned.		        */
+	 unsigned char    	       :1;		/* Nothing Assigned.		        */
+	} BIT;
+    unsigned char   BYTE;		/*  Byte Access 					*/
+};
+
+/*------------------------------------------------------
+    A/D control register 0  //0x03d6
+------------------------------------------------------*/
+union st_adcon0 {              	/* union ADCON0	   							*/
+	struct {             		/* Bit  Access	  	 						*/
+	 unsigned char 	CH0 :1; 	/* Analog input pin select bit 				*/
+	 unsigned char	CH1 :1; 	/* Analog input pin select bit 				*/
+	 unsigned char	CH2 :1; 	/* Analog input pin select bit 				*/
+	 unsigned char	MD0 :1; 	/* A/D operation mode select bit 0 			*/
+	 unsigned char	MD1 :1; 	/* A/D operation mode select bit 0 			*/
+	 unsigned char	TRG :1; 	/* Trigger select bit 						*/
+	 unsigned char	ADST:1; 	/* A/D conversion start flag 				*/
+	 unsigned char	CKS0:1; 	/* Frequency select bit 0 					*/
+	} BIT;   		     		/*   						 		   		*/
+	unsigned char BYTE;         /* Byte Access 								*/
+}; 								/*A/D control register 0					*/
+
+
+/*------------------------------------------------------
+   A/D control register 1 //0x03d7
+------------------------------------------------------*/
+union st_adcon1 {              	/* union ADCON1	   							*/
+	struct {             		/* Bit  Access	  	 						*/
+	 unsigned char 	SCAN0:1; 	/* A/D sweep pin select bit 				*/
+	 unsigned char	SCAN1:1; 	/* A/D sweep pin select bit 				*/
+	 unsigned char	MD2  :1; 	/* A/D operation mode select bit 1 			*/
+	 unsigned char	BITS :1; 	/* 8/10-bit mode select bit 				*/
+	 unsigned char	CKS1 :1; 	/* Frequency select bit 1 					*/
+	 unsigned char	VCUT :1; 	/* Vref connect bit							*/
+	 unsigned char	OPA0 :1; 	/* External op-amp connection mode bit 		*/
+	 unsigned char	OPA1 :1; 	/* External op-amp connection mode bit 		*/
+	} BIT;   		     		/*   						 		   		*/
+	unsigned char BYTE;         /* Byte Access 								*/
+}; 								/*A-D control register 1					*/
+
+
+/*------------------------------------------------------
+    D/A control register //0x03dc
+------------------------------------------------------*/
+union st_dacon{               /* union DACON    	   					*/
+	struct {              	  /* Bit  Access 		   				*/
+	 unsigned char 	DA0E :1;  /* D/A0 output enable bit	 		    */
+	 unsigned char	DA1E :1;  /* D/A1 output enable bit 			*/
+	 unsigned char		 :1;  /* Nothing Assigned 					*/
+	 unsigned char		 :1;  /* Nothing Assigned 					*/
+	 unsigned char		 :1;  /* Nothing Assigned 					*/
+	 unsigned char		 :1;  /* Nothing Assigned 					*/
+	 unsigned char	 	 :1;  /* Nothing Assigned 					*/
+	 unsigned char		 :1;  /* Nothing Assigned 					*/
+	} BIT;   		      	  /*       						    	*/
+	unsigned char BYTE;       /* Byte Access 						*/
+};                            /* D/A control register				*/
+
+/*------------------------------------------------------
+    Port P14 control register //0x03de
+------------------------------------------------------*/
+union st_pc14{                /* union pc14 	   					*/
+	struct {              	  /* Bit  Access 		   				*/
+	 unsigned char 	P140 :1;  /* Port P14_0 register */
+	 unsigned char	P141 :1;  /* Port P14_1 register */
+	 unsigned char		 :1;  /* Nothing Assigned 					*/
+	 unsigned char		 :1;  /* Nothing Assigned 					*/
+	 unsigned char	pd140:1;  /* Port P14_0 direction register */
+	 unsigned char	pd141:1;  /* Port P14_1 direction register */
+	 unsigned char	 	 :1;  /* Nothing Assigned 					*/
+	 unsigned char		 :1;  /* Nothing Assigned 					*/
+	} BIT;   		      	  /*       						    	*/
+	unsigned char BYTE;       /* Byte Access 						*/
+};                            /* Port P14 control register				*/
+
+/*------------------------------------------------------
+    Pull-up control register 3 //0x03df
+------------------------------------------------------*/
+union st_pur3{               /* union pur3	   					*/
+	struct {              	  /* Bit  Access 		   				*/
+	 unsigned char 	PU30:1;  /* P11_0 to P11_3 pull-up */
+	 unsigned char	PU31:1;  /* P11_4 to P11_7 pull-up */
+	 unsigned char	PU32:1;  /* P12_0 to P12_3 pull-up */
+	 unsigned char	PU33:1;  /* P12_4 to P12_7 pull-up */
+	 unsigned char	PU34:1;  /* P13_0 to P13_3 pull-up */
+	 unsigned char	PU35:1;  /* P13_4 to P13_7 pull-up */
+	 unsigned char	PU36:1;  /* P14_0,P14_1 pull-up */
+	 unsigned char	PU37:1;  /* P11 to P14 effective bit */
+	} BIT;   		      	  /*       						    	*/
+	unsigned char BYTE;       /* Byte Access 						*/
+};                            /* Pull-up control register 3				*/
+
+/*------------------------------------------------------
+    Port P0 register //0x03e0
+------------------------------------------------------*/
+union st_p0 {               /* union P0    	   					*/
+	struct {            	/* Bit  Access 		   				*/
+	 unsigned char 	P0_0:1; /* Port P00 register 				*/
+	 unsigned char	P0_1:1; /* Port P01 register 				*/
+	 unsigned char	P0_2:1; /* Port P02 register 				*/
+	 unsigned char	P0_3:1; /* Port P03 register 				*/
+	 unsigned char	P0_4:1; /* Port P04 register 				*/
+	 unsigned char	P0_5:1; /* Port P05 register 				*/
+	 unsigned char	P0_6:1; /* Port P06 register 				*/
+	 unsigned char	P0_7:1; /* Port P07 register 				*/
+	} BIT;   		    	/*        						    */
+	unsigned char BYTE;     /*  Byte Access 					*/
+};                          /* 						            */
+
+/*------------------------------------------------------
+    Port P1 register //0x03e1
+------------------------------------------------------*/
+union st_p1 {              /* union P1	    	   		    	*/
+	struct {           	   /* Bit  Access 		   	  	    	*/
+	 unsigned char 	P1_0:1;/* Port P10 register			    	*/
+	 unsigned char	P1_1:1;/* Port P11 register 				*/
+	 unsigned char	P1_2:1;/* Port P12 register 				*/
+	 unsigned char	P1_3:1;/* Port P13 register 				*/
+	 unsigned char	P1_4:1;/* Port P14 register 				*/
+	 unsigned char	P1_5:1;/* Port P15 register 				*/
+	 unsigned char	P1_6:1;/* Port P16 register 				*/
+	 unsigned char	P1_7:1;/* Port P17 register 				*/
+	} BIT;   		       /*        					    	*/
+	unsigned char BYTE;    /*  Byte Access 			        	*/
+};                         /* 						        	*/
+
+/*------------------------------------------------------
+    Port P0 direction register //0x03e2
+------------------------------------------------------*/
+union st_pd0 {              /* union PD0    	   		   		*/
+	struct {            	/* Bit  Access 		   	  	   		*/
+	 unsigned char 	PD0_0:1;/* Port P00 direction register 		*/
+	 unsigned char	PD0_1:1;/* Port P01 direction register 		*/
+	 unsigned char	PD0_2:1;/* Port P02 direction register 		*/
+	 unsigned char	PD0_3:1;/* Port P03 direction register 		*/
+	 unsigned char	PD0_4:1;/* Port P04 direction register 		*/
+	 unsigned char	PD0_5:1;/* Port P05 direction register 		*/
+	 unsigned char	PD0_6:1;/* Port P06 direction register 		*/
+	 unsigned char	PD0_7:1;/* Port P07 direction register 		*/
+	} BIT;   		    	/*        					   		*/
+	unsigned char BYTE;     /*  Byte Access 			   		*/
+};                          /* 						       		*/
+
+
+/*------------------------------------------------------
+    Port P1 direction register //0x03e3
+------------------------------------------------------*/
+union st_pd1 {              /* union PD1    	   		   */
+	struct {            	/* Bit  Access 		   	  	   */
+	 unsigned char 	PD1_0:1;/* Port P10 direction register */
+	 unsigned char	PD1_1:1;/* Port P11 direction register */
+	 unsigned char	PD1_2:1;/* Port P12 direction register */
+	 unsigned char	PD1_3:1;/* Port P13 direction register */
+	 unsigned char	PD1_4:1;/* Port P14 direction register */
+	 unsigned char	PD1_5:1;/* Port P15 direction register */
+	 unsigned char	PD1_6:1;/* Port P16 direction register */
+	 unsigned char	PD1_7:1;/* Port P17 direction register */
+	} BIT;   		    	/*        					   */
+	unsigned char BYTE;     /*  Byte Access 			   */
+};                          /* 						       */
+
+/*------------------------------------------------------
+    Port P2 register //0x03e4
+------------------------------------------------------*/
+union st_p2 {              /* union P2	    	   		    */
+	struct {           	   /* Bit  Access 		   	  	    */
+	 unsigned char 	P2_0:1;/* Port P20 register			    */
+	 unsigned char	P2_1:1;/* Port P21 register 			*/
+	 unsigned char	P2_2:1;/* Port P22 register 			*/
+	 unsigned char	P2_3:1;/* Port P23 register 			*/
+	 unsigned char	P2_4:1;/* Port P24 register 			*/
+	 unsigned char	P2_5:1;/* Port P25 register 			*/
+	 unsigned char	P2_6:1;/* Port P26 register 			*/
+	 unsigned char	P2_7:1;/* Port P27 register 			*/
+	} BIT;   		  	   /*        					    */
+	unsigned char BYTE;    /*  Byte Access 			       	*/
+};                         /* 						        */
+
+/*------------------------------------------------------
+    Port P3 register //0x03e5
+------------------------------------------------------*/
+union st_p3 {              /* union P3	    	   		    */
+	struct {           	   /* Bit  Access 		   	  	    */
+	 unsigned char 	P3_0:1;/* Port P30 register			    */
+	 unsigned char	P3_1:1;/* Port P31 register 			*/
+	 unsigned char	P3_2:1;/* Port P32 register 			*/
+	 unsigned char	P3_3:1;/* Port P33 register 			*/
+	 unsigned char	P3_4:1;/* Port P34 register 			*/
+	 unsigned char	P3_5:1;/* Port P35 register 			*/
+	 unsigned char	P3_6:1;/* Port P36 register 			*/
+	 unsigned char	P3_7:1;/* Port P37 register 			*/
+	} BIT;   		   	   /*        					    */
+	unsigned char BYTE;    /*  Byte Access 			        */
+};                         /* 						        */
+
+/*------------------------------------------------------
+    Port P2 direction register //0x03e6
+------------------------------------------------------*/
+union st_pd2 {              /* union PD2    	   		   */
+	struct {           	    /* Bit  Access 		   	  	   */
+	 unsigned char 	PD2_0:1;/* Port P20 direction register */
+	 unsigned char	PD2_1:1;/* Port P21 direction register */
+	 unsigned char	PD2_2:1;/* Port P22 direction register */
+	 unsigned char	PD2_3:1;/* Port P23 direction register */
+	 unsigned char	PD2_4:1;/* Port P24 direction register */
+	 unsigned char	PD2_5:1;/* Port P25 direction register */
+	 unsigned char	PD2_6:1;/* Port P26 direction register */
+	 unsigned char	PD2_7:1;/* Port P27 direction register */
+		} BIT;   		    /*        					   */
+	unsigned char BYTE;     /*  Byte Access 			   */
+};                          /* 						       */
+
+
+/*------------------------------------------------------
+    Port P3 direction register //0x03e7
+------------------------------------------------------*/
+union st_pd3 {              /* union PD3    	   		   */
+	struct {           	    /* Bit  Access 		   	  	   */
+	 unsigned char 	PD3_0:1;/* Port P30 direction register */
+	 unsigned char	PD3_1:1;/* Port P31 direction register */
+	 unsigned char	PD3_2:1;/* Port P32 direction register */
+	 unsigned char	PD3_3:1;/* Port P33 direction register */
+	 unsigned char	PD3_4:1;/* Port P34 direction register */
+	 unsigned char	PD3_5:1;/* Port P35 direction register */
+	 unsigned char	PD3_6:1;/* Port P36 direction register */
+	 unsigned char	PD3_7:1;/* Port P37 direction register */
+	} BIT;   		        /*        					   */
+	unsigned char BYTE;     /*  Byte Access 			   */
+};                          /* 						       */
+
+/*------------------------------------------------------
+    Port P4 register //0x03e8
+------------------------------------------------------*/
+union st_p4 {              /* union P4	    	   		    */
+	struct {           	   /* Bit  Access 		   	  	    */
+	 unsigned char 	P4_0:1;/* Port P40 register			    */
+	 unsigned char	P4_1:1;/* Port P41 register 			*/
+	 unsigned char	P4_2:1;/* Port P42 register 			*/
+	 unsigned char	P4_3:1;/* Port P43 register 			*/
+	 unsigned char	P4_4:1;/* Port P44 register 			*/
+	 unsigned char	P4_5:1;/* Port P45 register 			*/
+	 unsigned char	P4_6:1;/* Port P46 register 			*/
+	 unsigned char	P4_7:1;/* Port P47 register 			*/
+	} BIT;   		   	   /*        					    */
+	unsigned char BYTE;    /*  Byte Access 			        */
+};                         /* 						        */
+
+/*------------------------------------------------------
+    Port P5 register //0x03e9
+------------------------------------------------------*/
+union st_p5 {              /* union P5	    	   		    */
+	struct {           	   /* Bit  Access 		   	  	    */
+	 unsigned char 	P5_0:1;/* Port P50 register			    */
+	 unsigned char	P5_1:1;/* Port P51 register 			*/
+	 unsigned char	P5_2:1;/* Port P52 register 			*/
+	 unsigned char	P5_3:1;/* Port P53 register 			*/
+	 unsigned char	P5_4:1;/* Port P54 register 			*/
+	 unsigned char	P5_5:1;/* Port P55 register 			*/
+	 unsigned char	P5_6:1;/* Port P56 register 			*/
+	 unsigned char	P5_7:1;/* Port P57 register 			*/
+	} BIT;   		       /*        					    */
+	unsigned char BYTE;    /*  Byte Access 			        */
+};                         /* 						        */
+
+
+/*------------------------------------------------------
+    Port P4 direction register //0x03ea
+------------------------------------------------------*/
+union st_pd4 {              /* union PD4    	   		   */
+	struct {            	/* Bit  Access 		   	  	   */
+	 unsigned char 	PD4_0:1;/* Port P40 direction register */
+	 unsigned char	PD4_1:1;/* Port P41 direction register */
+	 unsigned char	PD4_2:1;/* Port P42 direction register */
+	 unsigned char	PD4_3:1;/* Port P43 direction register */
+	 unsigned char	PD4_4:1;/* Port P44 direction register */
+	 unsigned char	PD4_5:1;/* Port P45 direction register */
+	 unsigned char	PD4_6:1;/* Port P46 direction register */
+	 unsigned char	PD4_7:1;/* Port P47 direction register */
+	} BIT;   		    	/*        					   */
+	unsigned char BYTE;    	/*  Byte Access 			   */
+};                          /* 						       */
+
+
+
+/*------------------------------------------------------
+    Port P5 direction register //0x03eb
+------------------------------------------------------*/
+union st_pd5 {              /* union PD5    	   		   */
+	struct {            	/* Bit  Access 		   	  	   */
+	 unsigned char 	PD5_0:1;/* Port P50 direction register */
+	 unsigned char	PD5_1:1;/* Port P51 direction register */
+	 unsigned char	PD5_2:1;/* Port P52 direction register */
+	 unsigned char	PD5_3:1;/* Port P53 direction register */
+	 unsigned char	PD5_4:1;/* Port P54 direction register */
+	 unsigned char	PD5_5:1;/* Port P55 direction register */
+	 unsigned char	PD5_6:1;/* Port P56 direction register */
+	 unsigned char	PD5_7:1;/* Port P57 direction register */
+	} BIT;   		    	/*        					   */
+	unsigned char BYTE;     /*  Byte Access 			   */
+};                          /* 						       */
+
+/*------------------------------------------------------
+    Port P6 register //0x03ec
+------------------------------------------------------*/
+union st_p6 {              /* union P6	    	   		    */
+	struct {           	   /* Bit  Access 		   	  	    */
+	 unsigned char 	P6_0:1;/* Port P60 register			    */
+	 unsigned char	P6_1:1;/* Port P61 register 			*/
+	 unsigned char	P6_2:1;/* Port P62 register 			*/
+	 unsigned char	P6_3:1;/* Port P63 register 			*/
+	 unsigned char	P6_4:1;/* Port P64 register 			*/
+	 unsigned char	P6_5:1;/* Port P65 register 			*/
+	 unsigned char	P6_6:1;/* Port P66 register 			*/
+	 unsigned char	P6_7:1;/* Port P67 register 			*/
+	} BIT;   		       /*        					    */
+	unsigned char BYTE;    /*  Byte Access 			        */
+};                         /* 						        */
+
+/*------------------------------------------------------
+    Port P7 register //0x03ed
+------------------------------------------------------*/
+union st_p7 {              /* union P7	    	   		    */
+	struct {               /* Bit  Access 		   	  	    */
+	 unsigned char 	P7_0:1;/* Port P70 register			    */
+	 unsigned char	P7_1:1;/* Port P71 register 			*/
+	 unsigned char	P7_2:1;/* Port P72 register 			*/
+	 unsigned char	P7_3:1;/* Port P73 register 			*/
+	 unsigned char	P7_4:1;/* Port P74 register 			*/
+	 unsigned char	P7_5:1;/* Port P75 register 			*/
+	 unsigned char	P7_6:1;/* Port P76 register 			*/
+	 unsigned char	P7_7:1;/* Port P77 register 			*/
+	} BIT;   		   	   /*        					    */
+	unsigned char BYTE;    /*  Byte Access 			        */
+};                         /* 						        */
+
+
+/*------------------------------------------------------
+    Port P6 direction register //0x03ee
+------------------------------------------------------*/
+union st_pd6 {              /* union PD6    	   		   */
+	struct {            	/* Bit  Access 		   	  	   */
+	 unsigned char 	PD6_0:1;/* Port P60 direction register */
+	 unsigned char	PD6_1:1;/* Port P61 direction register */
+	 unsigned char	PD6_2:1;/* Port P62 direction register */
+	 unsigned char	PD6_3:1;/* Port P63 direction register */
+	 unsigned char	PD6_4:1;/* Port P64 direction register */
+	 unsigned char	PD6_5:1;/* Port P65 direction register */
+	 unsigned char	PD6_6:1;/* Port P66 direction register */
+	 unsigned char	PD6_7:1;/* Port P67 direction register */
+	} BIT;   		    	/*        					   */
+	unsigned char BYTE;     /*  Byte Access 			   */
+};                          /* 						       */
+
+
+/*------------------------------------------------------
+    Port P7 direction register //0x03ef
+------------------------------------------------------*/
+union st_pd7 {              /* union PD7    	   		   */
+	struct {                /* Bit  Access 		   	  	   */
+	 unsigned char 	PD7_0:1;/* Port P70 direction register */
+	 unsigned char	PD7_1:1;/* Port P71 direction register */
+	 unsigned char	PD7_2:1;/* Port P72 direction register */
+	 unsigned char	PD7_3:1;/* Port P73 direction register */
+	 unsigned char	PD7_4:1;/* Port P74 direction register */
+	 unsigned char	PD7_5:1;/* Port P75 direction register */
+	 unsigned char	PD7_6:1;/* Port P76 direction register */
+	 unsigned char	PD7_7:1;/* Port P77 direction register */
+		} BIT;   		    /*        					   */
+	unsigned char BYTE;     /*  Byte Access 			   */
+};                          /* 						       */
+
+/*------------------------------------------------------
+    Port P8 register //0x03f0
+------------------------------------------------------*/
+union st_p8 {              /* union P8	    	   		    */
+	struct {           	   /* Bit  Access 		   	  	    */
+	 unsigned char 	P8_0:1;/* Port P80 register			    */
+	 unsigned char	P8_1:1;/* Port P81 register 			*/
+	 unsigned char	P8_2:1;/* Port P82 register 			*/
+	 unsigned char	P8_3:1;/* Port P83 register 			*/
+	 unsigned char	P8_4:1;/* Port P84 register 			*/
+	 unsigned char	P8_5:1;/* Port P85 register 			*/
+	 unsigned char	P8_6:1;/* Port P86 register 			*/
+	 unsigned char	P8_7:1;/* Port P87 register 			*/
+	} BIT;   		       /*        					    */
+	unsigned char BYTE;    /*  Byte Access 			        */
+};                         /* 						        */
+
+/*------------------------------------------------------
+    Port P9 register //0x03f1
+------------------------------------------------------*/
+union st_p9 {              /* union P9	    	   		    */
+	struct {           	   /* Bit  Access 		   	  	    */
+	 unsigned char 	P9_0:1;/* Port P90 register			    */
+	 unsigned char 	P9_1:1;/* Port P91 register 			*/
+	 unsigned char	P9_2:1;/* Port P92 register 			*/
+	 unsigned char	P9_3:1;/* Port P93 register 			*/
+	 unsigned char	P9_4:1;/* Port P94 register 			*/
+	 unsigned char	P9_5:1;/* Port P95 register 			*/
+	 unsigned char	P9_6:1;/* Port P96 register 			*/
+	 unsigned char	P9_7:1;/* Port P97 register 			*/
+	} BIT;   		   	   /*        					    */
+	unsigned char BYTE;    /*  Byte Access 			        */
+};                         /* 						        */
+
+/*------------------------------------------------------
+    Port P8 direction register //0x03f2
+------------------------------------------------------*/
+union st_pd8 {              /* union PD8    	   		   */
+	struct {            	/* Bit  Access 		   	  	   */
+	 unsigned char 	PD8_0:1;/* Port P80 direction register */
+	 unsigned char	PD8_1:1;/* Port P81 direction register */
+	 unsigned char	PD8_2:1;/* Port P82 direction register */
+	 unsigned char	PD8_3:1;/* Port P83 direction register */
+	 unsigned char	PD8_4:1;/* Port P84 direction register */
+	 unsigned char		 :1;/* Nothing assigned 		   */
+	 unsigned char	PD8_6:1;/* Port P86 direction register */
+	 unsigned char	PD8_7:1;/* Port P87 direction register */
+	} BIT;   		    	/*        					   */
+	unsigned char BYTE;     /*  Byte Access 			   */
+};                          /* 						       */
+
+
+/*------------------------------------------------------
+    Port P9 direction register //0x03f3
+------------------------------------------------------*/
+union st_pd9 {              /* union PD9    	   		   */
+	struct {            	/* Bit  Access 		   	  	   */
+	 unsigned char 	PD9_0:1;/* Port P90 direction register */
+	 unsigned char	PD9_1:1;/* Port P91 direction register */
+	 unsigned char	PD9_2:1;/* Port P92 direction register */
+	 unsigned char	PD9_3:1;/* Port P93 direction register */
+	 unsigned char	PD9_4:1;/* Port P94 direction register */
+	 unsigned char	PD9_5:1;/* Port P95 direction register */
+	 unsigned char	PD9_6:1;/* Port P96 direction register */
+	 unsigned char	PD9_7:1;/* Port P97 direction register */
+	} BIT;   		    	/*        					   */
+	unsigned char BYTE;     /*  Byte Access 			   */
+};                          /* 						       */
+
+/*------------------------------------------------------
+    Port P10 register //0x03f4
+------------------------------------------------------*/
+union st_p10 {              /* union P10	    	   						*/
+	struct {            	/* Bit  Access 		   	  	    				*/
+	 unsigned char 	P10_0:1;/* Port P100 register							*/
+	 unsigned char	P10_1:1;/* Port P101 register 							*/
+	 unsigned char	P10_2:1;/* Port P102 register 							*/
+	 unsigned char	P10_3:1;/* Port P103 register 							*/
+	 unsigned char	P10_4:1;/* Port P104 register 							*/
+	 unsigned char	P10_5:1;/* Port P105 register 							*/
+	 unsigned char	P10_6:1;/* Port P106 register 							*/
+	 unsigned char	P10_7:1;/* Port P107 register 							*/
+	} BIT;   		    	/*        					    				*/
+	unsigned char BYTE;     /*  Byte Access 			    				*/
+};                          /* 						        */
+
+/*------------------------------------------------------
+    Port P11 register //0x03f5
+------------------------------------------------------*/
+union st_p11 {              /* union P11	    	   						*/
+	struct {            	/* Bit  Access 		   	  	    				*/
+	 unsigned char 	P11_0:1;/* Port P110 register							*/
+	 unsigned char	P11_1:1;/* Port P111 register 							*/
+	 unsigned char	P11_2:1;/* Port P112 register 							*/
+	 unsigned char	P11_3:1;/* Port P113 register 							*/
+	 unsigned char	P11_4:1;/* Port P114 register 							*/
+	 unsigned char	P11_5:1;/* Port P115 register 							*/
+	 unsigned char	P11_6:1;/* Port P116 register 							*/
+	 unsigned char	P11_7:1;/* Port P117 register 							*/
+	} BIT;   		    	/*        					    				*/
+	unsigned char BYTE;     /*  Byte Access 			    				*/
+};                          /* 						        */
+
+/*------------------------------------------------------
+    Port P10 direction register //0x03f6
+------------------------------------------------------*/
+union st_pd10 {              /* union PD10    	   		     				*/
+	struct {            	 /* Bit  Access 		   	  	 				*/
+	 unsigned char 	PD10_0:1;/* Port P100 direction register 				*/
+	 unsigned char	PD10_1:1;/* Port P101 direction register 				*/
+	 unsigned char	PD10_2:1;/* Port P102 direction register 				*/
+	 unsigned char	PD10_3:1;/* Port P103 direction register 				*/
+	 unsigned char	PD10_4:1;/* Port P104 direction register 				*/
+	 unsigned char	PD10_5:1;/* Port P105 direction register 				*/
+	 unsigned char	PD10_6:1;/* Port P106 direction register 				*/
+	 unsigned char	PD10_7:1;/* Port P107 direction register 				*/
+	} BIT;   		    	 /*        					     				*/
+		char BYTE;           /*  Byte Access 			     				*/
+};                           /* 						     				*/
+
+/*------------------------------------------------------
+    Port P11 direction register //0x03f7
+------------------------------------------------------*/
+union st_pd11 {              /* union PD11    	   		     				*/
+	struct {            	 /* Bit  Access 		   	  	 				*/
+	 unsigned char 	PD11_0:1;/* Port P110 direction register 				*/
+	 unsigned char	PD11_1:1;/* Port P111 direction register 				*/
+	 unsigned char	PD11_2:1;/* Port P112 direction register 				*/
+	 unsigned char	PD11_3:1;/* Port P113 direction register 				*/
+	 unsigned char	PD11_4:1;/* Port P114 direction register 				*/
+	 unsigned char	PD11_5:1;/* Port P115 direction register 				*/
+	 unsigned char	PD11_6:1;/* Port P116 direction register 				*/
+	 unsigned char	PD11_7:1;/* Port P117 direction register 				*/
+	} BIT;   		    	 /*        					     				*/
+		char BYTE;           /*  Byte Access 			     				*/
+};                           /* 						     				*/
+
+/*------------------------------------------------------
+    Port P12 register //0x03f8
+------------------------------------------------------*/
+union st_p12 {              /* union P12	    	   						*/
+	struct {            	/* Bit  Access 		   	  	    				*/
+	 unsigned char 	P12_0:1;/* Port P120 register							*/
+	 unsigned char	P12_1:1;/* Port P121 register 							*/
+	 unsigned char	P12_2:1;/* Port P122 register 							*/
+	 unsigned char	P12_3:1;/* Port P123 register 							*/
+	 unsigned char	P12_4:1;/* Port P124 register 							*/
+	 unsigned char	P12_5:1;/* Port P125 register 							*/
+	 unsigned char	P12_6:1;/* Port P126 register 							*/
+	 unsigned char	P12_7:1;/* Port P127 register 							*/
+	} BIT;   		    	/*        					    				*/
+	unsigned char BYTE;     /*  Byte Access 			    				*/
+};                          /* 						        */
+
+/*------------------------------------------------------
+    Port P13 register //0x03f9
+------------------------------------------------------*/
+union st_p13 {              /* union P13	    	   						*/
+	struct {            	/* Bit  Access 		   	  	    				*/
+	 unsigned char 	P13_0:1;/* Port P130 register							*/
+	 unsigned char	P13_1:1;/* Port P131 register 							*/
+	 unsigned char	P13_2:1;/* Port P132 register 							*/
+	 unsigned char	P13_3:1;/* Port P133 register 							*/
+	 unsigned char	P13_4:1;/* Port P134 register 							*/
+	 unsigned char	P13_5:1;/* Port P135 register 							*/
+	 unsigned char	P13_6:1;/* Port P136 register 							*/
+	 unsigned char	P13_7:1;/* Port P137 register 							*/
+	} BIT;   		    	/*        					    				*/
+	unsigned char BYTE;     /*  Byte Access 			    				*/
+};                          /* 						        */
+
+/*------------------------------------------------------
+    Port P12 direction register //0x03fa
+------------------------------------------------------*/
+union st_pd12 {              /* union PD12    	   		     				*/
+	struct {            	 /* Bit  Access 		   	  	 				*/
+	 unsigned char 	PD12_0:1;/* Port P120 direction register 				*/
+	 unsigned char	PD12_1:1;/* Port P121 direction register 				*/
+	 unsigned char	PD12_2:1;/* Port P122 direction register 				*/
+	 unsigned char	PD12_3:1;/* Port P123 direction register 				*/
+	 unsigned char	PD12_4:1;/* Port P124 direction register 				*/
+	 unsigned char	PD12_5:1;/* Port P125 direction register 				*/
+	 unsigned char	PD12_6:1;/* Port P126 direction register 				*/
+	 unsigned char	PD12_7:1;/* Port P127 direction register 				*/
+	} BIT;   		    	 /*        					     				*/
+		char BYTE;           /*  Byte Access 			     				*/
+};                           /* 						     				*/
+
+/*------------------------------------------------------
+    Port P13 direction register //0x03fb
+------------------------------------------------------*/
+union st_pd13 {              /* union PD13    	   		     				*/
+	struct {            	 /* Bit  Access 		   	  	 				*/
+	 unsigned char 	PD13_0:1;/* Port P130 direction register 				*/
+	 unsigned char	PD13_1:1;/* Port P131 direction register 				*/
+	 unsigned char	PD13_2:1;/* Port P132 direction register 				*/
+	 unsigned char	PD13_3:1;/* Port P133 direction register 				*/
+	 unsigned char	PD13_4:1;/* Port P134 direction register 				*/
+	 unsigned char	PD13_5:1;/* Port P135 direction register 				*/
+	 unsigned char	PD13_6:1;/* Port P136 direction register 				*/
+	 unsigned char	PD13_7:1;/* Port P137 direction register 				*/
+	} BIT;   		    	 /*        					     				*/
+		char BYTE;           /*  Byte Access 			     				*/
+};                           /* 						     				*/
+
+/*------------------------------------------------------
+    Pull-up control register 0 //0x03fc
+------------------------------------------------------*/
+union st_pur0 {            /* union PUR0    	   		   					*/
+	struct {               /* Bit  Access 		   	  	   					*/
+	 unsigned char 	PU00:1;/* P00 to P03 pull-up		   					*/
+	 unsigned char	PU01:1;/* P04 to P07 pull-up		   					*/
+	 unsigned char	PU02:1;/* P10 to P13 pull-up		   					*/
+	 unsigned char	PU03:1;/* P14 to P17 pull-up		   					*/
+	 unsigned char	PU04:1;/* P20 to P23 pull-up		   					*/
+	 unsigned char	PU05:1;/* P24 to P27 pull-up		   					*/
+	 unsigned char	PU06:1;/* P30 to P33 pull-up		   					*/
+	 unsigned char	PU07:1;/* P34 to P37 pull-up		   					*/
+	} BIT;   		       /*        					   					*/
+	unsigned char BYTE;    /*  Byte Access 			   	   					*/
+};                         /* 						       					*/
+
+/*------------------------------------------------------
+    Pull-up control register 1 //0x03fd
+------------------------------------------------------*/
+union st_pur1 {            /* union PUR1    	   		   					*/
+	struct {           	   /* Bit  Access 		   	  	   					*/
+	 unsigned char 	PU10:1;/* P40 to P43 pull-up 		   					*/
+	 unsigned char	PU11:1;/* P44 to P47 pull-up 		   					*/
+	 unsigned char	PU12:1;/* P50 to P53 pull-up 		   					*/
+	 unsigned char	PU13:1;/* P54 to P57 pull-up 		   					*/
+	 unsigned char	PU14:1;/* P60 to P63 pull-up 		   					*/
+	 unsigned char	PU15:1;/* P64 to P67 pull-up 		   					*/
+	 unsigned char	PU16:1;/* P70 to P73 pull-up (Except P70,P71 ; P70,P71 -> N-channel open drain ports)*/
+	 unsigned char	PU17:1;/* P74 to P77 pull-up 		   					*/
+	} BIT;   		       /*        					   					*/
+	unsigned char BYTE;    /*  Byte Access 			   						*/
+};                         /* 						       					*/
+
+/*------------------------------------------------------
+    Pull-up control register 2 //0x03fe
+------------------------------------------------------*/
+union st_pur2 {            /* union PUR2    	   		     				*/
+	struct {           	   /* Bit  Access 		   	  	     				*/
+	 unsigned char 	PU20:1;/* P80 to P83 pull-up 			 				*/
+	 unsigned char	PU21:1;/* P84 to P87 pull-up (Except P85)				*/
+	 unsigned char	PU22:1;/* P90 to P93 pull-up 			 				*/
+	 unsigned char	PU23:1;/* P94 to P97 pull-up			 				*/
+	 unsigned char	PU24:1;/* P100 to P103 pull-up 			 				*/
+	 unsigned char	PU25:1;/* P104 to P107 pull-up 			 				*/
+	 unsigned char		:1;/* Nothing assigned 				 				*/
+	 unsigned char		:1;/* Nothing assigned 				 				*/
+	} BIT;   		   	   /*        					     				*/
+	unsigned char BYTE;    /*  Byte Access 			   		 				*/
+};                         /* 						         				*/
+
+/*------------------------------------------------------
+    Port control register //0x03ff
+------------------------------------------------------*/
+union st_pcr {             /* union PCR2    	   		     				*/
+	struct {           	   /* Bit  Access 		   	  	     				*/
+	 unsigned char 	PCR0:1;/* Port P1 control register 		 				*/
+	 unsigned char		:1;/* Nothing assigned 				 				*/
+	 unsigned char		:1;/* Nothing assigned 				 				*/
+	 unsigned char		:1;/* Nothing assigned 				 				*/
+	 unsigned char		:1;/* Nothing assigned 				 				*/
+	 unsigned char		:1;/* Nothing assigned 				 				*/
+	 unsigned char		:1;/* Nothing assigned 				 				*/
+	 unsigned char		:1;/* Nothing assigned 				 				*/
+	} BIT;   		   	   /*        					     				*/
+	unsigned char BYTE;    /*  Byte Access 			   		 				*/
+};                         /* 						         				*/
+
+
+
+
+/* Processor mode register 0 */
+#define PM0   (*(volatile union st_pm0 *)(0x0004))
+
+/* Processor mode register 1 */
+#define PM1   (*(volatile union st_pm1 *)(0x0005))
+
+/* System clock control register 0 */
+#define CM0   (*(volatile union st_cm0 *)(0x0006))
+
+/* System clock control register 1 */
+#define CM1   (*(volatile union st_cm1 *)(0x0007))
+
+/* Chip select control register */
+#define CSR   (*(volatile union st_csr *)(0x0008))
+
+/* Address match interrupt enable register */
+#define AIER  (*(volatile union st_aier *)(0x0009))
+
+/* Protect register */
+#define PRCR  (*(volatile union st_prcr *)(0x000A))
+
+/* Data bank register */
+#define DBR  (*(volatile union st_dbr *)(0x000B))
+
+/* Oscillation stop detection register */
+#define CM2  (*(volatile union st_cm2 *)(0x000C))
+
+/* Watchdog timer start register */
+#define WDTS  (*(volatile char *)(0x000E))
+
+/* Watchdog timer control register */
+#define WDC  (*(volatile union st_wdc *)(0x000F))
+
+/* Address match interrupt register 0 */
+#define RMAD0 (*(volatile union st_rmad0 *)(0x0010))
+
+/* Address match interrupt register 1 */
+#define RMAD1 (*(volatile union st_rmad1 *)(0x0014))
+
+/* Voltage detection register 1 */
+#define VCR1 (*(volatile union st_vcr1 *)(0x0019))
+
+/* Voltage detection register 2 */
+#define VCR2 (*(volatile union st_vcr2 *)(0x001A))
+
+/* Chip select expansion control register */
+#define CSE (*(volatile union st_cse *)(0x001B))
+
+/* PLC control register 0 */
+#define PLC0 (*(volatile union st_plc0 *)(0x001C))
+
+/* Processor mode register 2 */
+#define PM2 (*(volatile union st_pm2 *)(0x001E))
+
+/* Power supply down detection register */
+#define D4INT (*(volatile union st_d4int *)(0x001F))
+
+/* DMA0 source pointer */
+#define SAR0  (*(volatile union st_sar0 *)(0x0020))
+
+/* DMA0 destination pointer */
+#define DAR0  (*(volatile union st_dar0 *)(0x0024))
+
+/* DMA0 transfer counter */
+#define TCR0  (*(volatile union st_tcr0  *)(0x0028))
+
+ /* DMA0 control register */
+#define DM0CON (*(volatile union st_dm0con  *)(0x002C))
+
+/* DMA1 source pointer */
+#define SAR1  (*(volatile union st_sar1 *)(0x0030))
+
+/* DMA1 destination pointer */
+#define DAR1  (*(volatile union st_dar1 *)(0x0034))
+
+ /* DMA1 transfer counter */
+#define TCR1  (*(volatile union st_tcr1 *)(0x0038))
+
+/* DMA1 control register */
+#define DM1CON  (*(volatile union st_dm1con *)(0x003c))
+
+
+/* INT3~ interrupt control register */
+#define INT3IC  (*(volatile union st_icr *)(0x0044))
+
+/* Timer B5 interrupt control register */
+#define TB5IC  (*(volatile union st_icr1 *)(0x0045))
+
+/* Timer B4 interrupt control register */
+#define TB4IC (*(volatile union st_icr1 *)(0x0046))
+
+/* Timer B3 interrupt control register */
+#define TB3IC (*(volatile union st_icr1 *)(0x0047))
+
+/* UART1 BUS collision detection interrupt control register */
+#define U1BCNIC  (*(volatile union st_icr1 *)(0x0046))
+
+/* UART0 BUS collision detection interrupt control register */
+#define U0BCNIC  (*(volatile union st_icr1 *)(0x0047))
+
+/* SI/O4 interrupt control register */
+#define S4IC  (*(volatile union st_icr *)(0x0048))
+
+/* SI/O3 interrupt control register */
+#define S3IC  (*(volatile union st_icr *)(0x0049))
+
+/* INT5~ interrupt control register */
+#define INT5IC  (*(volatile union st_icr *)(0x0048))
+
+/* INT4~ interrupt control register */
+#define INT4IC  (*(volatile union st_icr *)(0x0049))
+
+/* Bus collision detection interrupt control register */
+#define BCNIC  (*(volatile union st_bcnic *)(0x004a))
+
+/* DMA0 interrupt control register */
+#define DM0IC  (*(volatile union st_dm0ic *)(0x004b))
+
+/* DMA1 interrupt control register */
+#define DM1IC  (*(volatile union st_icr1 *)(0x004c))
+
+/* Key input interrupt control register */
+#define KUPIC  (*(volatile union st_icr1 *)(0x004D))
+
+/* A/D conversion interrupt control register */
+#define ADIC  (*(volatile union st_icr1 *)(0x004E))
+
+/* UART2 transmit interrupt control register */
+#define S2TIC  (*(volatile union st_icr1 *)(0x004F))
+
+/* UART2 receive interrupt control register */
+#define S2RIC  (*(volatile union st_icr1 *)(0x0050))
+
+/* UART0 transmit interrupt control register */
+#define S0TIC  (*(volatile union st_icr1 *)(0x0051))
+
+/* UART0 receive interrupt control register */
+#define S0RIC  (*(volatile union st_icr1 *)(0x0052))
+
+/* UART1 transmit interrupt control register */
+#define S1TIC (*(volatile union st_icr1 *)(0x0053))
+
+/* UART1 receive interrupt control register */
+#define S1RIC  (*(volatile union st_icr1 *)(0x0054))
+
+/* Timer A0 interrupt control register */
+#define TA0IC  (*(volatile union st_icr1 *)(0x0055))
+
+/* Timer A1 interrupt control register */
+#define TA1IC  (*(volatile union st_icr1 *)(0x0056))
+
+/* Timer A2 interrupt control register */
+#define TA2IC (*(volatile union st_icr1 *)(0x0057))
+
+/* Timer A3 interrupt control register */
+#define TA3IC  (*(volatile union st_icr1 *)(0x0058))
+
+/* Timer A4 interrupt control register */
+#define TA4IC  (*(volatile union st_icr1 *)(0x0059))
+
+/* Timer B0 interrupt control register */
+#define TB0IC  (*(volatile union st_icr1 *)(0x005A))
+
+/* Timer B1 interrupt control register */
+#define TB1IC  (*(volatile union st_icr1 *)(0x005B))
+
+/* Timer B2 interrupt control register */
+#define TB2IC  (*(volatile union st_icr1 *)(0x005C))
+
+/* INT0~ interrupt control register */
+#define INT0IC (*(volatile union st_icr *)(0x005D))
+
+/* INT1~ interrupt control register */
+#define INT1IC  (*(volatile union st_icr *)(0x005E))
+
+/* INT2~ interrupt control register */
+#define INT2IC  (*(volatile union st_icr *)(0x005F))
+
+/* Flash identification register */
+#define FIDR  (*(volatile union st_fidr *)(0x01b4))
+
+/* Flash memory control register 1 */
+#define FMR1  (*(volatile union st_fmr1 *)(0x01b5))
+
+/* Flash memory control register 0 */
+#define FMR0  (*(volatile union st_fmr0 *)(0x01b7))
+
+/* Address match interrupt register 2 */
+#define RMAD2  (*(volatile union st_rmad2 *)(0x01b8))
+
+/* Address match interrupt enable register 2 */
+#define AIER2  (*(volatile union st_aier2 *)(0x01bb))
+
+/* Address match interrupt register 3 */
+#define RMAD3  (*(volatile union st_rmad3 *)(0x01bc))
+
+/* Peripheral clock select register */
+#define PCLKR  (*(volatile union st_pclkr *)(0x025e))
+
+/* Timer B3,4,5 count start flag */
+#define TBSR  (*(volatile union st_tbsr *)(0x0340))
+
+
+/********************************************************
+*   declare  SFR short                                  *
+********************************************************/
+/*--------------------------------------------------------
+    Timer registers : Read and write data in 16-bit units.
+--------------------------------------------------------*/
+
+/* Timer A1-1 register */
+#define TA1_1  (*(volatile unsigned short *)(0x0342))
+
+/* Timer A2-1 register */
+#define TA2_1  (*(volatile unsigned short *)(0x0344))
+
+/* Timer A4-1 register */
+#define TA4_1  (*(volatile unsigned short *)(0x0346))
+
+/* Three-phase PWM control regester 0 */
+#define INVC0  (*(volatile union st_invc0 *)(0x0348))
+
+ /* Three-phase PWM control register 1 */
+#define INVC1  (*(volatile union st_invc1 *)(0x0349))
+
+/* Three-phase output buffer register 0 */
+#define IDB0  (*(volatile union st_idb0 *)(0x034a))
+
+/* Three-phase output buffer register 1 */
+#define IDB1  (*(volatile union st_idb1 *)(0x034b))
+
+/*------------------------------------------------------
+     Dead time timer ; Use "MOV" instruction when writing to this register.
+------------------------------------------------------*/
+/* Dead time timer */
+#define DTT  (*(volatile unsigned char *)(0x034c))
+
+/*------------------------------------------------------------------
+   Timer B2 interrupt occurrences frequency set counter
+   ; Use "MOV" instruction when writing to this register.
+-------------------------------------------------------------------*/
+/* Timer B2 interrupt occurrences frequency set counter */
+#define ICTB2  (*(volatile unsigned char *)(0x034d))
+
+
+/* Timer B3 register */
+#define TB3  (*(volatile unsigned short *)(0x0350))
+
+/* Timer B4 register */
+#define TB4  (*(volatile unsigned short *)(0x0352))
+
+/* Timer B5 register */
+#define TB5  (*(volatile unsigned short *)(0x0354))
+
+/* Timer B3 mode register */
+#define TB3MR  (*(volatile union st_tmr *)(0x035b))
+
+/* Timer B4 mode register */
+#define TB4MR  (*(volatile union st_tmr *)(0x035c))
+
+/* Timer B5 mode register */
+#define TB5MR  (*(volatile union st_tmr *)(0x035d))
+
+/* Interrupt request cause select register 2 */
+#define IFSR2A  (*(volatile union st_ifsr2a *)(0x035e))
+
+/* Interrupt cause select register */
+#define IFSR  (*(volatile union st_ifsr *)(0x035f))
+
+/* SI/O3i transmit/receive register (i=3,4)*/
+#define S3TRR  (*(volatile unsigned char *)(0x0360))
+
+/* SI/O3 control register */
+#define S3C  (*(volatile union st_s3c *)(0x0362))
+
+
+/* SI/O3 bit rate generator (Use "MOV" instruction when writing to these registers)*/
+#define S3BRG  (*(volatile unsigned char *)(0x0363))
+
+
+/* SI/O4 transmit/receive register */
+#define S4TRR  (*(volatile unsigned char *)(0x0364))
+
+/* SI/O4 control register */
+#define S4C  (*(volatile union st_s4c *)(0x0366))
+
+/* SI/O4 bit rate generator */
+#define S4BRG  (*(volatile unsigned char *)(0x0367))
+
+/* UART0 special mode register 4 */
+#define U0SMR4  (*(volatile union st_u0smr4 *)(0x036c))
+
+/* UART0 special mode register 3 */
+#define U0SMR3  (*(volatile union st_u0smr3 *)(0x036d))
+
+
+/* UART0 special mode register 2 */
+#define U0SMR2  (*(volatile union st_u0smr2 *)(0x036e))
+
+/* UART0 special mode register  */
+#define U0SMR  (*(volatile union st_u0smr *)(0x036f))
+
+/* UART1 special mode register 4 */
+#define U1SMR4  (*(volatile union st_u1smr4 *)(0x0370))
+
+/* UART1 special mode register 3 */
+#define U1SMR3  (*(volatile union st_u1smr3 *)(0x0371))
+
+/* UART1 special mode register 2 */
+#define U1SMR2  (*(volatile union st_u1smr2 *)(0x0372))
+
+/* UART1 special mode register  */
+#define U1SMR  (*(volatile union st_u1smr *)(0x0373))
+
+/* UART2 special mode register 4  */
+#define U2SMR4  (*(volatile union st_u2smr4 *)(0x0374))
+
+/* UART2 special mode register 3 */
+#define U2SMR3  (*(volatile union st_u2smr3 *)(0x0375))
+
+
+/* UART2 special mode register 2 */
+#define U2SMR2  (*(volatile union st_u2smr2 *)(0x0376))
+
+/* UART2 special mode register */
+#define U2SMR  (*(volatile union st_u2smr *)(0x0377))
+
+/* UART2 transmit/receive mode register */
+#define U2MR  (*(volatile union st_u2mr *)(0x0378))
+
+/* UART2 bit rate generator */
+#define U2BRG  (*(volatile unsigned char *)(0x0379))
+
+/* UART2 transmit buffer register */
+#define U2TB  (*(volatile union st_u2tb *)(0x037a))
+
+/* UART2 transmit/receive control register 0 */
+//#pragma ADDRESS     u2c0_addr   037cH
+#define U2C0  (*(volatile union st_u2c0 *)(0x037c))
+
+/* UART2 transmit/receive control register 1 */
+#define U2C1  (*(volatile union st_u2c1 *)(0x037d))
+
+/* UART2 receive buffer register */
+#define U2RB  (*(volatile union st_u2rb *)(0x037e))
+
+/* Count start flag */
+#define TABSR  (*(volatile union st_tabsr *)(0x0380))
+
+/* Clock prescaler reset flag */
+#define CPSRF  (*(volatile union st_cpsrf *)(0x0381))
+
+
+/* One-shot start flag */
+#define ONSF  (*(volatile union st_onsf *)(0x0382))
+
+
+/* Trigger select register */
+#define TRGSR  (*(volatile union st_trgsr *)(0x0383))
+
+
+/* Up/down flag (Use "MOV" instruction when writing to this register.)*/
+#define UDF  (*(volatile unsigned char *)(0x0384))
+
+/* Timer A0 register */
+#define TA0 (*(volatile unsigned short  *)(0x0386))
+
+/* Timer A1 register */
+#define TA1 (*(volatile unsigned short  *)(0x0388))
+
+/* Timer A2 register */
+#define TA2 (*(volatile unsigned short  *)(0x038a))
+
+/* Timer A3 register */
+#define TA3 (*(volatile unsigned short  *)(0x038c))
+
+/* Timer A4 register */
+#define TA4 (*(volatile unsigned short  *)(0x038e))
+
+/* Timer B0 register */
+#define TB0 (*(volatile unsigned short  *)(0x0390))
+
+/* Timer B1 register */
+#define TB1 (*(volatile unsigned short  *)(0x0392))
+
+/* Timer B2 register */
+#define TB2 (*(volatile unsigned short  *)(0x0394))
+
+
+
+ /* Timer A0 mode register */
+#define TA0MR  (*(volatile union st_tmr *)(0x0396))
+
+/* Timer A1 mode register */
+#define TA1MR  (*(volatile union st_tmr *)(0x0397))
+
+/* Timer A2 mode register */
+#define TA2MR  (*(volatile union st_tmr *)(0x0398))
+
+/* Timer A3 mode register */
+#define TA3MR  (*(volatile union st_tmr *)(0x0399))
+
+/* Timer A4 mode register */
+#define TA4MR  (*(volatile union st_tmr *)(0x039A))
+
+/* Timer B0 mode register */
+#define TB0MR  (*(volatile union st_tmr *)(0x039b))
+
+/* Timer B1 mode register */
+#define TB1MR  (*(volatile union st_tmr *)(0x039c))
+
+/* Timer B2 mode register */
+#define TB2MR  (*(volatile union st_tmr *)(0x039d))
+
+/* Timer B2 special mode register */
+#define TB2SC  (*(volatile union st_tb2sc *)(0x039e))
+
+/* UART0 transmit/receive mode register */
+#define U0MR  (*(volatile union st_u0mr *)(0x03a0))
+
+/* UART0 bit rate generator (Use "MOV" instruction when writing to these registers.)*/
+#define U0BRG  (*(volatile unsigned char *)(0x03a1))
+
+/* UART0 transmit buffer register */
+#define U0TB  (*(volatile union st_u0tb *)(0x03a2))
+
+/* UART0 transmit/receive control register 0 */
+#define U0C0  (*(volatile union st_u0c0 *)(0x03a4))
+
+ /* UART0 transmit/receive control register 1 */
+#define U0C1  (*(volatile union st_u0c1 *)(0x03a5))
+
+/* UART0 receive buffer register */
+#define U0RB  (*(volatile union st_u0rb *)(0x03a6))
+
+/* UART1 transmit/receive mode register */
+#define U1MR  (*(volatile union st_u1mr *)(0x03a8))
+
+/* UART1 bit rate generator */
+#define U1BRG  (*(volatile unsigned char *)(0x03a9))
+
+ /* UART1 transmit buffer register */
+#define U1TB  (*(volatile union st_u1tb *)(0x03aa))
+
+/* UART1 transmit/receive control register 0 */
+#define U1C0  (*(volatile union st_u1c0 *)(0x03ac))
+
+ /* UART1 transmit/receive control register 1 */
+#define U1C1  (*(volatile union st_u1c1 *)(0x03ad))
+
+ /* UART1 receive buffer register */
+#define U1RB  (*(volatile union st_u1rb *)(0x03ae))
+
+/* UART transmit/receive control register 2 */
+#define UCON  (*(volatile union st_ucon *)(0x03b0))
+
+/* DMA0 cause select register */
+#define DM0SL  (*(volatile union st_dm0sl *)(0x03b8))
+
+/* DMA1 cause select register */
+#define DM1SL  (*(volatile union st_dm1sl *)(0x03ba))
+
+/* CRC data register */
+#define CRCD  (*(volatile union st_crcd *)(0x03bc))
+
+/* CRC input register */
+#define CRCIN  (*(volatile unsigned char *)(0x03be))
+
+/* A/D register 0 */
+#define AD0  (*(volatile union st_ad0 *)(0x03c0))
+
+/* A/D register 1 */
+#define AD1  (*(volatile union st_ad1 *)(0x03c2))
+
+/* A/D register 2 */
+#define AD2  (*(volatile union st_ad2 *)(0x03c4))
+
+/* A/D register 3 */
+#define AD3  (*(volatile union st_ad3 *)(0x03c6))
+
+/* A/D register 4 */
+#define AD4  (*(volatile union st_ad4 *)(0x03c8))
+
+/* A/D register 5 */
+#define AD5  (*(volatile union st_ad5 *)(0x03ca))
+
+/* A/D register 6 */
+#define AD6  (*(volatile union st_ad6 *)(0x03cc))
+
+ /* A/D register 7 */
+#define AD7  (*(volatile union st_ad7 *)(0x03ce))
+
+/* A/D control register 2 */
+#define ADCON2  (*(volatile union st_adcon2 *)(0x03d4))
+
+/* A/D control register 0 */
+#define ADCON0  (*(volatile union st_adcon0 *)(0x03d6))
+
+/* A/D control register 1 */
+#define ADCON1  (*(volatile union st_adcon1 *)(0x03d7))
+
+/* D/A register 0 */
+#define DA0  (*(volatile unsigned char *)(0x03d8))
+
+/* D/A register 1 */
+#define DA1  (*(volatile unsigned char *)(0x03da))
+
+/* D/A control register */
+#define DACON  (*(volatile union st_dacon *)(0x03dc))
+
+/* Port P14 control register */
+#define PC14  (*(volatile union st_pc14 *)(0x03de))
+
+/* Pull-up control register 3 */
+#define PUR3  (*(volatile union st_pur3 *)(0x03df))
+
+
+/* Port P0 register */
+#define P0  (*(volatile union st_p0 *)(0x03e0))
+
+/* Port P1 register */
+#define P1  (*(volatile union st_p1 *)(0x03e1))
+
+/* Port P0 direction register */
+#define PD0  (*(volatile union st_pd0 *)(0x03e2))
+
+/* Port P1 direction register */
+#define PD1  (*(volatile union st_pd1 *)(0x03e3))
+
+/* Port P2 register */
+#define P2  (*(volatile union st_p2 *)(0x03e4))
+
+/* Port P3 register */
+#define P3  (*(volatile union st_p3 *)(0x03e5))
+
+/* Port P2 direction register */
+#define PD2  (*(volatile union st_pd2 *)(0x03e6))
+
+/* Port P3 direction register */
+#define PD3  (*(volatile union st_pd3 *)(0x03e7))
+
+
+ /* Port P4 register */
+#define P4  (*(volatile union st_p4 *)(0x03e8))
+
+/* Port P5 register */
+#define P5  (*(volatile union st_p5 *)(0x03e9))
+
+/* Port P4 direction register */
+#define PD4  (*(volatile union st_pd4 *)(0x03ea))
+
+/* Port P5 direction register */
+#define PD5  (*(volatile union st_pd5 *)(0x03eb))
+
+/* Port P6 register */
+#define P6  (*(volatile union st_p6 *)(0x03ec))
+
+/* Port P7 register */
+#define P7  (*(volatile union st_p7 *)(0x03ed))
+
+/* Port P6 direction register */
+#define PD6  (*(volatile union st_pd6 *)(0x03ee))
+
+/* Port P7 direction register */
+#define PD7  (*(volatile union st_pd7 *)(0x03ef))
+
+/* Port P8 register */
+#define P8  (*(volatile union st_p8 *)(0x03f0))
+
+/* Port P9 register */
+#define P9  (*(volatile union st_p9 *)(0x03f1))
+
+/* Port P8 direction register */
+#define PD8  (*(volatile union st_pd8 *)(0x03f2))
+
+/* Port P9 direction register */
+#define PD9  (*(volatile union st_pd9 *)(0x03f3))
+
+/* Port P10 register */
+#define P10  (*(volatile union st_p10 *)(0x03f4))
+
+/* Port P11 register */
+#define P11  (*(volatile union st_p11 *)(0x03f5))
+
+/* Port P10 direction register */
+#define PD10  (*(volatile union st_pd10 *)(0x03f6))
+
+/* Port P11 direction register */
+#define PD11  (*(volatile union st_pd11 *)(0x03f7))
+
+/* Port P12 register */
+#define P12  (*(volatile union st_p12 *)(0x03f8))
+
+/* Port P13 register */
+#define P13  (*(volatile union st_p13 *)(0x03f9))
+
+/* Port P12 direction register */
+#define PD12  (*(volatile union st_pd12 *)(0x03fa))
+
+/* Port P13 direction register */
+#define PD13  (*(volatile union st_pd13 *)(0x03f7))
+
+ /* Pull-up control register 0 */
+#define PUR0  (*(volatile union st_pur0 *)(0x03fc))
+
+/* Pull-up control register 1 */
+#define PUR1  (*(volatile union st_pur1 *)(0x03fd))
+
+ /* Pull-up control register 2 */
+#define PUR2  (*(volatile union st_pur2 *)(0x03fe))
+
+/* Port control register */
+#define PCR  (*(volatile union st_pcr *)(0x03ff))
+
+
+
+
+
+

+ 167 - 0
bsp/m16c62p/m16c62p.ld

@@ -0,0 +1,167 @@
+MEMORY
+{
+  ram (rw) : o = 0x0000400, l = 31k
+  rom (rx) : o = 0x00A0000, l = 384k
+  nrom(rx) : o = 0x0000F000, l = 4k
+  xram(rw) : o = 0x00028000, l = 4k
+}
+
+_system_stack_size = 0x800;
+
+SECTIONS
+{
+	/* Variable Vector Section */
+	.var_vects 0x000FA000 :	
+	{
+		KEEP(*( .var_vects))
+	} > rom
+	
+	.text 0x000DD000 :
+	{
+		*(.text)
+		*(.text.*)
+
+		/* section information for finsh shell */
+		. = ALIGN(4);
+		___fsymtab_start = .;
+		KEEP(*(FSymTab))
+		___fsymtab_end = .;
+		. = ALIGN(4);
+		___vsymtab_start = .;
+		KEEP(*(VSymTab))
+		___vsymtab_end = .;
+		. = ALIGN(4);
+
+		etext = .;
+	} > rom
+	
+	.rodata : 
+	{
+		_rodata = .;
+		*(.rodata)
+		*(.rodata.*)	
+		*(.frodata)
+		_erodata = .;
+	} > rom
+
+	.init :
+	{
+		*(.init)
+	} > rom
+
+	.fini :
+	{
+		*(.fini)
+	} > rom
+
+	.got :
+	{
+		*(.got)
+		*(.got.plt)
+	} > rom
+	
+	.eh_frame_hdr :
+	{
+		*(.eh_frame_hdr)
+	} > rom
+
+	.eh_frame :
+	{
+		*(.eh_frame)
+	} > rom
+
+	.jcr :
+	{
+		*(.jcr)
+	} > rom
+
+	.tors :
+	{
+		__CTOR_LIST__ = .;
+		___ctors = .;
+		*(.ctors)
+		___ctors_end = .;
+		__CTOR_END__ = .;
+		__DTOR_LIST__ = .;
+		___dtors = .;
+		*(.dtors)
+		___dtors_end = .;
+		__DTOR_END__ = .;
+		_mdata = .;
+	} > rom
+	
+	.data 0x00000400 : AT (_mdata)
+	{
+		_data = .;
+		*(.data)
+		*(.data.*)
+		*(.ndata)
+		*(.ndata.*)
+		*(.plt)
+		_edata = .;
+	} > ram
+	
+	.bss :
+	{
+		_bss = .;
+		*(.bss)
+		*(COMMON)
+		*(.nbss)
+		_ebss = .;
+		_end = .;
+	} > ram
+
+	.gcc_exc :
+	{
+		*(.gcc_exc)
+	} > ram
+	
+	/* User Stack Pointer */
+/*
+	.ustack 0x00003000 :
+	{
+		_ustack = .;
+	} > ram
+*/
+
+	/* Interrupt Stack Pointer */
+	.istack :
+	{
+		. = . + _system_stack_size;
+		. = ALIGN(4);
+		_istack = .;
+	} > ram
+
+        . = ALIGN(4);
+	_user_ram_end = .;
+	
+	.nrodata 0x0000F000 : 
+	{
+		_nrodata = .;
+		*(.nrodata)
+		*(.nrodata.*)
+		_enrodata = .;
+	} > nrom	
+	
+	.fdata 0x00028000 : AT (_mdata + SIZEOF(.data))
+	{
+		_fdata = .;
+		*(.fdata)
+		*(.fdata.*)
+		_efdata = .;
+	} > xram
+	.fbss :
+	{
+		_fbss = .;
+		*(.fbss)
+		*(.fbss.*)
+		_efbss = .;
+	} > xram
+
+	/* Fixed Vector Section */
+	.vects 0x000FFFDC :	
+	{
+		KEEP(*( .vects))
+	} > rom
+
+}

+ 1 - 73
bsp/m16c62p/rtconfig.h

@@ -75,78 +75,6 @@
 ///#define FINSH_USING_SYMTAB
 ///#define FINSH_USING_DESCRIPTION
 
-/* SECTION: device filesystem support */
-/* #define RT_USING_DFS */
-///#define RT_USING_DFS_ELMFAT
-
-/* the max number of mounted filesystem */
-///#define DFS_FILESYSTEMS_MAX			2
-/* the max number of opened files 		*/
-///#define DFS_FD_MAX					4
-/* the max number of cached sector 		*/
-///#define DFS_CACHE_MAX_NUM   		4
-
-/* SECTION: lwip, a lighwight TCP/IP protocol stack */
-//#define RT_USING_LWIP
-
-/* Enable ICMP protocol*/
-///#define RT_LWIP_ICMP
-/* Enable UDP protocol*/
-///#define RT_LWIP_UDP
-/* Enable TCP protocol*/
-///#define RT_LWIP_TCP
-/* Enable DNS */
-///#define RT_LWIP_DNS
-
-/* the number of simulatenously active TCP connections*/
-///#define RT_LWIP_TCP_PCB_NUM	5
-
-/* ip address of target*/
-///#define RT_LWIP_IPADDR0	192
-///#define RT_LWIP_IPADDR1	168
-///#define RT_LWIP_IPADDR2	1
-///#define RT_LWIP_IPADDR3	30
-
-/* gateway address of target*/
-#define RT_LWIP_GWADDR0	192
-#define RT_LWIP_GWADDR1	168
-#define RT_LWIP_GWADDR2	1
-#define RT_LWIP_GWADDR3	1
-
-/* mask address of target*/
-#define RT_LWIP_MSKADDR0	255
-#define RT_LWIP_MSKADDR1	255
-#define RT_LWIP_MSKADDR2	255
-#define RT_LWIP_MSKADDR3	0
-
-/* tcp thread options */
-#define RT_LWIP_TCPTHREAD_PRIORITY		12
-#define RT_LWIP_TCPTHREAD_MBOX_SIZE		4
-#define RT_LWIP_TCPTHREAD_STACKSIZE		1024
-
-/* ethernet if thread options */
-#define RT_LWIP_ETHTHREAD_PRIORITY		15
-#define RT_LWIP_ETHTHREAD_MBOX_SIZE		4
-#define RT_LWIP_ETHTHREAD_STACKSIZE		512
-
-/* SECTION: RT-Thread/GUI */
-/* #define RT_USING_RTGUI */
-
-/* name length of RTGUI object */
-#define RTGUI_NAME_MAX		12
-/* support 16 weight font */
-#define RTGUI_USING_FONT16
-/* support Chinese font */
-#define RTGUI_USING_FONTHZ
-/* use DFS as file interface */
-#define RTGUI_USING_DFS_FILERW
-/* use font file as Chinese font */
-#define RTGUI_USING_HZ_FILE
-/* use small size in RTGUI */
-#define RTGUI_USING_SMALL_SIZE
-/* use mouse cursor */
-/* #define RTGUI_USING_MOUSE_CURSOR */
-/* default font size in RTGUI */
-#define RTGUI_DEFAULT_FONT_SIZE	16
+//#define RT_USING_NEWLIB
 
 #endif

+ 164 - 0
bsp/m16c62p/start.S

@@ -0,0 +1,164 @@
+/****************************************************************
+KPIT Cummins Infosystems Ltd, Pune, India. 
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*****************************************************************/
+
+/* Start-up code for M16C targets only */
+
+.text
+	.global	_start
+	.type	_start, @function
+	
+_start:
+	ldc	#_istack, isp	/* set interrupt stack pointer */
+
+#ifndef EXT_RAM
+ 
+        mov.b	#0x02,0x0a	 	/* write enable in protect register */
+	mov.b	#0x00,0x04		/* set processer mode  :single chip mode */
+					/* 0x04 is the address of processor mode register 0 */
+	mov.b	#0x00,0x0a		/* write disable in protect register */
+#endif
+
+#if EXT_RAM 
+        mov.w #0x000a,a0		  /* Write enable in protect register */
+        mov.b #0xff,[a0]		 
+        
+        mov.w #0x04,a0			  /* Memory expansion mode, WRH/WRL/RD signals */
+        mov.b #0x05,[a0]
+
+        mov.w #0x05,a0			  /* Insert wait, no limit in on-chip memory */
+        mov.b #0x88,[a0]		  
+
+        mov.w #0x08,a0			  /* Enable all the CS signals with wait */
+        mov.b #0x0F,[a0]
+
+        mov.w #0x0a,a0			 /* write disable in protect register */
+        mov.b #0x00,[a0]
+#endif
+
+;	ldc	#0x0080,flg		/* select USER STACK POINTER (BIT7=1,USP) (BIT7=0,ISP) */
+;	ldc	#_ustack,sp		/* set user stack pointer */
+	
+	/* INTERRUPT VECTOR ADDRESS  definition	*/
+	ldc 	#0xF, intbh	/* load upper 4 bits of variable vector address in intbh */
+	ldc 	#0xA000, intbl	/* load lower 16 bits of variable vector address in intbl */
+
+	fset	I			/* ADD THIS TO ENABLE INTERRUPTS */
+		
+	/* call the hardware initialiser */
+;	jsr.a	 _hw_initialise
+	
+
+
+/* load data section from ROM to RAM */
+         
+ 	mov.b	#%hi8(_mdata),r1h	/* move upper 4 bits of the 20 bit address (_mdata) to, r1h */
+	mov.w	#%lo16(_mdata),a0	/* move lower 16 bits of the 20 bit address (_mdata) to,a0 */	
+	mov.w	#_data,a1		/* store the start address of data section in, A1 */
+	mov.w	#_edata,r3		/* store the end address of data section in R3 */
+	sub.w	a1,r3			/* R3=R3-A1. Store size of data section in R3 */
+	mov.w	r3,r2			/* Store size of data section in R2 */
+	smovf.b
+
+/* bss initialisation : zero out bss */
+
+	mov.b	#0x00,R0L  		/* load R0L reg with 0x0 (value at which bss section will be initialised) */
+	mov.w	#_bss, a1  		/* store the start address of bss in A1 */
+	mov.w	#_ebss, a0 		/* store the end address of bss in A0 */
+	sub.w   a1,a0	   		/* (A0 = A0-A1) */
+	mov.w   a0,r3	   		/* Store size of bss section in reg R3 */
+	sstr.b
+
+#if EXT_RAM
+/* load fdata section from ROM to External RAM only if EXT_RAM is defined */
+
+        pushc   sp                	/*store stack pointer in stack */
+        popc    fb                	/*copy the stack pointer in frame base register */
+
+	push.w  #%hi16(_mdata)    	/* offset of -2 from fb: store higher 16 bits of _mdata */
+	push.w  #%lo16(_mdata)    	/* offset of -4 from fb: store lower 16 bits of _mdata */
+        
+	mov.w	#_edata,r0        	/* end address of data section */
+	mov.w	#_data,r1         	/* start address of data section */
+	sub.w	r1,r0             	/* size of data section in r0 */
+
+	add.w	r0,-4[fb]         	/* store the lower 16 bits of source address on stack */
+	adc.w   #0,-2[fb]         	/* store the higher 4 bits of source address on stack */
+
+        push.w  #%hi16(_fdata)    	/* offset -6 from fp: store the higher 4 bits of destination address on stack */
+        push.w  #%lo16(_fdata)     	/* offset -8 from fp: store the lower 16 bits of destination address on stack */
+        
+                
+        push.w	#%hi16(_efdata)   	/* offset -10 from fp: higher 16 bits of _efdata */
+	push.w	#%lo16(_efdata)   	/* offset -12 from fp: lower 16 bits of _efdata */
+	
+label1:	
+        cmp.w   -6[fb],-10[fb]    	/* Compare higher 16 bits of _fdata and _efdata */
+        jnz     label2
+        cmp.w   -8[fb],-12[fb]    	/* Compare lower 16 bits of _fdata and _efdata */
+        jeq	init_fdata_end
+        
+        
+label2:
+	mov.w   -2[fb],a1	 	/* Copy higher 16 bits of source in A1 */
+        mov.w   -4[fb],a0	 	/* Copy lower 16 bits of source in A1 */
+        lde.b	[a1a0],r0l	 	/* Copy contents of a1a0 in r0l */
+        mov.w   -6[fb],a1	 	/* Copy higher 16 bits of destination in A1 */
+        mov.w   -8[fb],a0	 	/* Copy lower 16 bits of destination in A0 */
+        ste.b 	r0l,[a1a0]	 	/* store r0l contents at [a1a0] */
+               
+        add.w	#0x01,-4[fb]	 	/* increment lower 16 bits of source */
+        adcf.w	-2[fb]   	 	/* add carry to higher 16 bits of source */
+        add.w	#0x01,-8[fb]	 	/* increment lower 16 bits of destination */
+        adcf.w	-6[fb]           	/* add carry to higher 16 bits of destination */
+        
+        jmp.b	label1
+        
+init_fdata_end:
+        pop.w  r0			/* clean stack */
+        pop.w  r0
+        pop.w  r0
+        pop.w  r0
+        pop.w  r0
+        pop.w  r0 
+
+/* Zero out fbss section */
+   
+        push.w  #%hi16(_fbss)    	/* offset of -2 from fb: higher 16 bits of _fbss */
+        push.w  #%lo16(_fbss)    	/* offset of -4 from fb: lower 16 bits of _fbss */
+	push.w  #%hi16(_efbss)   	/* offset of -6 from fb: higer 16 bits of _efbss */
+        push.w  #%lo16(_efbss)   	/* offset of -8 from fb: lower 16 bits of _efbss */
+        mov.b   #0x00,r0l
+label3:
+        cmp.w   -2[fb],-6[fb]    	/* Compare higher 16 bits of _fdata and _efdata */
+        jnz     label4
+        cmp.w   -4[fb],-8[fb]    	/* Compare lower 16 bits of _fdata and _efdata */
+        jeq     init_fbss_end
+
+label4:
+        mov.w   -2[fb],a1        	/* Copy higher 16 bits of source in A1 */
+        mov.w   -4[fb],a0        	/* Copy lower 16 bits of source in A1 */
+        ste.b   r0l,[a1a0]       	/* store r0l contents at [a1a0] */
+
+        add.w   #0x01,-4[fb]     	/* increment lower 16 bits of _fbss */
+        adcf.w  -2[fb]           	/* add carry to higher 16 bits of _fbss */
+
+        jmp.b   label3
+
+init_fbss_end:
+	pop.w   r0			/* clean stack */
+        pop.w   r0
+        pop.w   r0
+        pop.w   r0
+#endif
+
+/* start user program */
+	jsr.a	_main		
+	
+	.end
+

+ 5 - 1
bsp/m16c62p/startup.c

@@ -28,8 +28,10 @@ extern void finsh_set_device(const char* device);
 #endif
 
 #ifdef RT_USING_HEAP
-#ifdef __ICCM16C__
+#if (defined (__ICCM16C__))
 #pragma section="DATA16_HEAP"
+#elif (defined (__GNUC__))
+extern unsigned char user_ram_end;
 #endif
 #endif
 
@@ -59,6 +61,8 @@ void rtthread_startup(void)
 #ifdef RT_USING_HEAP
 #ifdef __ICCM16C__
 	rt_system_heap_init(__segment_begin("DATA16_HEAP"), __segment_end("DATA16_HEAP"));
+#elif (defined (__GNUC__))
+	rt_system_heap_init((void*)&user_ram_end, (void*)M16C62P_SRAM_END);
 #endif
 #endif
 

+ 34 - 34
bsp/m16c62p/uart.c

@@ -30,16 +30,16 @@ struct rt_uart_m16c
 	rt_uint8_t rx_buffer[RT_UART_RX_BUFFER_SIZE];
 }uart_device;
 
-void  u0rec_handler(void)
+void u0rec_handler(void)
 {
 	rt_ubase_t level;
-	rt_uint8_t	 c;
+	rt_uint8_t c;
 
-    struct rt_uart_m16c* uart = &uart_device;
+	struct rt_uart_m16c *uart = &uart_device;
 
-	while(ri_u0c1 == 0)
+	while (U0C1.BIT.RI == 0)
 		;
-	c = (char) u0rb;
+	c = U0RB.BYTE.U0RBL;
 
 	/* Receive Data Available */
     uart->rx_buffer[uart->save_index] = c;
@@ -51,7 +51,7 @@ void  u0rec_handler(void)
     rt_hw_interrupt_enable(level);
 
 	/* invoke callback */
-	if(uart->parent.rx_indicate != RT_NULL)
+	if (uart->parent.rx_indicate != RT_NULL)
 	{
 	    rt_size_t length;
 	    if (uart->read_index > uart->save_index)
@@ -70,10 +70,10 @@ static rt_err_t rt_uart_init (rt_device_t dev)
           bit rate = ((BRG count source / 16)/baud rate) - 1
           Baud rate is based on main crystal or PLL not CPU core clock */
 	//pclk1 = 1;   /// seleck F1SIO
-    u0brg = (unsigned char)(((CPU_CLK_FREQ/16)/BAUD_RATE)-1);   //(N+1)
+    U0BRG = (unsigned char)(((CPU_CLK_FREQ/16)/BAUD_RATE)-1);   //(N+1)
 
     /* UART Transmit/Receive Control Register 2 */
-    ucon = 0x00;
+    UCON.BYTE = 0x00;
          /*   00000000
           b0    U0IRS       UART0 transmit irq cause select bit, 0 = transmit buffer empty
           b1    U1IRS       UART1 transmit irq cause select bit, 0 = transmit buffer empty
@@ -86,7 +86,7 @@ static rt_err_t rt_uart_init (rt_device_t dev)
 
     /* UART0 transmit/receive control register 0 */
     /* f1 count source, CTS/RTS disabled, CMOS output */
-    u0c0 = 0x10;
+    U0C0.BYTE = 0x10;
          /* 00010000
           b1:b0 CLK01:CLK0  BRG count source select bits                        //01         F8SIO
           b2    CRS         CTS/RTS function select bit
@@ -98,7 +98,7 @@ static rt_err_t rt_uart_init (rt_device_t dev)
 
     /* UART0 transmit/receive control register 1 */
     /*  disable transmit and receive, no error output pin, data not inverted */
-    u0c1 = 0x00;
+    U0C1.BYTE = 0x00;
          /*  00000000
           b0    TE          Transmit enable bit
           b1    TI          Transmit buffer empty flag
@@ -110,7 +110,7 @@ static rt_err_t rt_uart_init (rt_device_t dev)
 
     /* UART0 transmit/receive mode register */
     /* 8-bit data,asynch mode, internal clock, 1 stop bit, no parity */
-    u0mr = 0x05;
+    U0MR.BYTE = 0x05;
          /*  00000101
           b2:b0 SMD12:SMD1  Serial I/O Mode select bits
           b3    CKDIR       Internal/External clock select bit, CKDIR
@@ -120,20 +120,20 @@ static rt_err_t rt_uart_init (rt_device_t dev)
           b7    IOPOL       TxD, RxD I/O polarity reverse bit */
 
     /* clear UART0 receive buffer by reading */
-    u0tb = u0rb;
+    U0TB.WORD = U0RB.WORD;
     /* clear UART0 transmit buffer */
-    u0tb = 0;
+    U0TB.WORD = 0;
 
     /* disable irqs before setting irq registers */
     level = rt_hw_interrupt_disable();
     /* Enable UART0 receive interrupt, priority level 4 */
-    s0ric = 0x04;
+    S0RIC.BYTE = 0x04;
     /* Enable all interrupts */
     rt_hw_interrupt_enable(level);
 
     /* UART0 transmit/receive control register 1 */
     /* enable transmit and receive */
-    u0c1 = 0x05;
+    U0C1.BYTE = 0x05;
         /*  00000101    enable transmit and receive
         b0      TE          Transmit enable bit
         b1      TI          Transmit buffer empty flag
@@ -170,12 +170,12 @@ static rt_err_t rt_uart_close(rt_device_t dev)
 
 static rt_size_t rt_uart_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)
 {
-	rt_uint8_t* ptr;
-	struct rt_uart_m16c *uart = (struct rt_uart_m16c*)dev;
+	rt_uint8_t *ptr;
+	struct rt_uart_m16c *uart = (struct rt_uart_m16c *)dev;
 	RT_ASSERT(uart != RT_NULL);
 
 	/* point to buffer */
-	ptr = (rt_uint8_t*) buffer;
+	ptr = (rt_uint8_t *)buffer;
 	if (dev->flag & RT_DEVICE_FLAG_INT_RX)
 	{
 		while (size)
@@ -215,10 +215,10 @@ static rt_size_t rt_uart_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_si
 	return 0;
 }
 
-static rt_size_t rt_uart_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size)
+static rt_size_t rt_uart_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size)
 {
 	char *ptr;
-	ptr = (char*)buffer;
+	ptr = (char *)buffer;
 
 	if (dev->flag & RT_DEVICE_FLAG_STREAM)
 	{
@@ -227,15 +227,15 @@ static rt_size_t rt_uart_write(rt_device_t dev, rt_off_t pos, const void* buffer
 		{
 			if (*ptr == '\n')
 			{
-			  while(ti_u0c1 == 0)
-			    ;
-			  u0tb = '\r';
+				while (U0C1.BIT.TI == 0)
+					;
+				U0TB.BYTE.U0TBL = '\r';
 			}
 
 			/* THRE status, contain valid data */
-			  while(ti_u0c1 == 0)
-			    ;
-			  u0tb = *ptr;
+			while (U0C1.BIT.TI == 0)
+				;
+			U0TB.BYTE.U0TBL = *ptr;
   
 			ptr ++;
 			size --;
@@ -243,24 +243,24 @@ static rt_size_t rt_uart_write(rt_device_t dev, rt_off_t pos, const void* buffer
 	}
 	else
 	{
-		while ( size != 0 )
+		while (size != 0)
 		{
 			/* THRE status, contain valid data */
-		  while(ti_u0c1 == 0)
-		    ;
-		  u0tb = *ptr;
+			while (U0C1.BIT.TI == 0)
+				;
+			U0TB.BYTE.U0TBL = *ptr;
 	
-			ptr++;
-			size--;
+			ptr ++;
+			size --;
 		}
 	}
 
-	return (rt_size_t) ptr - (rt_size_t) buffer;
+	return (rt_size_t)ptr - (rt_size_t)buffer;
 }
 
 void rt_hw_uart_init(void)
 {
-	struct rt_uart_m16c* uart;
+	struct rt_uart_m16c *uart;
 
 	/* get uart device */
 	uart = &uart_device;

+ 71 - 0
bsp/m16c62p/vects.S

@@ -0,0 +1,71 @@
+;/****************************************************************
+;KPIT Cummins Infosystems Ltd, Pune, India. 17-June-2005.
+;
+;This program is distributed in the hope that it will be useful,
+;but WITHOUT ANY WARRANTY; without even the implied warranty of
+;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+;
+;*****************************************************************/
+
+; Fixed Vector Table
+
+	.section	.vects,"a",@progbits
+	.type	_HardwareVectors, @object
+	.size	_HardwareVectors, 36
+
+_HardwareVectors:
+	.long	0	;(Undefined Instruction) Interrupt on UND instruction 
+	.long	0	;(Overflow) Interrupt on INTO instruction 
+	.long	0	;(BRK) If the vector contains FF16, program execution starts from the address shown by the vector in the variable vector table
+	.long	0	;(Address match)There is an address-matching interrupt enable bit
+	.long	0	;Single step (debugger)
+	.long	0	;Watchdog timer
+	.long	0	;DBC (debugger)
+	.long	0	;(NMI)External interrupt by input to NMI pin
+	.long	(_start + 0xFF000000)	; Reset
+
+
+; Variable Vector Table
+
+;	.global	_rt_hw_uart0_receive_handler
+;	.global	_rt_hw_timer_handler
+
+	.global	_VariableVectors
+	.section	.var_vects,"a",@progbits
+	.type	_VariableVectors, @object
+	.size	_VariableVectors, 128
+_VariableVectors:
+    .long    _os_context_switch           ; Vector  0: BRK
+    .long    0                           ; Vector  1: Reserved
+    .long    0                           ; Vector  2: Reserved
+    .long    0                           ; Vector  3: Reserved
+    .long    0                           ; Vector  4: INT3
+    .long    0                           ; Vector  5: Timer B5
+    .long    0                           ; Vector  6: Timer B4, UART1 Bus Collision Detect
+    .long    0                           ; Vector  7: Timer B3, UART0 Bus Collision Detect
+    .long    0                           ; Vector  8: SI/O4, INT5
+    .long    0                           ; Vector  9: SI/O3, INT4
+    .long    0                           ; Vector 10: UART2 Bus Collision Detect
+    .long    0                           ; Vector 11: DMA0
+    .long    0                           ; Vector 12: DMA1
+    .long    0                           ; Vector 13: Key Input Interrupt
+    .long    0                           ; Vector 14: A/D
+    .long    0                           ; Vector 15: UART2 Transmit, NACK2
+    .long    0                           ; Vector 16: UART2 Receive,   ACK2
+    .long    0                           ; Vector 17: UART0 Transmit, NACK0
+    .long    _rt_hw_uart0_receive_handler ; Vector 18: UART0 Receive,   ACK0
+    .long    0                           ; Vector 19: UART1 Transmit, NACK1
+    .long    0                           ; Vector 20: UART1 Receive,   ACK1
+    .long    0                           ; Vector 21: Timer A0
+    .long    0                           ; Vector 22: Timer A1
+    .long    0                           ; Vector 23: Timer A2
+    .long    0                           ; Vector 24: Timer A3
+    .long    0                           ; Vector 25: Timer A4
+    .long    _rt_hw_timer_handler         ; Vector 26: Timer B0
+    .long    0                           ; Vector 27: Timer B1
+    .long    0                           ; Vector 28: Timer B2
+    .long    0                           ; Vector 29:
+    .long    0                           ; Vector 30:
+    .long    0                           ; Vector 31:
+
+	.end 

+ 47 - 0
libcpu/m16c/m16c62p/context_gcc.S

@@ -0,0 +1,47 @@
+/*
+ * File      : context.asm
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2009, RT-Thread Development Team
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rt-thread.org/license/LICENSE
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2010-04-09     fify         the first version
+ * 2010-04-19     fify         rewrite rt_hw_interrupt_disable/enable fuction
+ * 2010-04-20     fify         move peripheral ISR to bsp/interrupts.s34 
+ */
+
+    .section .text
+  
+    .globl _rt_interrupt_from_thread
+    .globl _rt_interrupt_to_thread
+    .global	_os_context_switch
+    .type	_os_context_switch, @function
+_os_context_switch:
+    PUSHM   R0,R1,R2,R3,A0,A1,SB,FB
+    
+    MOV.W   _rt_interrupt_from_thread, A0
+    STC     ISP, [A0]
+    MOV.W   _rt_interrupt_to_thread, A0
+    LDC     [A0], ISP
+
+    POPM    R0,R1,R2,R3,A0,A1,SB,FB             ; Restore registers from the new task's stack
+    REIT                                        ; Return from interrup    
+    
+/*
+ * void rt_hw_context_switch_to(rt_uint32 to);
+ * this fucntion is used to perform the first thread switch
+ */
+    .global	_rt_hw_context_switch_to
+    .type	_rt_hw_context_switch_to, @function
+_rt_hw_context_switch_to:
+    ENTER   #0x0
+    MOV.W   0x5[FB], A0
+    LDC     [A0], ISP
+    POPM    R0,R1,R2,R3,A0,A1,SB,FB
+    REIT
+
+    .end

+ 21 - 1
libcpu/m16c/m16c62p/cpuport.c

@@ -87,4 +87,24 @@ void rt_hw_context_switch_interrupt(rt_uint32_t from, rt_uint32_t to)
         rt_interrupt_from_thread = from;        
     }
     rt_interrupt_to_thread = to;  
-}
+}
+
+#if defined(__GNUC__)
+rt_base_t rt_hw_interrupt_disable(void)
+{
+	register rt_uint16_t temp;
+	
+	asm("STC  FLG, %0":"=r" (temp));
+	asm("FCLR I");
+	
+	return (rt_base_t)temp;
+}
+
+void rt_hw_interrupt_enable(rt_base_t level)
+{
+	register rt_uint16_t temp;
+	
+	temp = level & 0xffff;	
+	asm("LDC %0, FLG": :"r" (temp));	
+}
+#endif