15 #if defined ( __CC_ARM ) 16 #if (__ARMCC_VERSION < 400000) 19 #pragma import _printf_widthprec 24 #define DEBUG_PORT UART0 // Use UART0 as debug port 29 #if defined(DEBUG_ENABLE_SEMIHOST) 39 #if !(defined(__ICCARM__) && (__VER__ >= 6010000)) 51 printf(
"r0 = 0x%x\n", stack[
r0]);
52 printf(
"r1 = 0x%x\n", stack[
r1]);
53 printf(
"r2 = 0x%x\n", stack[
r2]);
54 printf(
"r3 = 0x%x\n", stack[
r3]);
55 printf(
"r12 = 0x%x\n", stack[
r12]);
56 printf(
"lr = 0x%x\n", stack[
lr]);
57 printf(
"pc = 0x%x\n", stack[
pc]);
58 printf(
"psr = 0x%x\n", stack[
psr]);
63 printf(
"In Hard Fault Handler\n");
75 #if defined(DEBUG_ENABLE_SEMIHOST) 77 static char g_buf[16];
78 static char g_buf_len = 0;
82 # if defined ( __GNUC__ ) && !(__CC_ARM) && !(__ICCARM__) 84 # elif defined(__ICCARM__) 106 "LDR R1, [R0, #24] \n" 108 "LDR R2, [pc, #8] \n" 110 "BNE HardFault_Handler_Ret\n" 112 "STR R1, [R0, #24] \n" 115 "HardFault_Handler_Ret:\n" 119 "BEQ Stack_Use_MSP \n" 121 "B Get_LR_and_Branch \n" 124 "Get_LR_and_Branch: \n" 126 "B Hard_Fault_Handler \n" 142 int32_t SH_DoCommand(int32_t n32In_R0, int32_t n32In_R1, int32_t *pn32Out_R0)
188 BNE HardFault_Handler_Ret
194 HardFault_Handler_Ret
201 MRS R0, PSP ;stack use PSP
204 MRS R0, MSP ; stack use MSP
225 __asm int32_t SH_DoCommand(int32_t n32In_R0, int32_t n32In_R1, int32_t *pn32Out_R0)
252 # if defined ( __GNUC__ ) && !(__CC_ARM) && !(__ICCARM__) 272 "B Hard_Fault_Handler \n" 275 "B Hard_Fault_Handler \n" 281 # elif defined(__ICCARM__) 298 "BEQ Stack_Use_MSP \n" 300 "B Get_LR_and_Branch \n" 303 "Get_LR_and_Branch: \n" 305 "B Hard_Fault_Handler \n" 329 MRS R0, PSP ;stack use PSP
332 MRS R0, MSP ; stack use MSP
372 #if defined(DEBUG_ENABLE_SEMIHOST) 373 g_buf[g_buf_len++] = ch;
374 g_buf[g_buf_len] =
'\0';
375 if(g_buf_len + 1 >=
sizeof(g_buf) || ch ==
'\n' || ch ==
'\0')
380 if(SH_DoCommand(0x04, (
int)g_buf,
NULL) != 0)
389 for(i=0; i<g_buf_len; i++)
409 #if defined(DEBUG_ENABLE_SEMIHOST) 410 # if defined ( __CC_ARM ) 412 while(SH_DoCommand(0x101, 0, &nRet) != 0)
416 SH_DoCommand(0x07, 0, &nRet);
422 while(SH_DoCommand(0x7, 0, &nRet) != 0)
491 #if defined (__GNUC__) && !defined(__ARMCC_VERSION) 493 int _write (
int fd,
char *ptr,
int len)
510 int _read (
int fd,
char *ptr,
int len)
532 #ifdef DEBUG_ENABLE_SEMIHOST 534 void __exit(
int return_code)
539 if(SH_DoCommand(0x18, 0x20026,
NULL) == 0)
549 void _sys_exit(
int return_code)
553 if(SH_DoCommand(0x18, 0x20026,
NULL) == 0)
char GetChar(void)
Read a char from debug console.
int IsDebugFifoEmpty(void)
Check whether UART transmit FIFO is empty or not.
__asm int32_t HardFault_Handler(void)
This HardFault handler is implemented to show r0, r1, r2, r3, r12, lr, pc, psr.
void SendChar_ToUART(int ch)
Write a char to UART.
#define UART_FSR_RX_EMPTY_F_Msk
void Hard_Fault_Handler(uint32_t stack[])
Nano100 series peripheral access layer header file. This file contains all the peripheral register's ...
#define NULL
NULL pointer.
int kbhit(void)
Check whether UART receive FIFO is empty or not.
#define UART_FSR_TE_F_Msk
void SendChar(int ch)
Write a char to debug console.
void stackDump(uint32_t stack[])
int fputc(int ch, FILE *f)
#define UART_FSR_TX_FULL_F_Msk