diff --git a/Ports/uCOS/stm32/src/T32_Term.c b/Ports/uCOS/stm32/src/T32_Term.c new file mode 100644 index 000000000..50fb7405a --- /dev/null +++ b/Ports/uCOS/stm32/src/T32_Term.c @@ -0,0 +1,333 @@ + +/*------------------------------*/ +/* TRACE32 Terminal Function */ +/*------------------------------*/ +/* + this terminal Function are for SingeE Access + on Devices with Dualport Access only. + + use on the Trace32 Driver the command + Terminal Setup: + + TERM.Reset + TERM.METHODE.SingleE + TERM.MODE Ascii| String | RAW | HEX | VT100 + + After this, start your Window Definition. + This can containe ONE terminal.view command with the SAME + configuration addresses. + + TERM e:TermOutAddress1 e:TermInAddress1 + TERM e:TermOutAddress2 e:TermInAddress2 + ..... + + + If you use the Enable functionality, then you can + enable (or disable) the T32-Terimanl Driver on the fly + by the command + + Data.Set e:TermOutAddress+2 %Byte -1 ; for enable + or + Data.Set e:TermOutAddress+2 %Byte 0 ; for disable + + note + if the "t32_term_pen_port" is located in the zero-section, then the + terminal is automatically disabled by default. + + + In the example, T32OutAddress means the Out-Byte of the Applycation view + and the T32InAddress means the In-Byte of the Applycation view + + +*/ +/*----------------------------------------------------------------------------*/ +/* History */ +/*--------- */ +/*--Date-+-change---------------------------------------------------+aut+Vers+*/ +/* 110508: is created for cortex (e.g. target with e: access) :akj:1.00:*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ + + +#include "T32_Term.h" + + + +/*----------------------------------------------------------------------------*/ +/* Put a character to T32-Terminal */ +/*----------------------------------------------------------------------------*/ +/* + Abstract + this funktion puts a character to the 3 (or 2) byte port + the port is a 3 cell memory part. + + struct(3 bytes, [0] unsigned char put (unsigned 8 bits), + [1] unsigned char get (unsigned 8 bits), + [2] unsigned char enable (unsigned 8 bits)) + + the last byte is optional and controller by the + - T32_term_enable_byte in the T32_Term.h file. + if this is >0, the the byte is used. + + The enable byte must be set to >0, otherwise, the terminal + functions are disabled in the applycation. + -------------------------------------------------------------------------- + The Put Funtion first checks the Enable Byte. If it is 0x0, + the the function is returned. + + If the Terminal is enabled, the Put Function checks the put Byte + if no Terminal is opened in the Trace32, then the last Character + is not readed and the Put Function will polling up to n parts. + n = t32_term_polling_nr defined in the T32_Term.h file. + + -------------------------------------------------------------------------- + + Parameter + -1- + struct t32_term_typedef *Address + + pointer to the Port-Structure. It is defined in the + T32_Term.h file. The selectable Port-Channel is for + Multi-Terminal mode. + Normaly use -> t32_termport <- for this paramter always. + + -2- + unsigned char + + 8 Bit Value for transmit to the Terminal. + Don't send a 0x00 value, it will not transmit. + + + the terminal can interprete a subset of VT100 syntax. + + return + none + + -------------------------------------------------------------------------- + +Example: + + include "T32_Term.h" + + T32_Term_Put(t32_termport,Character); + +------------------------------------------------------------------------------*/ + +void T32_Term_Put(t32_term_typedef *port, char uc_value) +{ +unsigned int polling_loop_ctr; + + +#if t32_term_enable_byte > 0 + if (port->enable == 0) + return; +#endif + + polling_loop_ctr = t32_term_polling_nr; + while ((port->put!=0) && (polling_loop_ctr !=0)) { + polling_loop_ctr--; + } + + if (port->put !=0) + return; + + port->put = (unsigned char)uc_value; + + return; + + + +} + + +/*----------------------------------------------------------------------------*/ +/* Get a character from T32-Terminal */ +/*----------------------------------------------------------------------------*/ +/* + Abstract + this funktion read's a character from the 3 (or 2) byte port + the port is a 3 cell memory part. + + struct(3 bytes, [0] unsigned char put (unsigned 8 bits), + [1] unsigned char get (unsigned 8 bits), + [2] unsigned char enable (unsigned 8 bits)) + + the last byte is optional and controller by the + - T32_term_enable_byte in the T32_Term.h file. + if this is >0, the the byte is used. + + The enable byte must be set to > 0, otherwise, the terminal + functions are disabled in the applycation. + -------------------------------------------------------------------------- + The Get Funtion first checks the Enable Byte. If it is 0x0, + the the function is returned with 0x00. + + If the Terminal is enabled, the Get Function reads the Value from + get Byte and then writes a 0x00 to the get byte for signaling to + Trace32, that the charcater is taked. + + -------------------------------------------------------------------------- + + Parameter + -1- + struct t32_term_typedef *Address + + pointer to the Port-Structure. It is defined in the + T32_Term.h file. The selectable Port-Channel is for + Multi-Terminal mode. + Normaly use -> t32_termport <- for this paramter always. + + + return unsigned char + + - 0x00 for no character is present + > 0x00 as Terminal Value. + + -------------------------------------------------------------------------- + +Example: + + include "T32_Term.h" + + unsigned char uc_terminal_char; + + uc_terminal_char = T32_Term_Get(t32_termport); + +------------------------------------------------------------------------------*/ + +unsigned char T32_Term_Get(t32_term_typedef *port) +{ + unsigned char uc_val; + +#if t32_term_enable_byte > 0 + if (port->enable == 0) + return (unsigned char)0x0; +#endif + + uc_val = (unsigned char)port->get; /* read port */ + if (uc_val > 0) + port->get = 0; /* write handshake */ + + return uc_val; +} + + + +/*----------------------------------------------------------------------------*/ +/* RX-Status T32-Terminal */ +/*----------------------------------------------------------------------------*/ +/* + Abstract see Put and Get Function + -------------------------------------------------------------------------- + + Parameter + -1- + struct t32_term_typedef *Address + + pointer to the Port-Structure. It is defined in the + T32_Term.h file. At this time, only one Terminal can + be used in the Trace32. The selectable Port-Channel is for + future. + Normaly use -> t32_termport <- for this paramter always. + + + return unsigned char + + - 0x00 for no character is present + 0xFF a Character is ready for get it + + -------------------------------------------------------------------------- + +Example: + + include "T32_Term.h" + + unsigned char uc_terminal_status; + + uc_terminal_status = T32_Term_RXStatus(t32_termport); + +------------------------------------------------------------------------------*/ + +unsigned char T32_Term_RXStatus(t32_term_typedef *port) +{ + unsigned char uc_val; + +#if t32_term_enable_byte > 0 + if (port->enable == 0) + return (unsigned char)0x0; +#endif + + uc_val = port->get; /* read port */ + if (uc_val > 0) + return (unsigned char)0x0; + else + return (unsigned char)0xff; + +} + +/*----------------------------------------------------------------------------*/ +/* TX-Status T32-Terminal */ +/*----------------------------------------------------------------------------*/ +/* + Abstract see Put and Get Function + -------------------------------------------------------------------------- + + Parameter + -1- + struct t32_term_typedef *Address + + pointer to the Port-Structure. It is defined in the + T32_Term.h file. At this time, only one Terminal can + be used in the Trace32. The selectable Port-Channel is for + future. + Normaly use -> t32_termport <- for this paramter always. + + + return unsigned char + + - 0x00 TX Buffer is empty + 0xFF TX Buffer is not ready for transmit + + -------------------------------------------------------------------------- + +Example: + + include "T32_Term.h" + + unsigned char uc_terminal_status; + + uc_terminal_status = T32_Term_TXStatus(t32_termport); + +------------------------------------------------------------------------------*/ + +unsigned char T32_Term_TXStatus(t32_term_typedef *port) +{ + unsigned char uc_val; + +#if t32_term_enable_byte > 0 + if (port->enable == 0) + return (unsigned char)0x0; +#endif + + uc_val = port->put; + if (uc_val > 0) + return (unsigned char)0xff; + else + return (unsigned char)0x00; +} + +/* eof */ + diff --git a/Ports/uCOS/stm32/src/T32_Term.h b/Ports/uCOS/stm32/src/T32_Term.h new file mode 100644 index 000000000..ee38d24a8 --- /dev/null +++ b/Ports/uCOS/stm32/src/T32_Term.h @@ -0,0 +1,72 @@ +/*------------------------------*/ +/* TRACE32 Terminal Header File */ +/*------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* History */ +/*--------- */ +/*--Date-+-change---------------------------------------------------+aut+Vers+*/ +/* 110508: is created for cortex (e.g. target with e: access) :akj:1.00:*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ +/* : : : :*/ +/*-------+----------------------------------------------------------+---+----+*/ + + + +#ifndef __t32_term_def_h +#define __t32_term_def_h + + + + + +#define t32_term_enable_byte 1 /* 1 = terminal Enable-Byte is used; 0= not used */ +#define t32_term_polling_nr 100 /* n pollings for transmit a byte is used (min is 1) */ +#define t32_termportaddress 0x2000fff0 /* Put = 0x20083ff0, get = 0x20083ff1, enable = 0x20083ff2 */ +#define t32_termportaddress2 0x2000fff3 /* Put = 0x20083ff3, get = 0x20083ff4, enable = 0x20083ff5 */ + + +/*----------------*/ +/* Define Struct */ +/*----------------*/ + + +typedef struct +{ + volatile unsigned char put; + volatile unsigned char get; +#if t32_term_enable_byte > 0 + volatile unsigned char enable; +#endif +} t32_term_typedef; + +#define t32_termport (( t32_term_typedef *) t32_termportaddress) +#define t32_termport_2 (( t32_term_typedef *) t32_termportaddress2) + + + +/*----------------*/ +/* Define Function*/ +/*----------------*/ + +extern void T32_Term_Put(t32_term_typedef * port, + char uc_value ); /* send a character from application to the host */ +unsigned char T32_Term_Get(t32_term_typedef *port ); /* get a character from host to application */ +extern unsigned char T32_Term_TXStatus(t32_term_typedef *port ); /* check terminal status */ +extern unsigned char T32_Term_RXStatus(t32_term_typedef *port ); /* check terminal status */ + +#endif + +/* eof */ + diff --git a/Ports/uCOS/stm32/src/bsp_debug.c b/Ports/uCOS/stm32/src/bsp_debug.c new file mode 100644 index 000000000..757f64f1c --- /dev/null +++ b/Ports/uCOS/stm32/src/bsp_debug.c @@ -0,0 +1,375 @@ +/*============================================================================= +* (C) Copyright Albis Technologies Ltd 2011 +*============================================================================== +* STM32 Example Code +*============================================================================== +* File name: bsp_debug.c +* +* Notes: STM32 evaluation board UM0780 debug utilities BSP. +*============================================================================*/ + +#include + +#include "bsp.h" +#include "bsp_debug.h" +#include "T32_Term.h" + +#include "stm32f10x_gpio.h" +#include "stm32f10x_usart.h" + +#define DEBUG_T32_TERM_IN_USE 0 + +#define DEBUG_UART_IN_USE 0 +#define UART_2_REMAP 1 + +#define DEBUG_UART_1 1 +#define DEBUG_UART_2 2 +#define DEBUG_UART_3 3 + +/*============================================================================= +=============================================================================*/ +static void writeByteSerialPort(const char b) +{ +#if(DEBUG_UART_IN_USE == DEBUG_UART_1) + while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) != SET); + USART_SendData(USART1, b); +#endif + +#if(DEBUG_UART_IN_USE == DEBUG_UART_2) + while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) != SET); + USART_SendData(USART2, b); +#endif + +#if(DEBUG_UART_IN_USE == DEBUG_UART_3) + while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) != SET); + USART_SendData(USART3, b); +#endif + +#if(DEBUG_T32_TERM_IN_USE > 0) + while(T32_Term_TXStatus(t32_termport) != 0); + T32_Term_Put(t32_termport, b); +#endif +} + +/*============================================================================= +=============================================================================*/ +static void writeStringSerialPort(const char *s) +{ + int total = 0; + + while(s[total]) + { + writeByteSerialPort(s[total++]); + } +} + +/*============================================================================= +=============================================================================*/ +static void dbgOutNumHex(unsigned long n, long depth) +{ + if(depth) + { + depth--; + } + + if((n & ~0xf) || depth) + { + dbgOutNumHex(n >> 4, depth); + n &= 0xf; + } + + if(n < 10) + { + writeByteSerialPort((unsigned char)(n + '0')); + } + else + { + writeByteSerialPort((unsigned char)(n - 10 + 'A')); + } +} + +/*============================================================================= +=============================================================================*/ +static void dbgOutNumDecimal(unsigned long n) +{ + if(n >= 10) + { + dbgOutNumDecimal(n / 10); + n %= 10; + } + writeByteSerialPort((unsigned char)(n + '0')); +} + +/*============================================================================= +=============================================================================*/ +void initSerialDebug(void) +{ +#if(DEBUG_UART_IN_USE > 0) + GPIO_InitTypeDef gpio_init; + USART_InitTypeDef usart_init; + USART_ClockInitTypeDef usart_clk_init; + + /* ----------------- INIT USART STRUCT ---------------- */ + usart_init.USART_BaudRate = 115200 / 2; + usart_init.USART_WordLength = USART_WordLength_8b; + usart_init.USART_StopBits = USART_StopBits_1; + usart_init.USART_Parity = USART_Parity_No; + usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + usart_init.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + usart_clk_init.USART_Clock = USART_Clock_Disable; + usart_clk_init.USART_CPOL = USART_CPOL_Low; + usart_clk_init.USART_CPHA = USART_CPHA_2Edge; + usart_clk_init.USART_LastBit = USART_LastBit_Disable; + +#if(DEBUG_UART_IN_USE == DEBUG_UART_1) + BSP_PeriphEn(BSP_PERIPH_ID_USART1); + + /* ----------------- SETUP USART1 GPIO ---------------- */ +#if(UART_1_REMAP > 0) + BSP_PeriphEn(BSP_PERIPH_ID_IOPB); + BSP_PeriphEn(BSP_PERIPH_ID_IOPD); + BSP_PeriphEn(BSP_PERIPH_ID_AFIO); + GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); + + /* Configure GPIOB.6 as push-pull. */ + gpio_init.GPIO_Pin = GPIO_Pin_6; + gpio_init.GPIO_Speed = GPIO_Speed_50MHz; + gpio_init.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOB, &gpio_init); + + /* Configure GPIOB.7 as input floating. */ + gpio_init.GPIO_Pin = GPIO_Pin_7; + gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOB, &gpio_init); +#else + BSP_PeriphEn(BSP_PERIPH_ID_IOPA); + + /* Configure GPIOA.9 as push-pull. */ + gpio_init.GPIO_Pin = GPIO_Pin_9; + gpio_init.GPIO_Speed = GPIO_Speed_50MHz; + gpio_init.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOA, &gpio_init); + + /* Configure GPIOA.10 as input floating. */ + gpio_init.GPIO_Pin = GPIO_Pin_10; + gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOA, &gpio_init); +#endif /* UART_1_REMAP */ + + /* ------------------ SETUP USART1 -------------------- */ + USART_Init(USART1, &usart_init); + USART_ClockInit(USART1, &usart_clk_init); + USART_Cmd(USART1, ENABLE); + +#ifdef UART_IRQ + BSP_IntVectSet(BSP_INT_ID_USART1, debug_uart_isr); + BSP_IntEn(BSP_INT_ID_USART1); +#endif /* UART_IRQ */ +#endif /* DEBUG_UART_1 */ + +#if(DEBUG_UART_IN_USE == DEBUG_UART_2) + BSP_PeriphEn(BSP_PERIPH_ID_USART2); + + /* ----------------- SETUP USART2 GPIO ---------------- */ +#if(UART_2_REMAP > 0) + BSP_PeriphEn(BSP_PERIPH_ID_IOPD); + BSP_PeriphEn(BSP_PERIPH_ID_AFIO); + GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); + + /* Configure GPIOD.5 as push-pull. */ + gpio_init.GPIO_Pin = GPIO_Pin_5; + gpio_init.GPIO_Speed = GPIO_Speed_50MHz; + gpio_init.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOD, &gpio_init); + + /* Configure GPIOD.6 as input floating. */ + gpio_init.GPIO_Pin = GPIO_Pin_6; + gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOD, &gpio_init); +#else + BSP_PeriphEn(BSP_PERIPH_ID_IOPA); + + /* Configure GPIOA.2 as push-pull. */ + gpio_init.GPIO_Pin = GPIO_Pin_2; + gpio_init.GPIO_Speed = GPIO_Speed_50MHz; + gpio_init.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOA, &gpio_init); + + /* Configure GPIOA.3 as input floating. */ + gpio_init.GPIO_Pin = GPIO_Pin_3; + gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOA, &gpio_init); +#endif /* UART_2_REMAP */ + + /* ------------------ SETUP USART2 -------------------- */ + USART_Init(USART2, &usart_init); + USART_ClockInit(USART2, &usart_clk_init); + USART_Cmd(USART2, ENABLE); + +#ifdef UART_IRQ + BSP_IntVectSet(BSP_INT_ID_USART2, debug_uart_isr); + BSP_IntEn(BSP_INT_ID_USART2); +#endif /* UART_IRQ */ +#endif /* DEBUG_UART_2 */ + +#if(DEBUG_UART_IN_USE == DEBUG_UART_3) + BSP_PeriphEn(BSP_PERIPH_ID_USART3); + + /* ----------------- SETUP USART3 GPIO ---------------- */ +#if(UART_3_REMAP_PARTIAL > 0) + BSP_PeriphEn(BSP_PERIPH_ID_IOPC); + BSP_PeriphEn(BSP_PERIPH_ID_AFIO); + GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE); + + /* Configure GPIOC.10 as push-pull. */ + gpio_init.GPIO_Pin = GPIO_Pin_10; + gpio_init.GPIO_Speed = GPIO_Speed_50MHz; + gpio_init.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOC, &gpio_init); + + /* Configure GPIOC.11 as input floating. */ + gpio_init.GPIO_Pin = GPIO_Pin_11; + gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOC, &gpio_init); + +#elif(UART_3_REMAP_FULL > 0) + BSP_PeriphEn(BSP_PERIPH_ID_IOPD); + BSP_PeriphEn(BSP_PERIPH_ID_AFIO); + GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE); + + /* Configure GPIOD.8 as push-pull. */ + gpio_init.GPIO_Pin = GPIO_Pin_8; + gpio_init.GPIO_Speed = GPIO_Speed_50MHz; + gpio_init.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOD, &gpio_init); + + /* Configure GPIOD.9 as input floating. */ + gpio_init.GPIO_Pin = GPIO_Pin_9; + gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOD, &gpio_init); + +#else + BSP_PeriphEn(BSP_PERIPH_ID_IOPB); + + /* Configure GPIOB.10 as push-pull. */ + gpio_init.GPIO_Pin = GPIO_Pin_10; + gpio_init.GPIO_Speed = GPIO_Speed_50MHz; + gpio_init.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOB, &gpio_init); + + /* Configure GPIOB.11 as input floating. */ + gpio_init.GPIO_Pin = GPIO_Pin_11; + gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOB, &gpio_init); +#endif /* UART_3_REMAP_FULL */ + + /* ------------------ SETUP USART3 -------------------- */ + USART_Init(USART3, &usart_init); + USART_ClockInit(USART3, &usart_clk_init); + USART_Cmd(USART3, ENABLE); + +#ifdef UART_IRQ + BSP_IntVectSet(BSP_INT_ID_USART3, debug_uart_isr); + BSP_IntEn(BSP_INT_ID_USART3); +#endif /* UART_IRQ */ +#endif /* DEBUG_UART_3 */ +#endif /* DEBUG_UART_IN_USE */ +} + +/*============================================================================= +=============================================================================*/ +void printos(const char *sz, ...) +{ + unsigned char c; + va_list vl; + + va_start(vl, sz); + + while (*sz) + { + c = *sz++; + switch (c) + { + case '%': + c = *sz++; + switch (c) { + case 'x': + dbgOutNumHex(va_arg(vl, unsigned long), 0); + break; + case 'B': + dbgOutNumHex(va_arg(vl, unsigned long), 2); + break; + case 'H': + dbgOutNumHex(va_arg(vl, unsigned long), 4); + break; + case 'X': + dbgOutNumHex(va_arg(vl, unsigned long), 8); + break; + case 'd': + { + long l; + + l = va_arg(vl, long); + if (l < 0) { + writeByteSerialPort('-'); + l = - l; + } + dbgOutNumDecimal((unsigned long)l); + } + break; + case 'u': + dbgOutNumDecimal(va_arg(vl, unsigned long)); + break; + case 's': + writeStringSerialPort(va_arg(vl, char *)); + break; + case '%': + writeByteSerialPort('%'); + break; + case 'c': + c = (unsigned char)va_arg(vl, unsigned int); + writeByteSerialPort(c); + break; + + default: + writeByteSerialPort(' '); + break; + } + break; + case '\r': + if (*sz == '\n') + sz ++; + c = '\n'; + /* fall through */ + case '\n': + writeByteSerialPort('\r'); + /* fall through */ + default: + writeByteSerialPort(c); + } + } + + va_end(vl); +} + +/*============================================================================= +=============================================================================*/ +void restartSystem(void) +{ + BSP_LED_On(3); + + /* TODO */ + for(;;); +} + +/*============================================================================= +=============================================================================*/ +void fatalErrorHandler(const int reset, + const char *fileName, + unsigned short lineNumber) +{ + printos("\r\nFATAL SW ERROR IN %s at %d!\r\n", fileName, lineNumber); + + restartSystem(); +} diff --git a/Ports/uCOS/stm32/src/bsp_debug.h b/Ports/uCOS/stm32/src/bsp_debug.h new file mode 100644 index 000000000..c91737c51 --- /dev/null +++ b/Ports/uCOS/stm32/src/bsp_debug.h @@ -0,0 +1,39 @@ +/*============================================================================= +* (C) Copyright Albis Technologies Ltd 2011 +*============================================================================== +* STM32 Example Code +*============================================================================== +* File name: bsp_debug.h +* +* Notes: STM32 evaluation board UM0780 debug utilities BSP. +*============================================================================*/ + +#ifndef BSP_DEBUG_H +#define BSP_DEBUG_H + +void fatalErrorHandler(const int reset, + const char *fileName, + unsigned short lineNumber); + +// Whether or not source code file names are revealed. +#define REVEAL_SOURCE_FILE_NAMES 1 + +#if (REVEAL_SOURCE_FILE_NAMES == 1) + #define DEFINE_THIS_FILE static char const _this_file_name_[] = __FILE__; +#else + #define DEFINE_THIS_FILE static char const _this_file_name_[] = "***"; +#endif // REVEAL_SOURCE_FILE_NAMES + +#define SYS_ERROR(reset) fatalErrorHandler(reset, \ + _this_file_name_, \ + __LINE__) + +#define SYS_ASSERT(cond) if(!(cond)) { SYS_ERROR(1); } + +void initSerialDebug(void); + +void printos(const char *sz, ...); + +void restartSystem(void); + +#endif // BSP_DEBUG_H