From 14959e88d1146e76f8d998accfeca16dca3633ed Mon Sep 17 00:00:00 2001 From: kimstik <7290319+kimstik@users.noreply.github.com> Date: Mon, 7 Dec 2020 16:38:51 +0100 Subject: [PATCH] code crop --- .vs/SAM-BA_MONITOR_ROMLESS/v14/.atsuo | Bin 80896 -> 0 bytes SAM-BA_MONITOR_ROMLESS.atsln | 22 ---- .../device_config/device_config.h | 6 +- .../device_config/device_config_samc21j18a.h | 7 +- SAM-BA_MONITOR_ROMLESS/main.c | 3 +- .../sam_ba/sam_ba_monitor.c | 108 +++++++++++------- glue.c | 32 ++++++ glue.h | 1 + 8 files changed, 115 insertions(+), 64 deletions(-) delete mode 100644 .vs/SAM-BA_MONITOR_ROMLESS/v14/.atsuo delete mode 100644 SAM-BA_MONITOR_ROMLESS.atsln create mode 100644 glue.c create mode 100644 glue.h diff --git a/.vs/SAM-BA_MONITOR_ROMLESS/v14/.atsuo b/.vs/SAM-BA_MONITOR_ROMLESS/v14/.atsuo deleted file mode 100644 index 22ba6e880b2474561e5eb8d7b4156423368f1948..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80896 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 { //bit safer: value in range 256k /* Stay in Bootloader */ return; } diff --git a/SAM-BA_MONITOR_ROMLESS/sam_ba/sam_ba_monitor.c b/SAM-BA_MONITOR_ROMLESS/sam_ba/sam_ba_monitor.c index efa6555..1dd8341 100644 --- a/SAM-BA_MONITOR_ROMLESS/sam_ba/sam_ba_monitor.c +++ b/SAM-BA_MONITOR_ROMLESS/sam_ba/sam_ba_monitor.c @@ -29,8 +29,15 @@ SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES #include "cdc_enumerate.h" #include "device_config.h" + +#if (SAM_BA_INTERFACE == SAM_BA_UART_ONLY) +#define HND(x) uart_if.x +#else +#define HND(x) ptr_monitor_if->x +#endif + static void print_new_line(void); -const char RomBOOT_Version[] = SAM_BA_VERSION; +const char RomBOOT_Version[sizeof(SAM_BA_VERSION)-1] = SAM_BA_VERSION; /* Provides one common interface to handle both USART and USB-CDC */ typedef struct @@ -72,13 +79,14 @@ const t_monitor_if usbcdc_if = t_monitor_if * ptr_monitor_if; /* b_terminal_mode mode (ascii) or hex mode */ -volatile bool b_terminal_mode = false; +//volatile bool b_terminal_mode = false; +static const bool b_terminal_mode = false; volatile uint32_t sp; static void print_new_line(void) { - ptr_monitor_if->putdata("\n\r", 2); + HND(putdata)("\n\r", 2); } void init_sam_ba_monitor_interface(void) @@ -86,11 +94,11 @@ void init_sam_ba_monitor_interface(void) #if SAM_BA_UART_INTERFACE_ENABLED usart_open(); #endif - + #if SAM_BA_USB_INTERFACE_ENABLED clock_configuration_for_usb(); usb_init(); - #endif + #endif } void process_sam_ba_monitor(void) @@ -102,7 +110,10 @@ void process_sam_ba_monitor(void) } #endif - #if SAM_BA_UART_INTERFACE_ENABLED + #if (SAM_BA_INTERFACE == SAM_BA_UART_ONLY) + sam_ba_monitor_run(); + for(;;); + #elif SAM_BA_UART_INTERFACE_ENABLED if(uart_if.is_rx_ready() && (SHARP_CHARACTER == uart_if.get_c())) { ptr_monitor_if = (t_monitor_if*) &uart_if; sam_ba_monitor_run(); @@ -150,21 +161,20 @@ void sam_ba_putdata_term(uint8_t* data, uint32_t length) buf[1] = 'x'; buf[length * 2 + 2] = '\n'; buf[length * 2 + 3] = '\r'; - ptr_monitor_if->putdata(buf, length * 2 + 4); + HND(putdata)(buf, length * 2 + 4); } else - ptr_monitor_if->putdata(data, length); + HND(putdata)(data, length); return; } +__attribute__((__noreturn__)) void call_applet(uint32_t address) { uint32_t app_start_address; cpu_irq_disable(); - sp = __get_MSP(); - /* Rebase the Stack Pointer */ __set_MSP(*(uint32_t *) address); @@ -175,7 +185,8 @@ void call_applet(uint32_t address) app_start_address = *(uint32_t *)(address + 4); /* Jump to application Reset Handler in the application */ - asm("bx %0"::"r"(app_start_address)); + __asm("bx %0"::"r"(app_start_address)); + __builtin_unreachable(); } /** @@ -184,17 +195,16 @@ void call_applet(uint32_t address) void sam_ba_monitor_run(void) { uint32_t length; - uint32_t j, u8tmp, current_number, command; + uint32_t j, command, current_number, u8tmp; uint8_t *ptr_data, *ptr, data[SIZEBUFMAX]; - ptr_data = 0; - command = 'z'; j=0; - + command = 0; + // Start waiting some cmd while (1) { - length = ptr_monitor_if->getdata(data, SIZEBUFMAX); + length = HND(getdata)(data, SIZEBUFMAX); ptr = data; for (uint32_t i = 0; i < length; i++) { @@ -202,7 +212,7 @@ void sam_ba_monitor_run(void) { if (*ptr == '#') { - if (b_terminal_mode) +/* if (b_terminal_mode) { print_new_line(); } @@ -230,27 +240,31 @@ void sam_ba_monitor_run(void) ptr--; //Do we expect more data ? if(jgetdata_xmd(ptr_data, current_number-j); - - __asm("nop"); + HND(getdata_xmd)(ptr_data, current_number-j); + +// __asm("nop"); } +*/ +/* else if (command == 'R') { - ptr_monitor_if->putdata_xmd(ptr_data, current_number); + HND(putdata_xmd)(ptr_data, current_number); } else if (command == 'O') { *ptr_data = (char) current_number; } - else if (command == 'H') + else + if (command == 'H') { *((uint16_t *) ptr_data) = (uint16_t) current_number; } - else if (command == 'W') + else +*/ if (command == 'W') { *((int *) ptr_data) = current_number; } - else if (command == 'o') +/* else if (command == 'o') { sam_ba_putdata_term(ptr_data, 1); } @@ -259,47 +273,47 @@ void sam_ba_monitor_run(void) current_number = *((uint16_t *) ptr_data); sam_ba_putdata_term((uint8_t*) ¤t_number, 2); } - else if (command == 'w') +*/ else if (command == 'w') { current_number = *((uint32_t *) ptr_data); sam_ba_putdata_term((uint8_t*) ¤t_number, 4); } + else if (command == 'G') { call_applet(current_number); - //ptr_monitor_if->put_c(0x6); - /* Rebase the Stack Pointer */ - __set_MSP(sp); - cpu_irq_enable(); + __builtin_unreachable(); } - else if (command == 'T') +/* else if (command == 'T') { b_terminal_mode = 1; print_new_line(); } else if (command == 'N') { - if (b_terminal_mode == 0) - { - print_new_line(); - } - b_terminal_mode = 0; + //if (b_terminal_mode == 0) + //{ + HND(putdata)((uint8_t *) RomBOOT_Version+2, 2); + // print_new_line(); + //} + //b_terminal_mode = 0; } - else if (command == 'V') +*/ else if (command == 'V') { - ptr_monitor_if->putdata((uint8_t *) RomBOOT_Version, strlen(RomBOOT_Version)); + HND(putdata)((uint8_t *) RomBOOT_Version, sizeof(RomBOOT_Version)); //strlen(RomBOOT_Version)); } - command = 'z'; + command = 0; current_number = 0; if (b_terminal_mode) { - ptr_monitor_if->putdata(">", 1); + HND(putdata)(">", 1); } } else { +/* if (('0' <= *ptr) && (*ptr <= '9')) { current_number = (current_number << 4) | (*ptr - '0'); @@ -322,6 +336,22 @@ void sam_ba_monitor_run(void) command = *ptr; current_number = 0; } +*/ + if (*ptr == ',') + { + ptr_data = (uint8_t *) current_number; + current_number = 0; + } + else + { + int val = htoi(*ptr); + if (val < 0) { + command = *ptr; + current_number = 0; + }else{ + current_number = (current_number << 4) | val; + } + } } ptr++; } diff --git a/glue.c b/glue.c new file mode 100644 index 0000000..0a58a71 --- /dev/null +++ b/glue.c @@ -0,0 +1,32 @@ +#include +#include +#include "glue.h" + +extern uint32_t _estack; +extern uint32_t _srelocate, _erelocate, _etext; +extern uint32_t _sbss, _ebss; + +extern uint32_t Image$$STACK$$Base; +extern uint32_t Image$$STACK$$Limit; + +int main(void); + +int htoi(char x) { + unsigned int v=x; + v-='0'; + if (v<10) return v; + v|=0x20; //A->a + v-='a'-'0'; + if (v<6) return v+10; + return -1; +} + +__attribute__ ((section (".vectors"),used)) +const struct { + uint32_t* SP; + void* Entry; +#if defined ( __CC_ARM ) +}vectors = {&Image$$STACK$$Limit, main}; +#else +}vectors = {&_estack, main}; +#endif diff --git a/glue.h b/glue.h new file mode 100644 index 0000000..e95350b --- /dev/null +++ b/glue.h @@ -0,0 +1 @@ +int htoi(char x); \ No newline at end of file