15#if defined ( __CC_ARM )
16#if (__ARMCC_VERSION < 400000)
19#pragma import _printf_widthprec
26#if defined(DEBUG_ENABLE_SEMIHOST)
35#if !(defined(__ICCARM__) && (__VER__ >= 6010000))
36# if (__ARMCC_VERSION < 6040000)
42#elif(__VER__ >= 8000000)
60 printf(
"r0 = 0x%x\n", stack[
r0]);
61 printf(
"r1 = 0x%x\n", stack[
r1]);
62 printf(
"r2 = 0x%x\n", stack[
r2]);
63 printf(
"r3 = 0x%x\n", stack[
r3]);
64 printf(
"r12 = 0x%x\n", stack[
r12]);
65 printf(
"lr = 0x%x\n", stack[
lr]);
66 printf(
"pc = 0x%x\n", stack[
pc]);
67 printf(
"psr = 0x%x\n", stack[
psr]);
78 printf(
"In Hard Fault Handler\n");
86#if defined(DEBUG_ENABLE_SEMIHOST)
89static char g_buf_len = 0;
93# if defined ( __GNUC__ ) && !(__CC_ARM) && !(__ICCARM__)
95# elif defined(__ICCARM__)
122int32_t SH_DoCommand(int32_t n32In_R0, int32_t n32In_R1, int32_t *pn32Out_R0)
134void Get_LR_and_Branch(
void)
137 "B Hard_Fault_Handler \n"
141void Stack_Use_MSP(
void)
144 "B Get_LR_and_Branch \n"
148void HardFault_Handler_Ret(
void)
153 "BEQ Stack_Use_MSP \n"
155 "B Get_LR_and_Branch \n"
159void SP_Read_Ready(
void)
161 asm(
"LDR R1, [R0, #24] \n"
163 "LDR R2, [pc, #8] \n"
165 "BNE HardFault_Handler_Ret \n"
167 "STR R1, [R0, #24] \n"
170 "B HardFault_Handler_Ret \n"
231 BNE HardFault_Handler_Ret
244 MRS R0, PSP ;stack use PSP
247 MRS R0, MSP ; stack use MSP
249 MOV R1, LR ; LR current
value
268__asm int32_t SH_DoCommand(int32_t n32In_R0, int32_t n32In_R1, int32_t *pn32Out_R0)
295# if defined ( __GNUC__ ) && !(__CC_ARM) && !(__ICCARM__)
315 "B Hard_Fault_Handler \n"
318 "B Hard_Fault_Handler \n"
324# elif defined(__ICCARM__)
326void Get_LR_and_Branch(
void)
329 "B Hard_Fault_Handler \n"
333void Stack_Use_MSP(
void)
336 "B Get_LR_and_Branch \n"
355 "BEQ Stack_Use_MSP \n"
357 "B Get_LR_and_Branch \n"
381 MRS R0, PSP ;stack use PSP
384 MRS R0, MSP ; stack use MSP
386 MOV R1, LR ; LR current
value
395#define DEBUG_PORT UART0
421#if defined(DEBUG_ENABLE_SEMIHOST)
422 g_buf[g_buf_len++] = ch;
423 g_buf[g_buf_len] =
'\0';
424 if(g_buf_len + 1 >=
sizeof(g_buf) || ch ==
'\n' || ch ==
'\0') {
427 if(SH_DoCommand(0x04, (
int)g_buf,
NULL) != 0) {
433 for(i=0; i<g_buf_len; i++)
451#if defined(DEBUG_ENABLE_SEMIHOST)
452# if defined ( __CC_ARM )
454 while(SH_DoCommand(0x101, 0, &nRet) != 0) {
456 SH_DoCommand(0x07, 0, &nRet);
462 while(SH_DoCommand(0x7, 0, &nRet) != 0) {
527#if defined ( __GNUC__ )
529int _write (
int fd,
char *ptr,
int len)
546int _read (
int fd,
char *ptr,
int len)
601#ifdef DEBUG_ENABLE_SEMIHOST
603void __exit(
int return_code)
607 if(SH_DoCommand(0x18, 0x20026,
NULL) == 0) {
615void _sys_exit(
int return_code)
619 if(SH_DoCommand(0x18, 0x20026,
NULL) == 0) {
NUC472/NUC442 peripheral access layer header file. This file contains all the peripheral register's d...
#define UART_FIFOSTS_TXFULL_Msk
#define UART_FIFOSTS_RXFULL_Msk
#define UART_FIFOSTS_TXEMPTYF_Msk
#define UART_FIFOSTS_RXEMPTY_Msk
#define NULL
NULL pointer.
void _ttywrch(int ch)
C library retargetting.
__asm int32_t HardFault_Handler(void)
This HardFault handler is implemented to show r0, r1, r2, r3, r12, lr, pc, psr.
int fputc(int ch, FILE *stream)
Write character to stream.
int ferror(FILE *stream)
Check error indicator.
int IsDebugFifoEmpty(void)
Check whether UART transmit FIFO is empty or not.
void SendChar_ToUART(int ch)
Write a char to UART.
int kbhit(void)
Check whether UART receive FIFO is empty or not.
int fgetc(FILE *stream)
Get character from UART debug port or semihosting input.
void Hard_Fault_Handler(uint32_t stack[])
Hard fault handler.
void SendChar(int ch)
Write a char to debug console.
char GetChar(void)
Read a char from debug console.
static void stackDump(uint32_t stack[])
Helper function to dump register while hard fault occurred.