level = STD_LOW;\r
}\r
\r
- cleanup: return (level);\r
+#if ( DIO_DEV_ERROR_DETECT == STD_ON )\r
+ cleanup:\r
+#endif\r
+ return (level);\r
}\r
\r
void Dio_WriteChannel(Dio_ChannelType channelId, Dio_LevelType level)\r
\r
Dio_WritePort(DIO_GET_PORT_FROM_CHANNEL_ID(channelId), portVal);\r
\r
- cleanup: return;\r
+#if ( DIO_DEV_ERROR_DETECT == STD_ON )\r
+ cleanup:\r
+#endif\r
+ return;\r
}\r
\r
Dio_PortLevelType Dio_ReadPort(Dio_PortType portId)\r
else if(portId == DIO_PORT_T){level = PTT;}\r
else if(portId == DIO_PORT_H){level = PTH;}\r
\r
- cleanup: return level;\r
+#if ( DIO_DEV_ERROR_DETECT == STD_ON )\r
+ cleanup:\r
+#endif\r
+ return level;\r
}\r
\r
void Dio_WritePort(Dio_PortType portId, Dio_PortLevelType level)\r
else if(portId == DIO_PORT_T){PTT = level;}\r
else if(portId == DIO_PORT_H){PTH = level;}\r
\r
- cleanup: return;\r
+#if ( DIO_DEV_ERROR_DETECT == STD_ON )\r
+ cleanup:\r
+#endif\r
+ return;\r
}\r
\r
Dio_PortLevelType Dio_ReadChannelGroup(\r
// Shift down\r
level = level >> channelGroupIdPtr->offset;\r
\r
- cleanup: return level;\r
+#if ( DIO_DEV_ERROR_DETECT == STD_ON )\r
+ cleanup:\r
+#endif\r
+ return level;\r
}\r
\r
void Dio_WriteChannelGroup(const Dio_ChannelGroupType *channelGroupIdPtr,\r
\r
Dio_WritePort(channelGroupIdPtr->port, portVal);\r
\r
- cleanup: return;\r
+#if ( DIO_DEV_ERROR_DETECT == STD_ON )\r
+ cleanup:\r
+#endif\r
+ return;\r
}\r
\r
_portState = PORT_INITIALIZED;\r
_configPtr = configType;\r
- cleanup: return;\r
+#if (PORT_DEV_ERROR_DETECT == STD_ON)\r
+ cleanup:\r
+#endif\r
+ return;\r
}\r
\r
/** @req PORT141 */\r
DDRT = curValue;\r
#endif\r
\r
- cleanup: return;\r
+#if (PORT_DEV_ERROR_DETECT == STD_ON)\r
+ cleanup:\r
+#endif\r
+ return;\r
}\r
\r
/** req PORT143 */\r
*/\r
\r
void Os_ArchSetTaskEntry(OsPcbType *pcbPtr ) {\r
- uint16_t *context_words = (uint16_t *)pcbPtr->stack.curr;\r
uint8_t *context_bytes = (uint8_t *)pcbPtr->stack.curr;\r
+ uint16_t temp;\r
\r
/* Set Return to start function */\r
\r
context_bytes[8] = OS_KERNEL_CODE_PPAGE;\r
\r
if( pcbPtr->proc_type == PROC_EXTENDED ) {\r
- context_words[8] = (uint16_t)Os_TaskStartExtended;\r
+ temp = (uint16_t)Os_TaskStartExtended;\r
+ context_bytes[HIGH_BYTE_RETURN_ADRESS] = temp >> 8;\r
+ context_bytes[LOW_BYTE_RETURN_ADRESS] = temp & 0xFF;\r
} else if( pcbPtr->proc_type == PROC_BASIC ) {\r
- context_words[8] = (uint16_t)Os_TaskStartBasic;\r
+ temp = (uint16_t)Os_TaskStartBasic;\r
+ context_bytes[HIGH_BYTE_RETURN_ADRESS] = temp >> 8;\r
+ context_bytes[LOW_BYTE_RETURN_ADRESS] = temp & 0xFF;\r
}\r
}\r
\r
\r
#define _ASSEMBLER_\r
#include "kernel_offset.h"\r
+#include "context.h"\r
#include "asm_hc1x.sx"\r
#include "context.sx"\r
\r
#define SC_PATTERN 0xde\r
#define LC_PATTERN 0xad\r
\r
-#define CONTEXT_SIZE_W 9\r
-\r
+#if defined(CFG_HCS12D)\r
+#define Y_SP_OFFSET 6 // The offset from P to Y in the context\r
+#define CONTEXT_SIZE_W 9 // The context size in words\r
+#define HIGH_BYTE_RETURN_ADRESS 16 // The offset in the context that contains the high order byte of return address\r
+#define LOW_BYTE_RETURN_ADRESS 17 // The offset in the context that contains the low order byte of return address\r
+\r
+#elif defined(CFG_HCS12XD)\r
+#define Y_SP_OFFSET 7 // The offset from P to Y in the context\r
+#define CONTEXT_SIZE_W 10 // The context size in words ( Actual size 9+1/2)\r
+#define HIGH_BYTE_RETURN_ADRESS 17 // The offset in the context that contains the high order byte of return address\r
+#define LOW_BYTE_RETURN_ADRESS 18 // The offset in the context that contains the low order byte of return address\r
+#else\r
+#error "HC1X: Subarchitecture not defined."\r
+#endif\r
\r
#endif /* CONTEXT_H_ */\r
sty 1, -sp // save Y -> ctx(Y)\r
stx 2, -sp // save X -> ctx(X)\r
stab 2, -sp // save B -> ctx(B) (skipping ctx(A))\r
+#ifdef CFG_HCS12D\r
pshc // save CCR -> ctx(CCR)\r
+#endif\r
+#ifdef CFG_HCS12XD \r
+ .short 0x1839 // save CCR -> ctx(CCR)\r
+#endif \r
psha // save P -> ctx(P) *\r
movw _.tmp ,2,-sp // save tmp -> ctx(tmp)\r
movw _.xy, 2,-sp // save xy -> ctx(xy)\r
movw 2,sp+, _.z // load z <- ctx(z)\r
movw 2,sp+, _.xy // load xy <- ctx(xy)\r
movw 2,sp+, _.tmp // load tmp <- ctx(tmp)\r
- ldy 6,sp // load Y <- ctx(Y)\r
- movb 1,sp+, 6,sp // move ctx(P) -> callctx(P)\r
- pulc // load CCR <- ctx(CCR)\r
+ ldy Y_SP_OFFSET,sp // load Y <- ctx(Y)\r
+ movb 1,sp+, Y_SP_OFFSET,sp // move ctx(P) -> callctx(P)\r
+#ifdef CFG_HCS12D\r
+ pulc // save CCR -> ctx(CCR)\r
+#endif\r
+#ifdef CFG_HCS12XD\r
+ .short 0x1838 // load CCR <- ctx(CCR)\r
+#endif\r
puld // load D <- ctx(D)\r
pulx // load X <- ctx(X)\r
ins // skipping ctx(Yh)\r
\r
\r
/* PPAGE memory banks */\r
-\r
- .bank8 :\r
+ .bank_A :\r
{\r
- *(.bank8)\r
- *(.text.bank8*)\r
+ *(.bank_A)\r
+ *(.text.bank_A*)\r
\r
- /* BANK8 MODULES */\r
+ /* BANK_A MODULES */\r
Os_Cfg.o(.text)\r
EcuM.o(.text)\r
EcuM_Cfg.o(.text)\r
alarm.o(.text)\r
\r
. = ALIGN(2);\r
- } > bank8 AT>bank8_lma =0xff\r
+ } > bank_A AT>bank_A_lma =0xff\r
\r
- .bank9 :\r
+ .bank_B :\r
{\r
- *(.bank9)\r
- *(.text.bank9*)\r
+ *(.bank_B)\r
+ *(.text.bank_B*)\r
\r
- /* BANK9 MODULES */\r
+ /* BANK_B MODULES */\r
resource.o(.text)\r
sched_table.o(.text)\r
counter.o(.text)\r
newlib_port.o(.text)\r
\r
. = ALIGN(2);\r
- } > bank9 AT>bank9_lma =0xff\r
+ } > bank_B AT>bank_B_lma =0xff\r
\r
\r
- .bank10 :\r
+ .bank_C :\r
{\r
- *(.bank10)\r
- *(.text.bank10*)\r
+ *(.bank_C)\r
+ *(.text.bank_C*)\r
\r
- /* BANK10 MODULES */ \r
+ /* BANK_C MODULES */\r
+ printf.o(.text) \r
*_memcpy.o(.text)\r
*_memset.o(.text)\r
*_abort.o(.text)\r
*_memcpy.o(.text)\r
\r
. = ALIGN(2);\r
- } > bank10 AT>bank10_lma =0xff\r
+ } > bank_C AT>bank_C_lma =0xff\r
\r
\r
- .bank11 :\r
+ .bank_D :\r
{\r
- *(.bank11)\r
- *(.text.bank11*)\r
+ *(.bank_D)\r
+ *(.text.bank_D*)\r
\r
- /* BANK11 MODULES */\r
+ /* BANK_D MODULES */\r
Can*.o(.text)\r
Pdu*.o(.text)\r
Dio*.o(.text)\r
\r
. = ALIGN(2);\r
- } > bank11 AT>bank11_lma =0xff\r
+ } > bank_D AT>bank_D_lma =0xff\r
\r
\r
- .bank12 :\r
+ .bank_E :\r
{\r
- *(.bank12)\r
- *(.text.bank12*)\r
+ *(.bank_E)\r
+ *(.text.bank_E*)\r
\r
- /* BANK12 MODULES */\r
- Com*.o(.text)\r
+ /* BANK_E MODULES */\r
Port*.o(.text)\r
+ Com*.o(.text)\r
\r
. = ALIGN(2);\r
- } > bank12 AT>bank12_lma =0xff\r
+ } > bank_E AT>bank_E_lma =0xff\r
\r
\r
- .bank13 :\r
+ .bank_F :\r
{\r
- *(.bank13)\r
- *(.text.bank13*)\r
+ *(.bank_F)\r
+ *(.text.bank_F*)\r
\r
- /* BANK13 MODULES */\r
+ /* BANK_F MODULES */\r
Adc*.o(.text)\r
- . = ALIGN(2);\r
- } > bank13 AT>bank13_lma =0xff\r
+ Dem*.o(.text)\r
+ IoHwAb*.o(.text)\r
+ . = ALIGN(2);\r
+ } > bank_F AT>bank_F_lma =0xff\r
\r
\r
/* Start of text section. */\r
.stext :\r
{\r
*(.stext)\r
- } > text AT>bank14_lma\r
+ } > text AT>bank_FIX1_lma\r
.init :\r
{\r
*(.init)\r
- } AT>bank14_lma =0\r
+ } AT>bank_FIX1_lma =0\r
.text :\r
{\r
/* Put startup code at beginning so that _start keeps same address. */\r
_etext = .;\r
PROVIDE (etext = .);\r
. = ALIGN(2);\r
- } > text AT>bank14_lma =0xa7a7a7a7\r
+ } > text AT>bank_FIX1_lma =0xa7a7a7a7\r
\r
.eh_frame :\r
{\r
KEEP (*(.eh_frame))\r
- } > text AT>bank14_lma\r
+ } > text AT>bank_FIX1_lma\r
\r
.gcc_except_table :\r
{\r
*(.gcc_except_table)\r
- } > text AT>bank14_lma\r
+ } > text AT>bank_FIX1_lma\r
\r
.rodata :\r
{\r
*(.rodata.*)\r
*(.gnu.linkonce.r*)\r
. = ALIGN(2);\r
- } > text_h AT>bank15_lma =0xffffffff\r
+ } > text_h AT>bank_FIX2_lma =0xffffffff\r
\r
.rodata1 :\r
{\r
*(.rodata1)\r
. = ALIGN(2);\r
- } > text_h AT>bank15_lma =0xffffffff\r
+ } > text_h AT>bank_FIX2_lma =0xffffffff\r
\r
/* Constructor and destructor tables are in ROM. */\r
/*\r
_edata = .;\r
PROVIDE (edata = .);\r
. = ALIGN(2);\r
- } > data AT>bank15_lma =0xffffffff\r
+ } > data AT>bank_FIX2_lma =0xffffffff\r
__data_section_size = SIZEOF(.data);\r
PROVIDE (__data_section_size = SIZEOF(.data));\r
__data_image_end = __data_image + __data_section_size;\r
*(.dem_eventmemory_pri)\r
} > data\r
\r
+ .noice_port 0x2000 :\r
+ {\r
+ *(.noice_port)\r
+ } > data\r
+ \r
/* SCz: this does not work yet... This is supposed to force the loading\r
of _map_data.o (from libgcc.a) when the .data section is not empty.\r
By doing so, this should bring the code that copies the .data section\r
*(.gnu.linkonce.b.*)\r
*(COMMON)\r
PROVIDE (_end = .);\r
- } > data AT>bank15_lma\r
+ } > data AT>bank_FIX2_lma\r
__bss_size = SIZEOF(.bss);\r
PROVIDE (__bss_size = SIZEOF(.bss));\r
.eeprom :\r
obj-$(CFG_PPC) += crt0.o\r
-obj-$(CFG_HCS12D) += crt0.o\r
+obj-$(CFG_HC1X) += crt0.o\r
vpath-$(CFG_ARM_CM3) += $(ARCH_PATH-y)kernel\r
obj-$(CFG_ARM_CM3) += core_cm3.o\r
obj-$(CFG_ARM_CM3) += startup_stm32f10x.o\r
vectors (rx) : ORIGIN = 0xff80, LENGTH = 0x80\r
\r
/* Flash memory banks VMA:s */\r
-bank8 (rx) : ORIGIN = 0x0f0000, LENGTH = 16k\r
-bank9 (rx) : ORIGIN = 0x0f4000, LENGTH = 16k\r
-bank10 (rx) : ORIGIN = 0x0f8000, LENGTH = 16k\r
-bank11 (rx) : ORIGIN = 0x0fc000, LENGTH = 16k\r
-bank12 (rx) : ORIGIN = 0x100000, LENGTH = 16k\r
-bank13 (rx) : ORIGIN = 0x104000, LENGTH = 16k\r
+bank_A (rx) : ORIGIN = 0x0f0000, LENGTH = 16k\r
+bank_B (rx) : ORIGIN = 0x0f4000, LENGTH = 16k\r
+bank_C (rx) : ORIGIN = 0x0f8000, LENGTH = 16k\r
+bank_D (rx) : ORIGIN = 0x0fc000, LENGTH = 16k\r
+bank_E (rx) : ORIGIN = 0x100000, LENGTH = 16k\r
+bank_F (rx) : ORIGIN = 0x104000, LENGTH = 16k\r
\r
-bank14 (rx) : ORIGIN = 0x108000, LENGTH = 16k\r
-bank15 (rx) : ORIGIN = 0x10c002, LENGTH = 16k-0x102\r
+bank_FIX1 (rx) : ORIGIN = 0x108000, LENGTH = 16k\r
+bank_FIX2 (rx) : ORIGIN = 0x10c002, LENGTH = 16k-0x102\r
\r
/* Flash memory banks LMA:s */\r
/* iSystem winIDEA */\r
-bank8_lma (rx) : ORIGIN = 0x0f0000, LENGTH = 16k\r
-bank9_lma (rx) : ORIGIN = 0x0f4000, LENGTH = 16k\r
-bank10_lma (rx) : ORIGIN = 0x0f8000, LENGTH = 16k\r
-bank11_lma (rx) : ORIGIN = 0x0fc000, LENGTH = 16k\r
-bank12_lma (rx) : ORIGIN = 0x100000, LENGTH = 16k\r
-bank13_lma (rx) : ORIGIN = 0x104000, LENGTH = 16k\r
+bank_A_lma (rx) : ORIGIN = 0x0f0000, LENGTH = 16k\r
+bank_B_lma (rx) : ORIGIN = 0x0f4000, LENGTH = 16k\r
+bank_C_lma (rx) : ORIGIN = 0x0f8000, LENGTH = 16k\r
+bank_D_lma (rx) : ORIGIN = 0x0fc000, LENGTH = 16k\r
+bank_E_lma (rx) : ORIGIN = 0x100000, LENGTH = 16k\r
+bank_F_lma (rx) : ORIGIN = 0x104000, LENGTH = 16k\r
\r
-bank14_lma (rx) : ORIGIN = 0x108000, LENGTH = 16k\r
-bank15_lma (rx) : ORIGIN = 0x10c002, LENGTH = 16k-0x102\r
+bank_FIX1_lma (rx) : ORIGIN = 0x108000, LENGTH = 16k\r
+bank_FIX2_lma (rx) : ORIGIN = 0x10c002, LENGTH = 16k-0x102\r
vectors_lma (rx) : ORIGIN = 0x10ff80, LENGTH = 0x80\r
\r
/* Freescale Codewarrior Hiwave (s19, TBDML)\r
-bank8_lma (rx) : ORIGIN = 0x388000, LENGTH = 16k\r
-bank9_lma (rx) : ORIGIN = 0x398000, LENGTH = 16k\r
-bank10_lma (rx) : ORIGIN = 0x3a8000, LENGTH = 16k\r
-bank11_lma (rx) : ORIGIN = 0x3b8000, LENGTH = 16k\r
-bank12_lma (rx) : ORIGIN = 0x3c8000, LENGTH = 16k\r
-bank13_lma (rx) : ORIGIN = 0x3d8000, LENGTH = 16k\r
+bank_A_lma (rx) : ORIGIN = 0x388000, LENGTH = 16k\r
+bank_B_lma (rx) : ORIGIN = 0x398000, LENGTH = 16k\r
+bank_C_lma (rx) : ORIGIN = 0x3a8000, LENGTH = 16k\r
+bank_D_lma (rx) : ORIGIN = 0x3b8000, LENGTH = 16k\r
+bank_E_lma (rx) : ORIGIN = 0x3c8000, LENGTH = 16k\r
+bank_F_lma (rx) : ORIGIN = 0x3d8000, LENGTH = 16k\r
\r
-bank14_lma (rx) : ORIGIN = 0x3e8000, LENGTH = 16k\r
-bank15_lma (rx) : ORIGIN = 0x3f8002, LENGTH = 16k-0x102\r
+bank_FIX1_lma (rx) : ORIGIN = 0x3e8000, LENGTH = 16k\r
+bank_FIX2_lma (rx) : ORIGIN = 0x3f8002, LENGTH = 16k-0x102\r
vectors_lma (rx) : ORIGIN = 0x3fff80, LENGTH = 0x80\r
-*/
\ No newline at end of file
+*/\r
\r
#define FILE_RAMLOG 3\r
\r
+/* Location MUST match NoICE configuration */\r
+#ifdef USE_TTY_NOICE\r
+static volatile char VUART_TX __attribute__ ((section (".noice_port")));\r
+static volatile char VUART_RX __attribute__ ((section (".noice_port")));\r
+volatile unsigned char START_VUART = 0;\r
+#endif\r
+\r
/*\r
* T32 stuff\r
*/\r
(void)g_TRBuffer[0];\r
#endif\r
\r
+#ifdef USE_TTY_NOICE\r
+ // Not tested at all\r
+ int retval;\r
+ while (VUART_RX != 0)\r
+ {\r
+ }\r
+\r
+ retval = VUART_RX;\r
+ VUART_RX = 0;\r
+#endif\r
+\r
/* Only support write for now, return 0 read */\r
return 0;\r
}\r
\r
\r
if( fd <= STDERR_FILENO ) {\r
+#ifdef USE_TTY_NOICE\r
+ char *buf1 = (char *)_buf;\r
+ if (START_VUART)\r
+ {\r
+ for (int i = 0; i < nbytes; i++) {\r
+ char c = buf1[i];\r
+ if (c == '\n')\r
+ {\r
+ while (VUART_TX != 0)\r
+ {\r
+ }\r
+\r
+ VUART_TX = '\r';\r
+ }\r
+\r
+ while (VUART_TX != 0)\r
+ {\r
+ }\r
+\r
+ VUART_TX = c;\r
+ }\r
+ }\r
+#endif\r
+\r
#ifdef USE_TTY_WINIDEA\r
if (g_TConn)\r
{\r
\r
//#define HOST_TEST 1\r
\r
-int arc_putchar(int fd, int c);\r
+int arc_putchar(_PTR fd, int c);\r
int print(FILE *file, char **buffer, size_t n, const char *format, va_list ap);\r
\r
int printf(const char *format, ...) {\r
}\r
\r
/* Find flags */\r
- switch (ch) {\r
- case '0':\r
+ if (ch == '0')\r
+ {\r
flags = FL_ZERO;\r
- break;\r
- case ' ':\r
+ }\r
+ else if (ch == ' ')\r
+ {\r
flags = FL_SPACE;\r
- break;\r
- case '-':\r
+ }\r
+ else if (ch == '-')\r
+ {\r
flags = FL_ALIGN_LEFT;\r
- break;\r
- default:\r
+ }\r
+ else\r
+ {\r
/* Not supported or no flag */\r
flags = FL_NONE;\r
format--;\r
}\r
\r
/* Find type */\r
- switch (ch) {\r
- case 'c':\r
+ if (ch =='c')\r
+ {\r
emitChar(file,buffer,(char )va_arg( ap, int ),&left);\r
- break;\r
- case 'd':\r
+ }\r
+ else if (ch == 'd')\r
+ {\r
flags |= FL_TYPE_SIGNED_INT;\r
emitInt(file,buffer,va_arg( ap, int ),10,width,flags,&left);\r
- break;\r
- case 'u':\r
+ }\r
+ else if (ch == 'u')\r
+ {\r
flags |= FL_TYPE_UNSIGNED_INT;\r
emitInt(file,buffer,va_arg( ap, int ),10,width,flags,&left);\r
- break;\r
- case 'x':\r
+ }\r
+ else if (ch == 'x')\r
+ {\r
flags |= FL_TYPE_UNSIGNED_INT;\r
emitInt(file,buffer,va_arg( ap, int ),16,width,flags,&left);\r
- break;\r
- case 'p':\r
+ }\r
+ else if (ch == 'p')\r
+ {\r
flags |= FL_TYPE_POINTER;\r
emitInt(file,buffer,va_arg( ap, int ),16,width,flags,&left);\r
- break;\r
- case 's':\r
+ }\r
+ else if (ch == 's')\r
+ {\r
str = (char *)va_arg( ap, int );\r
\r
if( str == NULL ) {\r
}\r
\r
emitString(file,buffer,str,width,flags,&left);\r
- break;\r
- default:\r
+ }\r
+ else\r
+ {\r
assert(0); // oops\r
- break;\r
}\r
-\r
} else {\r
flags = FL_NONE;\r
emitChar(file,buffer,ch,&left);\r
$(Q)$(CC) $(LDFLAGS) -o $@ $(libpath-y) $(obj-y) $(lib-y) $(libitem-y) \r
else \r
$(Q)$(LD) $(LDFLAGS) -T $(ldcmdfile-y) -o $@ $(libpath-y) --start-group $(obj-y) $(lib-y) $(libitem-y) --end-group $(LDMAPFILE)\r
-ifdef CFG_MC912DG128A\r
+ifdef CFG_HC1X\r
@$(CROSS_COMPILE)objdump -h $@ | gawk -f $(ROOTDIR)/scripts/hc1x_memory.awk\r
else\r
@echo "Image size: (decimal)"\r
obj-y += asm_sample.o\r
#CFLAGS_asm_sample.o += -O3\r
obj-y += arch_krn.o\r
-obj-$(CFG_HCS12D) += arch_irq.o\r
+obj-$(CFG_HC1X) += arch_irq.o\r
#obj-y += stm32f10x_it.o\r
\r
# object files \r