diff --git a/configs/skp16c26/include/board.h b/configs/skp16c26/include/board.h index de04e1e194..5f694f5dee 100644 --- a/configs/skp16c26/include/board.h +++ b/configs/skp16c26/include/board.h @@ -44,11 +44,54 @@ #ifndef __ASSEMBLY__ # include #endif +#include "sfr262.h" /* M16C/26 special function register definitions */ +#include "skp_lcd.h" /* SKP LCD function definitions */ /************************************************************************************ * Definitions ************************************************************************************/ +/* Xin Freq */ + +#define XIN_FREQ 20e6 /* 20MHz */ + +/* Switches */ + +#define S1 p8_3 +#define S2 p8_2 +#define S3 p8_1 +#define S1_DDR pd8_3 +#define S2_DDR pd8_2 +#define S3_DDR pd8_1 + +/* LEDs */ +#define RED_LED p8_0 +#define YLW_LED p7_4 +#define GRN_LED p7_2 + +#define RED_DDR pd8_0 // LED port direction register +#define YLW_DDR pd7_4 +#define GRN_DDR pd7_2 + +/********************************************************************************/ +/* Macro Definitions */ +/********************************************************************************/ + +#define LED_ON 0 +#define LED_OFF 1 + +#define ENABLE_IRQ {_asm(" FSET I");} +#define DISABLE_IRQ {_asm(" FCLR I");} + +/* Use these macros for switch inputs */ + +#define ENABLE_SWITCHES {S1_DDR = 0; S2_DDR = 0; S3_DDR = 0;} + +/* Use these macros to control the LEDs */ + +#define LED(led, state) ((led) = !state) +#define ENABLE_LEDS {RED_LED = LED_OFF; YLW_LED = LED_OFF; GRN_LED = LED_OFF; RED_DDR = 1; YLW_DDR = 1; GRN_DDR = 1; } + /************************************************************************************ * Inline Functions ************************************************************************************/ diff --git a/configs/skp16c26/ostest/ld.script b/configs/skp16c26/ostest/ld.script index 63cfeccdbe..6474929170 100644 --- a/configs/skp16c26/ostest/ld.script +++ b/configs/skp16c26/ostest/ld.script @@ -37,9 +37,12 @@ OUTPUT_ARCH(m32c) ENTRY(_stext) SECTIONS { - /* The OS entry point is here */ + /* Flash memory begins at address 0xf0000 for the M20262F8 part and + * ends at address 0xfffff (all parts). The program entry point is + * the first address in flash + */ - . = 0x00008000; + . = 0xf0000; .text : { _stext = ABSOLUTE(.); *(.text) @@ -52,8 +55,42 @@ SECTIONS _etext = ABSOLUTE(.); } - _eronly = ABSOLUTE(.); /* See below */ - . = ALIGN(4096); + _eronly = ABSOLUTE(.); /* End of read-only values */ + /* .data will be relocated from */ + /* this address */ + + /* The "variable" vector table will be fixed at the following address */ + + . = 0xffd00 + .varvect : { + _svarvect = ABSOLUTE(.); + *(.varvect) + _evarvect = ABSOLUTE(.); + } + + /* Followed by the special page/fixed vector table. */ + + . = 0xffe00 + .specpg : { + _sspecpg = ABSOLUTE(.); + *(.specpg) + _especpg = ABSOLUTE(.); + } + + . = 0xfffdc + .fixvect : { + _sfixvect = ABSOLUTE(.); + *(.fixvect) + _efixvect = ABSOLUTE(.); + } + + /* Internal RAM begins at address 0x00400 (all parts) and ends at + * address 0x00bff (M20262F6 and M20262F8 parts). With the RAM + * region, used is .data followed by .bss. The remainder of RAM + * carved up by the start-up code into stacks and heaps. + */ + + . = 0x00400; .data : { _sdata = ABSOLUTE(.);