diff --git a/bootloaders/artemis/artemis_svl.bin b/bootloaders/artemis/artemis_svl.bin index b407e0c..a3e68c2 100644 Binary files a/bootloaders/artemis/artemis_svl.bin and b/bootloaders/artemis/artemis_svl.bin differ diff --git a/tools/artemis/artemis_svl.py b/tools/artemis/artemis_svl.py index 1669076..3d03815 100644 --- a/tools/artemis/artemis_svl.py +++ b/tools/artemis/artemis_svl.py @@ -39,7 +39,6 @@ import sys import time import math -import os.path from sys import exit # *********************************************************************************** @@ -54,58 +53,59 @@ SVL_CMD_RETRY = 0x05 # request re-send frame SVL_CMD_DONE = 0x06 # finished - all data sent -# Global variables - -barWidthInCharacters = 50 # Width of progress bar, ie [###### % complete - - +barWidthInCharacters = 50 # Width of progress bar, ie [###### % complete + +crcTable = ( + 0x0000, 0x8005, 0x800F, 0x000A, 0x801B, 0x001E, 0x0014, 0x8011, + 0x8033, 0x0036, 0x003C, 0x8039, 0x0028, 0x802D, 0x8027, 0x0022, + 0x8063, 0x0066, 0x006C, 0x8069, 0x0078, 0x807D, 0x8077, 0x0072, + 0x0050, 0x8055, 0x805F, 0x005A, 0x804B, 0x004E, 0x0044, 0x8041, + 0x80C3, 0x00C6, 0x00CC, 0x80C9, 0x00D8, 0x80DD, 0x80D7, 0x00D2, + 0x00F0, 0x80F5, 0x80FF, 0x00FA, 0x80EB, 0x00EE, 0x00E4, 0x80E1, + 0x00A0, 0x80A5, 0x80AF, 0x00AA, 0x80BB, 0x00BE, 0x00B4, 0x80B1, + 0x8093, 0x0096, 0x009C, 0x8099, 0x0088, 0x808D, 0x8087, 0x0082, + 0x8183, 0x0186, 0x018C, 0x8189, 0x0198, 0x819D, 0x8197, 0x0192, + 0x01B0, 0x81B5, 0x81BF, 0x01BA, 0x81AB, 0x01AE, 0x01A4, 0x81A1, + 0x01E0, 0x81E5, 0x81EF, 0x01EA, 0x81FB, 0x01FE, 0x01F4, 0x81F1, + 0x81D3, 0x01D6, 0x01DC, 0x81D9, 0x01C8, 0x81CD, 0x81C7, 0x01C2, + 0x0140, 0x8145, 0x814F, 0x014A, 0x815B, 0x015E, 0x0154, 0x8151, + 0x8173, 0x0176, 0x017C, 0x8179, 0x0168, 0x816D, 0x8167, 0x0162, + 0x8123, 0x0126, 0x012C, 0x8129, 0x0138, 0x813D, 0x8137, 0x0132, + 0x0110, 0x8115, 0x811F, 0x011A, 0x810B, 0x010E, 0x0104, 0x8101, + 0x8303, 0x0306, 0x030C, 0x8309, 0x0318, 0x831D, 0x8317, 0x0312, + 0x0330, 0x8335, 0x833F, 0x033A, 0x832B, 0x032E, 0x0324, 0x8321, + 0x0360, 0x8365, 0x836F, 0x036A, 0x837B, 0x037E, 0x0374, 0x8371, + 0x8353, 0x0356, 0x035C, 0x8359, 0x0348, 0x834D, 0x8347, 0x0342, + 0x03C0, 0x83C5, 0x83CF, 0x03CA, 0x83DB, 0x03DE, 0x03D4, 0x83D1, + 0x83F3, 0x03F6, 0x03FC, 0x83F9, 0x03E8, 0x83ED, 0x83E7, 0x03E2, + 0x83A3, 0x03A6, 0x03AC, 0x83A9, 0x03B8, 0x83BD, 0x83B7, 0x03B2, + 0x0390, 0x8395, 0x839F, 0x039A, 0x838B, 0x038E, 0x0384, 0x8381, + 0x0280, 0x8285, 0x828F, 0x028A, 0x829B, 0x029E, 0x0294, 0x8291, + 0x82B3, 0x02B6, 0x02BC, 0x82B9, 0x02A8, 0x82AD, 0x82A7, 0x02A2, + 0x82E3, 0x02E6, 0x02EC, 0x82E9, 0x02F8, 0x82FD, 0x82F7, 0x02F2, + 0x02D0, 0x82D5, 0x82DF, 0x02DA, 0x82CB, 0x02CE, 0x02C4, 0x82C1, + 0x8243, 0x0246, 0x024C, 0x8249, 0x0258, 0x825D, 0x8257, 0x0252, + 0x0270, 0x8275, 0x827F, 0x027A, 0x826B, 0x026E, 0x0264, 0x8261, + 0x0220, 0x8225, 0x822F, 0x022A, 0x823B, 0x023E, 0x0234, 0x8231, + 0x8213, 0x0216, 0x021C, 0x8219, 0x0208, 0x820D, 0x8207, 0x0202) # *********************************************************************************** # # Compute CRC on a byte array # # *********************************************************************************** -def get_crc16(data): - # To perform the division perform the following: - - # Load the register with zero bits. - # Augment the message by appending W zero bits to the end of it. - # While (more message bits) - # Begin - # Shift the register left by one bit, reading the next bit of the - # augmented message into register bit position 0. - # If (a 1 bit popped out of the register during step 3) - # Register = Register XOR Poly. - # End - # The register now contains the remainder. - register = 0x0000 - poly = 0x8005 - - data = bytearray(data) - data.extend(bytearray(2)) - bits = 8*len(data) - - def get_data_bit(bit): - byte = int(bit/8) - if(data[byte] & (0x80 >> (bit%8))): - return 1 - return 0 - for bit in range(bits): - c = 0 - if(register & 0x8000): - c = 1 - - register <<= 1 - register &= 0xFFFF - - if(get_data_bit(bit)): - register |= 0x0001 - - if(c): - register = (register ^ poly) +def get_crc16(data): - return register + #Table and code ported from Artemis SVL bootloader + crc = 0x0000 + data = bytearray(data) + for ch in data: + tableAddr = ch ^ (crc >> 8) + CRCH = (crcTable[tableAddr] >> 8) ^ (crc & 0xFF) + CRCL = crcTable[tableAddr] & 0x00FF + crc = CRCH << 8 | CRCL + return crc @@ -197,9 +197,10 @@ def phase_setup(ser): # *********************************************************************************** def phase_bootload(ser): + startTime = time.time() frame_size = 512*4 - resend_max = 64 + resend_max = 4 resend_count = 0 verboseprint('\nphase:\tbootload') @@ -213,9 +214,10 @@ def phase_bootload(ser): progressChars = 0 if (not args.verbose): - print("[", end = '') + print("[", end='') - verboseprint('\thave ' + str(total_len) + ' bytes to send in ' + str(total_frames) + ' frames') + verboseprint('\thave ' + str(total_len) + + ' bytes to send in ' + str(total_frames) + ' frames') bl_done = False bl_failed = False @@ -247,10 +249,12 @@ def phase_bootload(ser): if( curr_frame <= total_frames ): frame_data = application[((curr_frame-1)*frame_size):((curr_frame-1+1)*frame_size)] if(args.verbose): - verboseprint('\tsending frame #'+str(curr_frame)+', length: '+str(len(frame_data))) + verboseprint('\tsending frame #'+str(curr_frame) + + ', length: '+str(len(frame_data))) else: percentComplete = curr_frame * 100 / total_frames - percentCompleteInChars = math.ceil(percentComplete / 100 * barWidthInCharacters) + percentCompleteInChars = math.ceil( + percentComplete / 100 * barWidthInCharacters) while(progressChars < percentCompleteInChars): progressChars = progressChars + 1 print('#', end='', flush=True) @@ -264,9 +268,12 @@ def phase_bootload(ser): bl_done = True if( bl_failed == False ): - twopartprint('\n\t', ' Upload complete') + twopartprint('\n\t', 'Upload complete') + endTime = time.time() + bps = total_len / (endTime - startTime) + verboseprint('\n\tNominal bootload bps: ' + str(round(bps, 2))) else: - twopartprint('\n\t', ' Upload failed') + twopartprint('\n\t', 'Upload failed') return bl_failed @@ -317,9 +324,6 @@ def main(): num_tries = 3 print('\n\nArtemis SVL Bootloader') - if not os.path.exists(args.binfile): - print("Bin file {} does not exits.".format(args.binfile)) - exit() for _ in range(num_tries): @@ -335,7 +339,7 @@ def main(): if( bl_failed == False ): break - except serial.SerialException: + except: phase_serial_port_help() exit() @@ -379,7 +383,7 @@ def verboseprint(*args): # Print each argument separately so caller doesn't need to # stuff everything to be printed into a single string for arg in args: - print(arg, end=''), + print(arg, end='', flush=True), print() else: verboseprint = lambda *a: None # do-nothing function diff --git a/tools/artemis/linux/artemis_svl b/tools/artemis/linux/artemis_svl index f81dc17..de467ac 100755 Binary files a/tools/artemis/linux/artemis_svl and b/tools/artemis/linux/artemis_svl differ diff --git a/tools/artemis/macosx/artemis_svl b/tools/artemis/macosx/artemis_svl index c162da7..7ef0072 100755 Binary files a/tools/artemis/macosx/artemis_svl and b/tools/artemis/macosx/artemis_svl differ diff --git a/tools/artemis/windows/artemis_svl.exe b/tools/artemis/windows/artemis_svl.exe index abd2b00..c551057 100644 Binary files a/tools/artemis/windows/artemis_svl.exe and b/tools/artemis/windows/artemis_svl.exe differ diff --git a/tools/variants/README.md b/tools/scripts/README_VARIANTS.md similarity index 100% rename from tools/variants/README.md rename to tools/scripts/README_VARIANTS.md diff --git a/tools/variants/arduino_boards.sh b/tools/scripts/config/arduino_boards.sh similarity index 100% rename from tools/variants/arduino_boards.sh rename to tools/scripts/config/arduino_boards.sh diff --git a/tools/scripts/regen_artemis_svl.sh b/tools/scripts/regen_artemis_svl.sh new file mode 100644 index 0000000..b0bb1f9 --- /dev/null +++ b/tools/scripts/regen_artemis_svl.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +# use this script to update the artemis SVL based on the SparkFun AmbiqSuite BSP files + +# setup +set -e +set -o errexit +echo "" 1>&2 + +# get enclosing directory +DIR=$(dirname -- "$(readlink -f -- "$BASH_SOURCE")") + +# defaults +BSP_ROOT=. +ARTEMIS_TOOLS_ROOT=../artemis + +# handle arguments +while getopts ":r:b:" opt; do + case $opt in + r) BSP_ROOT="$OPTARG" + ;; + \?) echo "Invalid option -$OPTARG" 1>&2 + ;; + esac +done + +# verify bsp root +echo "Using \$BSP_ROOT=$BSP_ROOT" 1>&2 +VFILE=$BSP_ROOT/README.md +if [ -f "$VFILE" ]; +then + echo "\$BSP_ROOT verification passed" 1>&2 +else + echo "\$BSP_ROOT verification failed" 1>&2 + exit 1 +fi + + +# copy bsp files from BSP repo to Arduino variants +echo "" 1>&2 + +echo "Removing SVL files" 1>&2 +rm -rf $ARTEMIS_TOOLS_ROOT/linux +rm -rf $ARTEMIS_TOOLS_ROOT/macosx +rm -rf $ARTEMIS_TOOLS_ROOT/windows +rm -f $ARTEMIS_TOOLS_ROOT/artemis_svl.py + +echo "Copying SVL files" 1>&2 +cp -r $BSP_ROOT/common/tools_sfe/artemis/linux $ARTEMIS_TOOLS_ROOT/linux +cp -r $BSP_ROOT/common/tools_sfe/artemis/macosx $ARTEMIS_TOOLS_ROOT/macosx +cp -r $BSP_ROOT/common/tools_sfe/artemis/windows $ARTEMIS_TOOLS_ROOT/windows +cp $BSP_ROOT/common/tools_sfe/artemis/artemis_svl.py $ARTEMIS_TOOLS_ROOT/artemis_svl.py + +echo "You are not done! Have you rebuilt the embedded artemis_svl.bin and copied it under the 'bootloaders' folder?" \ No newline at end of file diff --git a/tools/variants/regen_variants.sh b/tools/scripts/regen_variants.sh similarity index 96% rename from tools/variants/regen_variants.sh rename to tools/scripts/regen_variants.sh index fcaa14c..dbb906d 100644 --- a/tools/variants/regen_variants.sh +++ b/tools/scripts/regen_variants.sh @@ -2,8 +2,6 @@ # use this script to update variants based on bsp files - - # setup set -e set -o errexit @@ -14,7 +12,7 @@ DIR=$(dirname -- "$(readlink -f -- "$BASH_SOURCE")") # defaults BSP_ROOT=. -BOARDS_FILE=$DIR/arduino_boards.sh +BOARDS_FILE=$DIR/config/arduino_boards.sh VARIANTS_ROOT=../../variants # handle arguments diff --git a/variants/artemis/bsp/am_bsp.c b/variants/artemis/bsp/am_bsp.c index a39d414..fd1b8fc 100644 --- a/variants/artemis/bsp/am_bsp.c +++ b/variants/artemis/bsp/am_bsp.c @@ -86,7 +86,7 @@ am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS] = // Print interface tracking variable. // //***************************************************************************** -static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_NONE; +static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_UART0; //***************************************************************************** // @@ -172,12 +172,6 @@ static am_hal_uart_config_t g_sBspUartBufferedConfig = void am_bsp_low_power_init(void) { - // - // Make sure SWO/ITM/TPIU is disabled. - // SBL may not get it completely shut down. - // - am_bsp_itm_printf_disable(); - // // Initialize for low power in the power control block // @@ -194,9 +188,10 @@ am_bsp_low_power_init(void) am_hal_clkgen_control(AM_HAL_CLKGEN_CONTROL_XTAL_STOP, 0); // - // Disable the RTC. + // Make sure SWO/ITM/TPIU is disabled. + // SBL may not get it completely shut down. // - am_hal_rtc_osc_disable(); + am_bsp_itm_printf_disable(); #ifdef AM_BSP_NUM_LEDS // @@ -241,7 +236,9 @@ am_bsp_debug_printf_enable(void) { if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_SWO) { +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(); +#endif } else if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_UART0) { @@ -284,7 +281,11 @@ am_bsp_debug_printf_disable(void) // //***************************************************************************** void +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(void) +#else +am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg) +#endif { am_hal_tpiu_config_t TPIUcfg; @@ -297,15 +298,18 @@ am_bsp_itm_printf_enable(void) // Enable the ITM interface and the SWO pin. // am_hal_itm_enable(); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); // // Enable the ITM and TPIU // Set the BAUD clock for 1M // - TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_1M; + TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_2M; am_hal_tpiu_enable(&TPIUcfg); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #ifdef AM_BSP_GPIO_ITM_SWO + am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #else + am_hal_gpio_pinconfig(ui32Pin, sPincfg); + #endif // // Attach the ITM to the STDIO driver. @@ -313,6 +317,21 @@ am_bsp_itm_printf_enable(void) am_util_stdio_printf_init(am_hal_itm_print); } // am_bsp_itm_printf_enable() +//***************************************************************************** +// +//! @brief ITM-based string print function. +//! +//! This function is used for printing a string via the ITM. +//! +//! @return None. +// +//***************************************************************************** +void +am_bsp_itm_string_print(char *pcString) +{ + am_hal_itm_print(pcString); +} + //***************************************************************************** // // @brief Disable printing over ITM. diff --git a/variants/artemis/bsp/am_bsp.h b/variants/artemis/bsp/am_bsp.h index 71b19e9..a143fde 100644 --- a/variants/artemis/bsp/am_bsp.h +++ b/variants/artemis/bsp/am_bsp.h @@ -155,8 +155,12 @@ extern void am_bsp_ios_pins_disable(uint32_t ui32Module, uint32_t ui32IOSMode); extern void am_bsp_debug_printf_enable(void); extern void am_bsp_debug_printf_disable(void); -extern void am_bsp_itm_string_print(char *pcString); +#ifdef AM_BSP_GPIO_ITM_SWO extern void am_bsp_itm_printf_enable(void); +#else +extern void am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg); +#endif +extern void am_bsp_itm_string_print(char *pcString); extern void am_bsp_itm_printf_disable(void); extern void am_bsp_uart_string_print(char *pcString); diff --git a/variants/artemis_thing_plus/bsp/am_bsp.c b/variants/artemis_thing_plus/bsp/am_bsp.c index 4002ed2..12de9ab 100644 --- a/variants/artemis_thing_plus/bsp/am_bsp.c +++ b/variants/artemis_thing_plus/bsp/am_bsp.c @@ -89,7 +89,7 @@ am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS] = // Print interface tracking variable. // //***************************************************************************** -static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_NONE; +static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_UART0; //***************************************************************************** // @@ -175,12 +175,6 @@ static am_hal_uart_config_t g_sBspUartBufferedConfig = void am_bsp_low_power_init(void) { - // - // Make sure SWO/ITM/TPIU is disabled. - // SBL may not get it completely shut down. - // - am_bsp_itm_printf_disable(); - // // Initialize for low power in the power control block // @@ -197,9 +191,10 @@ am_bsp_low_power_init(void) am_hal_clkgen_control(AM_HAL_CLKGEN_CONTROL_XTAL_STOP, 0); // - // Disable the RTC. + // Make sure SWO/ITM/TPIU is disabled. + // SBL may not get it completely shut down. // - am_hal_rtc_osc_disable(); + am_bsp_itm_printf_disable(); #ifdef AM_BSP_NUM_LEDS // @@ -244,7 +239,9 @@ am_bsp_debug_printf_enable(void) { if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_SWO) { +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(); +#endif } else if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_UART0) { @@ -287,7 +284,11 @@ am_bsp_debug_printf_disable(void) // //***************************************************************************** void +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(void) +#else +am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg) +#endif { am_hal_tpiu_config_t TPIUcfg; @@ -300,15 +301,18 @@ am_bsp_itm_printf_enable(void) // Enable the ITM interface and the SWO pin. // am_hal_itm_enable(); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); // // Enable the ITM and TPIU // Set the BAUD clock for 1M // - TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_1M; + TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_2M; am_hal_tpiu_enable(&TPIUcfg); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #ifdef AM_BSP_GPIO_ITM_SWO + am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #else + am_hal_gpio_pinconfig(ui32Pin, sPincfg); + #endif // // Attach the ITM to the STDIO driver. @@ -316,6 +320,21 @@ am_bsp_itm_printf_enable(void) am_util_stdio_printf_init(am_hal_itm_print); } // am_bsp_itm_printf_enable() +//***************************************************************************** +// +//! @brief ITM-based string print function. +//! +//! This function is used for printing a string via the ITM. +//! +//! @return None. +// +//***************************************************************************** +void +am_bsp_itm_string_print(char *pcString) +{ + am_hal_itm_print(pcString); +} + //***************************************************************************** // // @brief Disable printing over ITM. diff --git a/variants/artemis_thing_plus/bsp/am_bsp.h b/variants/artemis_thing_plus/bsp/am_bsp.h index 8cd5b85..e13e9e1 100644 --- a/variants/artemis_thing_plus/bsp/am_bsp.h +++ b/variants/artemis_thing_plus/bsp/am_bsp.h @@ -98,13 +98,16 @@ extern "C" #define AM_BSP_QWIIC_I2C_SCL_PIN AM_BSP_GPIO_IOM4_SCL -// //***************************************************************************** -// // -// // Button definitions. -// // -// //***************************************************************************** -// #define AM_BSP_NUM_BUTTONS 0 -// extern am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS]; +//***************************************************************************** +// +// Button definitions. +// +//***************************************************************************** +#define AM_BSP_NUM_BUTTONS 1 +extern am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS]; + +#define AM_BSP_GPIO_BUTTON10 AM_BSP_GPIO_BUTTON0 +#define AM_BSP_GPIO_SWCH AM_BSP_GPIO_BUTTON0 //***************************************************************************** @@ -115,6 +118,11 @@ extern "C" #define AM_BSP_NUM_LEDS 1 extern am_devices_led_t am_bsp_psLEDs[AM_BSP_NUM_LEDS]; +// LED Device Array Indices +#define AM_BSP_LED0 0 +#define AM_BSP_LED_BLUE AM_BSP_LED0 + +// Corresponding GPIO Numbers #define AM_BSP_GPIO_LED AM_BSP_GPIO_LED_BLUE #define AM_BSP_GPIO_LED0 AM_BSP_GPIO_LED_BLUE #define AM_BSP_GPIO_LED18 AM_BSP_GPIO_LED_BLUE @@ -200,8 +208,12 @@ extern void am_bsp_ios_pins_disable(uint32_t ui32Module, uint32_t ui32IOSMode); extern void am_bsp_debug_printf_enable(void); extern void am_bsp_debug_printf_disable(void); -extern void am_bsp_itm_string_print(char *pcString); +#ifdef AM_BSP_GPIO_ITM_SWO extern void am_bsp_itm_printf_enable(void); +#else +extern void am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg); +#endif +extern void am_bsp_itm_string_print(char *pcString); extern void am_bsp_itm_printf_disable(void); extern void am_bsp_uart_string_print(char *pcString); diff --git a/variants/artemis_thing_plus/bsp/am_bsp_pins.c b/variants/artemis_thing_plus/bsp/am_bsp_pins.c index d6566d7..e060287 100644 --- a/variants/artemis_thing_plus/bsp/am_bsp_pins.c +++ b/variants/artemis_thing_plus/bsp/am_bsp_pins.c @@ -74,7 +74,7 @@ const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MIC_CLK = //***************************************************************************** // -// LED_BLUE pin: The BLUE LED. +// LED_BLUE pin: The BLUE LED labelled 18. // //***************************************************************************** const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_LED_BLUE = @@ -83,6 +83,19 @@ const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_LED_BLUE = .eDriveStrength = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA }; +//***************************************************************************** +// +// BUTTON0 pin: Labeled 10 on the Artemis Thing Plus. +// +//***************************************************************************** +const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_BUTTON0 = +{ + .uFuncSel = AM_HAL_PIN_14_GPIO, + .ePullup = AM_HAL_GPIO_PIN_PULLUP_1_5K, + .eDriveStrength = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA, + .eGPInput = AM_HAL_GPIO_PIN_INPUT_ENABLE +}; + //***************************************************************************** // // COM_UART_TX pin: This pin is the COM_UART transmit pin. @@ -821,6 +834,17 @@ const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA = .eGPOutcfg = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN }; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO = +{ + .uFuncSel = AM_HAL_PIN_33_SWO, + .eDriveStrength = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA +}; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK. diff --git a/variants/artemis_thing_plus/bsp/am_bsp_pins.h b/variants/artemis_thing_plus/bsp/am_bsp_pins.h index 633d6ab..b16a8c0 100644 --- a/variants/artemis_thing_plus/bsp/am_bsp_pins.h +++ b/variants/artemis_thing_plus/bsp/am_bsp_pins.h @@ -80,12 +80,20 @@ extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_MIC_CLK; //***************************************************************************** // -// LED_BLUE pin: The BLUE LED. +// LED_BLUE pin: The BLUE LED labelled 18. // //***************************************************************************** #define AM_BSP_GPIO_LED_BLUE 26 extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_LED_BLUE; +//***************************************************************************** +// +// BUTTON0 pin: Labeled 10 on the Artemis Thing Plus. +// +//***************************************************************************** +#define AM_BSP_GPIO_BUTTON0 14 +extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_BUTTON0; + //***************************************************************************** // // COM_UART_TX pin: This pin is the COM_UART transmit pin. @@ -544,6 +552,14 @@ extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SCL; #define AM_BSP_GPIO_IOS_SDA 1 extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +#define AM_BSP_GPIO_ITM_SWO 33 +extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK. diff --git a/variants/edge/bsp/am_bsp.c b/variants/edge/bsp/am_bsp.c index 3394d09..55c9952 100644 --- a/variants/edge/bsp/am_bsp.c +++ b/variants/edge/bsp/am_bsp.c @@ -92,7 +92,7 @@ am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS] = // Print interface tracking variable. // //***************************************************************************** -static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_NONE; +static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_UART0; //***************************************************************************** // @@ -178,12 +178,6 @@ static am_hal_uart_config_t g_sBspUartBufferedConfig = void am_bsp_low_power_init(void) { - // - // Make sure SWO/ITM/TPIU is disabled. - // SBL may not get it completely shut down. - // - am_bsp_itm_printf_disable(); - // // Initialize for low power in the power control block // @@ -200,9 +194,10 @@ am_bsp_low_power_init(void) am_hal_clkgen_control(AM_HAL_CLKGEN_CONTROL_XTAL_STOP, 0); // - // Disable the RTC. + // Make sure SWO/ITM/TPIU is disabled. + // SBL may not get it completely shut down. // - am_hal_rtc_osc_disable(); + am_bsp_itm_printf_disable(); #ifdef AM_BSP_NUM_LEDS // @@ -247,7 +242,9 @@ am_bsp_debug_printf_enable(void) { if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_SWO) { +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(); +#endif } else if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_UART0) { @@ -290,7 +287,11 @@ am_bsp_debug_printf_disable(void) // //***************************************************************************** void +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(void) +#else +am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg) +#endif { am_hal_tpiu_config_t TPIUcfg; @@ -303,15 +304,18 @@ am_bsp_itm_printf_enable(void) // Enable the ITM interface and the SWO pin. // am_hal_itm_enable(); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); // // Enable the ITM and TPIU // Set the BAUD clock for 1M // - TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_1M; + TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_2M; am_hal_tpiu_enable(&TPIUcfg); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #ifdef AM_BSP_GPIO_ITM_SWO + am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #else + am_hal_gpio_pinconfig(ui32Pin, sPincfg); + #endif // // Attach the ITM to the STDIO driver. @@ -319,6 +323,21 @@ am_bsp_itm_printf_enable(void) am_util_stdio_printf_init(am_hal_itm_print); } // am_bsp_itm_printf_enable() +//***************************************************************************** +// +//! @brief ITM-based string print function. +//! +//! This function is used for printing a string via the ITM. +//! +//! @return None. +// +//***************************************************************************** +void +am_bsp_itm_string_print(char *pcString) +{ + am_hal_itm_print(pcString); +} + //***************************************************************************** // // @brief Disable printing over ITM. diff --git a/variants/edge/bsp/am_bsp.h b/variants/edge/bsp/am_bsp.h index 267cda0..a70df29 100644 --- a/variants/edge/bsp/am_bsp.h +++ b/variants/edge/bsp/am_bsp.h @@ -132,6 +132,18 @@ extern am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS]; #define AM_BSP_NUM_LEDS 4 extern am_devices_led_t am_bsp_psLEDs[AM_BSP_NUM_LEDS]; +// LED Device Array Indices +#define AM_BSP_LED0 0 +#define AM_BSP_LED1 1 +#define AM_BSP_LED2 2 +#define AM_BSP_LED3 3 + +#define AM_BSP_LED_RED AM_BSP_LED0 +#define AM_BSP_LED_BLUE AM_BSP_LED1 +#define AM_BSP_LED_GREEN AM_BSP_LED2 +#define AM_BSP_LED_YELLOW AM_BSP_LED3 + +// Corresponding GPIO Numbers #define AM_BSP_GPIO_LED0 AM_BSP_GPIO_LED_RED #define AM_BSP_GPIO_LED1 AM_BSP_GPIO_LED_BLUE #define AM_BSP_GPIO_LED2 AM_BSP_GPIO_LED_GREEN @@ -223,8 +235,12 @@ extern void am_bsp_ios_pins_disable(uint32_t ui32Module, uint32_t ui32IOSMode); extern void am_bsp_debug_printf_enable(void); extern void am_bsp_debug_printf_disable(void); -extern void am_bsp_itm_string_print(char *pcString); +#ifdef AM_BSP_GPIO_ITM_SWO extern void am_bsp_itm_printf_enable(void); +#else +extern void am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg); +#endif +extern void am_bsp_itm_string_print(char *pcString); extern void am_bsp_itm_printf_disable(void); extern void am_bsp_uart_string_print(char *pcString); diff --git a/variants/edge/bsp/am_bsp_pins.c b/variants/edge/bsp/am_bsp_pins.c index 0642669..90a5bee 100644 --- a/variants/edge/bsp/am_bsp_pins.c +++ b/variants/edge/bsp/am_bsp_pins.c @@ -1033,6 +1033,17 @@ const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA = .eGPOutcfg = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN }; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO = +{ + .uFuncSel = AM_HAL_PIN_33_SWO, + .eDriveStrength = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA +}; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK. diff --git a/variants/edge/bsp/am_bsp_pins.h b/variants/edge/bsp/am_bsp_pins.h index 23dc7e0..b61b89f 100644 --- a/variants/edge/bsp/am_bsp_pins.h +++ b/variants/edge/bsp/am_bsp_pins.h @@ -688,6 +688,14 @@ extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SCL; #define AM_BSP_GPIO_IOS_SDA 1 extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +#define AM_BSP_GPIO_ITM_SWO 33 +extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK. diff --git a/variants/edge2/bsp/am_bsp.c b/variants/edge2/bsp/am_bsp.c index 3394d09..55c9952 100644 --- a/variants/edge2/bsp/am_bsp.c +++ b/variants/edge2/bsp/am_bsp.c @@ -92,7 +92,7 @@ am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS] = // Print interface tracking variable. // //***************************************************************************** -static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_NONE; +static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_UART0; //***************************************************************************** // @@ -178,12 +178,6 @@ static am_hal_uart_config_t g_sBspUartBufferedConfig = void am_bsp_low_power_init(void) { - // - // Make sure SWO/ITM/TPIU is disabled. - // SBL may not get it completely shut down. - // - am_bsp_itm_printf_disable(); - // // Initialize for low power in the power control block // @@ -200,9 +194,10 @@ am_bsp_low_power_init(void) am_hal_clkgen_control(AM_HAL_CLKGEN_CONTROL_XTAL_STOP, 0); // - // Disable the RTC. + // Make sure SWO/ITM/TPIU is disabled. + // SBL may not get it completely shut down. // - am_hal_rtc_osc_disable(); + am_bsp_itm_printf_disable(); #ifdef AM_BSP_NUM_LEDS // @@ -247,7 +242,9 @@ am_bsp_debug_printf_enable(void) { if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_SWO) { +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(); +#endif } else if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_UART0) { @@ -290,7 +287,11 @@ am_bsp_debug_printf_disable(void) // //***************************************************************************** void +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(void) +#else +am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg) +#endif { am_hal_tpiu_config_t TPIUcfg; @@ -303,15 +304,18 @@ am_bsp_itm_printf_enable(void) // Enable the ITM interface and the SWO pin. // am_hal_itm_enable(); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); // // Enable the ITM and TPIU // Set the BAUD clock for 1M // - TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_1M; + TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_2M; am_hal_tpiu_enable(&TPIUcfg); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #ifdef AM_BSP_GPIO_ITM_SWO + am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #else + am_hal_gpio_pinconfig(ui32Pin, sPincfg); + #endif // // Attach the ITM to the STDIO driver. @@ -319,6 +323,21 @@ am_bsp_itm_printf_enable(void) am_util_stdio_printf_init(am_hal_itm_print); } // am_bsp_itm_printf_enable() +//***************************************************************************** +// +//! @brief ITM-based string print function. +//! +//! This function is used for printing a string via the ITM. +//! +//! @return None. +// +//***************************************************************************** +void +am_bsp_itm_string_print(char *pcString) +{ + am_hal_itm_print(pcString); +} + //***************************************************************************** // // @brief Disable printing over ITM. diff --git a/variants/edge2/bsp/am_bsp.h b/variants/edge2/bsp/am_bsp.h index 34a33b2..973bc9b 100644 --- a/variants/edge2/bsp/am_bsp.h +++ b/variants/edge2/bsp/am_bsp.h @@ -139,6 +139,18 @@ extern "C" #define AM_BSP_NUM_LEDS 4 extern am_devices_led_t am_bsp_psLEDs[AM_BSP_NUM_LEDS]; +// LED Device Array Indices +#define AM_BSP_LED0 0 +#define AM_BSP_LED1 1 +#define AM_BSP_LED2 2 +#define AM_BSP_LED3 3 + +#define AM_BSP_LED_RED AM_BSP_LED0 +#define AM_BSP_LED_BLUE AM_BSP_LED1 +#define AM_BSP_LED_GREEN AM_BSP_LED2 +#define AM_BSP_LED_YELLOW AM_BSP_LED3 + +// Corresponding GPIO Numbers #define AM_BSP_GPIO_LED0 AM_BSP_GPIO_LED_RED #define AM_BSP_GPIO_LED1 AM_BSP_GPIO_LED_BLUE #define AM_BSP_GPIO_LED2 AM_BSP_GPIO_LED_GREEN @@ -230,8 +242,12 @@ extern void am_bsp_ios_pins_disable(uint32_t ui32Module, uint32_t ui32IOSMode); extern void am_bsp_debug_printf_enable(void); extern void am_bsp_debug_printf_disable(void); -extern void am_bsp_itm_string_print(char *pcString); +#ifdef AM_BSP_GPIO_ITM_SWO extern void am_bsp_itm_printf_enable(void); +#else +extern void am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg); +#endif +extern void am_bsp_itm_string_print(char *pcString); extern void am_bsp_itm_printf_disable(void); extern void am_bsp_uart_string_print(char *pcString); diff --git a/variants/edge2/bsp/am_bsp_pins.c b/variants/edge2/bsp/am_bsp_pins.c index e9cdae1..4343d90 100644 --- a/variants/edge2/bsp/am_bsp_pins.c +++ b/variants/edge2/bsp/am_bsp_pins.c @@ -1021,6 +1021,17 @@ const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA = .eGPOutcfg = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN }; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO = +{ + .uFuncSel = AM_HAL_PIN_33_SWO, + .eDriveStrength = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA +}; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK. diff --git a/variants/edge2/bsp/am_bsp_pins.h b/variants/edge2/bsp/am_bsp_pins.h index b9ec3e6..b9acdd7 100644 --- a/variants/edge2/bsp/am_bsp_pins.h +++ b/variants/edge2/bsp/am_bsp_pins.h @@ -680,6 +680,14 @@ extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SCL; #define AM_BSP_GPIO_IOS_SDA 1 extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +#define AM_BSP_GPIO_ITM_SWO 33 +extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK. diff --git a/variants/redboard_artemis/bsp/am_bsp.c b/variants/redboard_artemis/bsp/am_bsp.c index 4002ed2..12de9ab 100644 --- a/variants/redboard_artemis/bsp/am_bsp.c +++ b/variants/redboard_artemis/bsp/am_bsp.c @@ -89,7 +89,7 @@ am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS] = // Print interface tracking variable. // //***************************************************************************** -static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_NONE; +static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_UART0; //***************************************************************************** // @@ -175,12 +175,6 @@ static am_hal_uart_config_t g_sBspUartBufferedConfig = void am_bsp_low_power_init(void) { - // - // Make sure SWO/ITM/TPIU is disabled. - // SBL may not get it completely shut down. - // - am_bsp_itm_printf_disable(); - // // Initialize for low power in the power control block // @@ -197,9 +191,10 @@ am_bsp_low_power_init(void) am_hal_clkgen_control(AM_HAL_CLKGEN_CONTROL_XTAL_STOP, 0); // - // Disable the RTC. + // Make sure SWO/ITM/TPIU is disabled. + // SBL may not get it completely shut down. // - am_hal_rtc_osc_disable(); + am_bsp_itm_printf_disable(); #ifdef AM_BSP_NUM_LEDS // @@ -244,7 +239,9 @@ am_bsp_debug_printf_enable(void) { if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_SWO) { +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(); +#endif } else if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_UART0) { @@ -287,7 +284,11 @@ am_bsp_debug_printf_disable(void) // //***************************************************************************** void +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(void) +#else +am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg) +#endif { am_hal_tpiu_config_t TPIUcfg; @@ -300,15 +301,18 @@ am_bsp_itm_printf_enable(void) // Enable the ITM interface and the SWO pin. // am_hal_itm_enable(); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); // // Enable the ITM and TPIU // Set the BAUD clock for 1M // - TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_1M; + TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_2M; am_hal_tpiu_enable(&TPIUcfg); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #ifdef AM_BSP_GPIO_ITM_SWO + am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #else + am_hal_gpio_pinconfig(ui32Pin, sPincfg); + #endif // // Attach the ITM to the STDIO driver. @@ -316,6 +320,21 @@ am_bsp_itm_printf_enable(void) am_util_stdio_printf_init(am_hal_itm_print); } // am_bsp_itm_printf_enable() +//***************************************************************************** +// +//! @brief ITM-based string print function. +//! +//! This function is used for printing a string via the ITM. +//! +//! @return None. +// +//***************************************************************************** +void +am_bsp_itm_string_print(char *pcString) +{ + am_hal_itm_print(pcString); +} + //***************************************************************************** // // @brief Disable printing over ITM. diff --git a/variants/redboard_artemis/bsp/am_bsp.h b/variants/redboard_artemis/bsp/am_bsp.h index 0ce2ae8..1e1cb5c 100644 --- a/variants/redboard_artemis/bsp/am_bsp.h +++ b/variants/redboard_artemis/bsp/am_bsp.h @@ -106,6 +106,11 @@ extern "C" #define AM_BSP_NUM_LEDS 1 extern am_devices_led_t am_bsp_psLEDs[AM_BSP_NUM_LEDS]; +// LED Device Array Indices +#define AM_BSP_LED0 0 +#define AM_BSP_LED_BLUE AM_BSP_LED0 + +// Corresponding GPIO Numbers #define AM_BSP_GPIO_LED AM_BSP_GPIO_LED_BLUE #define AM_BSP_GPIO_LED0 AM_BSP_GPIO_LED_BLUE #define AM_BSP_GPIO_LED13 AM_BSP_GPIO_LED_BLUE @@ -190,8 +195,12 @@ extern void am_bsp_ios_pins_disable(uint32_t ui32Module, uint32_t ui32IOSMode); extern void am_bsp_debug_printf_enable(void); extern void am_bsp_debug_printf_disable(void); -extern void am_bsp_itm_string_print(char *pcString); +#ifdef AM_BSP_GPIO_ITM_SWO extern void am_bsp_itm_printf_enable(void); +#else +extern void am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg); +#endif +extern void am_bsp_itm_string_print(char *pcString); extern void am_bsp_itm_printf_disable(void); extern void am_bsp_uart_string_print(char *pcString); diff --git a/variants/redboard_artemis/bsp/am_bsp_pins.c b/variants/redboard_artemis/bsp/am_bsp_pins.c index ec781fc..5937265 100644 --- a/variants/redboard_artemis/bsp/am_bsp_pins.c +++ b/variants/redboard_artemis/bsp/am_bsp_pins.c @@ -821,6 +821,17 @@ const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA = .eGPOutcfg = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN }; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO = +{ + .uFuncSel = AM_HAL_PIN_33_SWO, + .eDriveStrength = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA +}; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK. diff --git a/variants/redboard_artemis/bsp/am_bsp_pins.h b/variants/redboard_artemis/bsp/am_bsp_pins.h index 6514617..490e637 100644 --- a/variants/redboard_artemis/bsp/am_bsp_pins.h +++ b/variants/redboard_artemis/bsp/am_bsp_pins.h @@ -544,6 +544,14 @@ extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SCL; #define AM_BSP_GPIO_IOS_SDA 1 extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +#define AM_BSP_GPIO_ITM_SWO 33 +extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK. diff --git a/variants/redboard_artemis_atp/bsp/am_bsp.c b/variants/redboard_artemis_atp/bsp/am_bsp.c index 4002ed2..12de9ab 100644 --- a/variants/redboard_artemis_atp/bsp/am_bsp.c +++ b/variants/redboard_artemis_atp/bsp/am_bsp.c @@ -89,7 +89,7 @@ am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS] = // Print interface tracking variable. // //***************************************************************************** -static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_NONE; +static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_UART0; //***************************************************************************** // @@ -175,12 +175,6 @@ static am_hal_uart_config_t g_sBspUartBufferedConfig = void am_bsp_low_power_init(void) { - // - // Make sure SWO/ITM/TPIU is disabled. - // SBL may not get it completely shut down. - // - am_bsp_itm_printf_disable(); - // // Initialize for low power in the power control block // @@ -197,9 +191,10 @@ am_bsp_low_power_init(void) am_hal_clkgen_control(AM_HAL_CLKGEN_CONTROL_XTAL_STOP, 0); // - // Disable the RTC. + // Make sure SWO/ITM/TPIU is disabled. + // SBL may not get it completely shut down. // - am_hal_rtc_osc_disable(); + am_bsp_itm_printf_disable(); #ifdef AM_BSP_NUM_LEDS // @@ -244,7 +239,9 @@ am_bsp_debug_printf_enable(void) { if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_SWO) { +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(); +#endif } else if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_UART0) { @@ -287,7 +284,11 @@ am_bsp_debug_printf_disable(void) // //***************************************************************************** void +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(void) +#else +am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg) +#endif { am_hal_tpiu_config_t TPIUcfg; @@ -300,15 +301,18 @@ am_bsp_itm_printf_enable(void) // Enable the ITM interface and the SWO pin. // am_hal_itm_enable(); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); // // Enable the ITM and TPIU // Set the BAUD clock for 1M // - TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_1M; + TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_2M; am_hal_tpiu_enable(&TPIUcfg); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #ifdef AM_BSP_GPIO_ITM_SWO + am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #else + am_hal_gpio_pinconfig(ui32Pin, sPincfg); + #endif // // Attach the ITM to the STDIO driver. @@ -316,6 +320,21 @@ am_bsp_itm_printf_enable(void) am_util_stdio_printf_init(am_hal_itm_print); } // am_bsp_itm_printf_enable() +//***************************************************************************** +// +//! @brief ITM-based string print function. +//! +//! This function is used for printing a string via the ITM. +//! +//! @return None. +// +//***************************************************************************** +void +am_bsp_itm_string_print(char *pcString) +{ + am_hal_itm_print(pcString); +} + //***************************************************************************** // // @brief Disable printing over ITM. diff --git a/variants/redboard_artemis_atp/bsp/am_bsp.h b/variants/redboard_artemis_atp/bsp/am_bsp.h index 181d51a..4c307b3 100644 --- a/variants/redboard_artemis_atp/bsp/am_bsp.h +++ b/variants/redboard_artemis_atp/bsp/am_bsp.h @@ -106,6 +106,11 @@ extern "C" #define AM_BSP_NUM_LEDS 1 extern am_devices_led_t am_bsp_psLEDs[AM_BSP_NUM_LEDS]; +// LED Device Array Indices +#define AM_BSP_LED0 0 +#define AM_BSP_LED_BLUE AM_BSP_LED0 + +// Corresponding GPIO Numbers #define AM_BSP_GPIO_LED AM_BSP_GPIO_LED_BLUE #define AM_BSP_GPIO_LED0 AM_BSP_GPIO_LED_BLUE #define AM_BSP_GPIO_LED37 AM_BSP_GPIO_LED_BLUE @@ -191,8 +196,12 @@ extern void am_bsp_ios_pins_disable(uint32_t ui32Module, uint32_t ui32IOSMode); extern void am_bsp_debug_printf_enable(void); extern void am_bsp_debug_printf_disable(void); -extern void am_bsp_itm_string_print(char *pcString); +#ifdef AM_BSP_GPIO_ITM_SWO extern void am_bsp_itm_printf_enable(void); +#else +extern void am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg); +#endif +extern void am_bsp_itm_string_print(char *pcString); extern void am_bsp_itm_printf_disable(void); extern void am_bsp_uart_string_print(char *pcString); diff --git a/variants/redboard_artemis_atp/bsp/am_bsp_pins.c b/variants/redboard_artemis_atp/bsp/am_bsp_pins.c index 7910b54..fab1480 100644 --- a/variants/redboard_artemis_atp/bsp/am_bsp_pins.c +++ b/variants/redboard_artemis_atp/bsp/am_bsp_pins.c @@ -821,6 +821,17 @@ const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA = .eGPOutcfg = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN }; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO = +{ + .uFuncSel = AM_HAL_PIN_33_SWO, + .eDriveStrength = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA +}; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK. diff --git a/variants/redboard_artemis_atp/bsp/am_bsp_pins.h b/variants/redboard_artemis_atp/bsp/am_bsp_pins.h index f54cfa0..48b229c 100644 --- a/variants/redboard_artemis_atp/bsp/am_bsp_pins.h +++ b/variants/redboard_artemis_atp/bsp/am_bsp_pins.h @@ -544,6 +544,14 @@ extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SCL; #define AM_BSP_GPIO_IOS_SDA 1 extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +#define AM_BSP_GPIO_ITM_SWO 33 +extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK. diff --git a/variants/redboard_artemis_nano/bsp/am_bsp.c b/variants/redboard_artemis_nano/bsp/am_bsp.c index 4002ed2..12de9ab 100644 --- a/variants/redboard_artemis_nano/bsp/am_bsp.c +++ b/variants/redboard_artemis_nano/bsp/am_bsp.c @@ -89,7 +89,7 @@ am_devices_button_t am_bsp_psButtons[AM_BSP_NUM_BUTTONS] = // Print interface tracking variable. // //***************************************************************************** -static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_NONE; +static uint32_t g_ui32PrintInterface = AM_BSP_PRINT_INFC_UART0; //***************************************************************************** // @@ -175,12 +175,6 @@ static am_hal_uart_config_t g_sBspUartBufferedConfig = void am_bsp_low_power_init(void) { - // - // Make sure SWO/ITM/TPIU is disabled. - // SBL may not get it completely shut down. - // - am_bsp_itm_printf_disable(); - // // Initialize for low power in the power control block // @@ -197,9 +191,10 @@ am_bsp_low_power_init(void) am_hal_clkgen_control(AM_HAL_CLKGEN_CONTROL_XTAL_STOP, 0); // - // Disable the RTC. + // Make sure SWO/ITM/TPIU is disabled. + // SBL may not get it completely shut down. // - am_hal_rtc_osc_disable(); + am_bsp_itm_printf_disable(); #ifdef AM_BSP_NUM_LEDS // @@ -244,7 +239,9 @@ am_bsp_debug_printf_enable(void) { if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_SWO) { +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(); +#endif } else if (g_ui32PrintInterface == AM_BSP_PRINT_INFC_UART0) { @@ -287,7 +284,11 @@ am_bsp_debug_printf_disable(void) // //***************************************************************************** void +#ifdef AM_BSP_GPIO_ITM_SWO am_bsp_itm_printf_enable(void) +#else +am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg) +#endif { am_hal_tpiu_config_t TPIUcfg; @@ -300,15 +301,18 @@ am_bsp_itm_printf_enable(void) // Enable the ITM interface and the SWO pin. // am_hal_itm_enable(); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); // // Enable the ITM and TPIU // Set the BAUD clock for 1M // - TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_1M; + TPIUcfg.ui32SetItmBaud = AM_HAL_TPIU_BAUD_2M; am_hal_tpiu_enable(&TPIUcfg); - // am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #ifdef AM_BSP_GPIO_ITM_SWO + am_hal_gpio_pinconfig(AM_BSP_GPIO_ITM_SWO, g_AM_BSP_GPIO_ITM_SWO); + #else + am_hal_gpio_pinconfig(ui32Pin, sPincfg); + #endif // // Attach the ITM to the STDIO driver. @@ -316,6 +320,21 @@ am_bsp_itm_printf_enable(void) am_util_stdio_printf_init(am_hal_itm_print); } // am_bsp_itm_printf_enable() +//***************************************************************************** +// +//! @brief ITM-based string print function. +//! +//! This function is used for printing a string via the ITM. +//! +//! @return None. +// +//***************************************************************************** +void +am_bsp_itm_string_print(char *pcString) +{ + am_hal_itm_print(pcString); +} + //***************************************************************************** // // @brief Disable printing over ITM. diff --git a/variants/redboard_artemis_nano/bsp/am_bsp.h b/variants/redboard_artemis_nano/bsp/am_bsp.h index 181da1b..ebe5408 100644 --- a/variants/redboard_artemis_nano/bsp/am_bsp.h +++ b/variants/redboard_artemis_nano/bsp/am_bsp.h @@ -106,6 +106,11 @@ extern "C" #define AM_BSP_NUM_LEDS 1 extern am_devices_led_t am_bsp_psLEDs[AM_BSP_NUM_LEDS]; +// LED Device Array Indices +#define AM_BSP_LED0 0 +#define AM_BSP_LED_BLUE AM_BSP_LED0 + +// Corresponding GPIO Numbers #define AM_BSP_GPIO_LED AM_BSP_GPIO_LED_BLUE #define AM_BSP_GPIO_LED0 AM_BSP_GPIO_LED_BLUE #define AM_BSP_GPIO_LED19 AM_BSP_GPIO_LED_BLUE @@ -191,8 +196,12 @@ extern void am_bsp_ios_pins_disable(uint32_t ui32Module, uint32_t ui32IOSMode); extern void am_bsp_debug_printf_enable(void); extern void am_bsp_debug_printf_disable(void); -extern void am_bsp_itm_string_print(char *pcString); +#ifdef AM_BSP_GPIO_ITM_SWO extern void am_bsp_itm_printf_enable(void); +#else +extern void am_bsp_itm_printf_enable(uint32_t ui32Pin, am_hal_gpio_pincfg_t sPincfg); +#endif +extern void am_bsp_itm_string_print(char *pcString); extern void am_bsp_itm_printf_disable(void); extern void am_bsp_uart_string_print(char *pcString); diff --git a/variants/redboard_artemis_nano/bsp/am_bsp_pins.c b/variants/redboard_artemis_nano/bsp/am_bsp_pins.c index 43c066d..196d0b3 100644 --- a/variants/redboard_artemis_nano/bsp/am_bsp_pins.c +++ b/variants/redboard_artemis_nano/bsp/am_bsp_pins.c @@ -54,12 +54,12 @@ //***************************************************************************** // -// LED_BLUE pin: The BLUE LED labelled 37. +// LED_BLUE pin: The BLUE LED labelled 19. // //***************************************************************************** const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_LED_BLUE = { - .uFuncSel = AM_HAL_PIN_37_GPIO, + .uFuncSel = AM_HAL_PIN_19_GPIO, .eDriveStrength = AM_HAL_GPIO_PIN_DRIVESTRENGTH_12MA }; @@ -821,6 +821,17 @@ const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA = .eGPOutcfg = AM_HAL_GPIO_PIN_OUTCFG_OPENDRAIN }; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO = +{ + .uFuncSel = AM_HAL_PIN_33_SWO, + .eDriveStrength = AM_HAL_GPIO_PIN_DRIVESTRENGTH_2MA +}; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK. diff --git a/variants/redboard_artemis_nano/bsp/am_bsp_pins.h b/variants/redboard_artemis_nano/bsp/am_bsp_pins.h index 0ee70ce..ffcfa56 100644 --- a/variants/redboard_artemis_nano/bsp/am_bsp_pins.h +++ b/variants/redboard_artemis_nano/bsp/am_bsp_pins.h @@ -64,10 +64,10 @@ extern "C" //***************************************************************************** // -// LED_BLUE pin: The BLUE LED labelled 37. +// LED_BLUE pin: The BLUE LED labelled 19. // //***************************************************************************** -#define AM_BSP_GPIO_LED_BLUE 37 +#define AM_BSP_GPIO_LED_BLUE 19 extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_LED_BLUE; //***************************************************************************** @@ -544,6 +544,14 @@ extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SCL; #define AM_BSP_GPIO_IOS_SDA 1 extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_IOS_SDA; +//***************************************************************************** +// +// ITM_SWO pin: ITM Serial Wire Output. +// +//***************************************************************************** +#define AM_BSP_GPIO_ITM_SWO 33 +extern const am_hal_gpio_pincfg_t g_AM_BSP_GPIO_ITM_SWO; + //***************************************************************************** // // SWDCK pin: Cortex Serial Wire DCK.