蓝牙工程监控

This commit is contained in:
stark1898y 2024-12-08 11:32:01 +08:00
parent 3cdccc4d63
commit f119dc7d0d
1 changed files with 71 additions and 41 deletions

View File

@ -27,7 +27,7 @@ void SetSysClock(SYS_CLKTypeDef sc)
sys_safe_access_enable(); sys_safe_access_enable();
R8_PLL_CONFIG &= ~(1 << 5); // R8_PLL_CONFIG &= ~(1 << 5); //
sys_safe_access_disable(); sys_safe_access_disable();
if(sc & 0x20) // HSE div if (sc & 0x20) // HSE div
{ {
sys_safe_access_enable(); sys_safe_access_enable();
R32_CLK_SYS_CFG = (0 << 6) | (sc & 0x1f) | RB_TX_32M_PWR_EN | RB_PLL_PWR_EN; R32_CLK_SYS_CFG = (0 << 6) | (sc & 0x1f) | RB_TX_32M_PWR_EN | RB_PLL_PWR_EN;
@ -42,7 +42,7 @@ void SetSysClock(SYS_CLKTypeDef sc)
sys_safe_access_disable(); sys_safe_access_disable();
} }
else if(sc & 0x40) // PLL div else if (sc & 0x40) // PLL div
{ {
sys_safe_access_enable(); sys_safe_access_enable();
R32_CLK_SYS_CFG = (1 << 6) | (sc & 0x1f) | RB_TX_32M_PWR_EN | RB_PLL_PWR_EN; R32_CLK_SYS_CFG = (1 << 6) | (sc & 0x1f) | RB_TX_32M_PWR_EN | RB_PLL_PWR_EN;
@ -61,7 +61,7 @@ void SetSysClock(SYS_CLKTypeDef sc)
R32_CLK_SYS_CFG |= RB_CLK_SYS_MOD; R32_CLK_SYS_CFG |= RB_CLK_SYS_MOD;
sys_safe_access_disable(); sys_safe_access_disable();
} }
//更改FLASH clk的驱动能力 // 更改FLASH clk的驱动能力
sys_safe_access_enable(); sys_safe_access_enable();
R8_PLL_CONFIG |= 1 << 7; R8_PLL_CONFIG |= 1 << 7;
sys_safe_access_disable(); sys_safe_access_disable();
@ -81,11 +81,11 @@ uint32_t GetSysClock(void)
uint16_t rev; uint16_t rev;
rev = R32_CLK_SYS_CFG & 0xff; rev = R32_CLK_SYS_CFG & 0xff;
if((rev & 0x40) == (0 << 6)) if ((rev & 0x40) == (0 << 6))
{ // 32M进行分频 { // 32M进行分频
return (32000000 / (rev & 0x1f)); return (32000000 / (rev & 0x1f));
} }
else if((rev & RB_CLK_SYS_MOD) == (1 << 6)) else if ((rev & RB_CLK_SYS_MOD) == (1 << 6))
{ // PLL进行分频 { // PLL进行分频
return (480000000 / (rev & 0x1f)); return (480000000 / (rev & 0x1f));
} }
@ -106,7 +106,7 @@ uint32_t GetSysClock(void)
*/ */
uint8_t SYS_GetInfoSta(SYS_InfoStaTypeDef i) uint8_t SYS_GetInfoSta(SYS_InfoStaTypeDef i)
{ {
if(i == STA_SAFEACC_ACT) if (i == STA_SAFEACC_ACT)
{ {
return (R8_SAFE_ACCESS_SIG & RB_SAFE_ACC_ACT); return (R8_SAFE_ACCESS_SIG & RB_SAFE_ACC_ACT);
} }
@ -195,7 +195,7 @@ void WWDG_ITCfg(FunctionalState s)
{ {
uint8_t ctrl = R8_RST_WDOG_CTRL; uint8_t ctrl = R8_RST_WDOG_CTRL;
if(s == DISABLE) if (s == DISABLE)
{ {
ctrl &= ~RB_WDOG_INT_EN; ctrl &= ~RB_WDOG_INT_EN;
} }
@ -222,7 +222,7 @@ void WWDG_ResetCfg(FunctionalState s)
{ {
uint8_t ctrl = R8_RST_WDOG_CTRL; uint8_t ctrl = R8_RST_WDOG_CTRL;
if(s == DISABLE) if (s == DISABLE)
{ {
ctrl &= ~RB_WDOG_RST_EN; ctrl &= ~RB_WDOG_RST_EN;
} }
@ -263,9 +263,41 @@ void WWDG_ClearFlag(void)
*/ */
__INTERRUPT __INTERRUPT
__HIGH_CODE __HIGH_CODE
__attribute__((weak)) __attribute__((weak)) void HardFault_Handler(void)
void HardFault_Handler(void)
{ {
// https://www.cnblogs.com/gscw/p/18159920
// 监控函数和 PC 指针可以同时使用。监控函数需要在蓝牙工程中使用才有意义,如果打印值为空,检查是否使用蓝牙。
struct __MEMORY_CTL
{
struct __MEMORY_CTL *pNext;
uint16_t len;
uint16_t used;
};
typedef struct __MEMORY_CTL MemoryCtl;
extern MemoryCtl *MemCtlStart;
extern MemoryCtl *MemCtlEnd;
MemoryCtl *MemHead;
MemHead = MemCtlStart;
while (MemHead != MemCtlEnd)
{
printf("|%8x,%8x,%8d.....\n", MemHead->used, (uint32_t)MemHead,
(uint32_t)(MemHead->pNext) - (uint32_t)MemHead - sizeof(struct __MEMORY_CTL));
MemHead = MemHead->pNext;
}
printf("\n");
uint32_t v_mepc, v_mcause, v_mtval;
printf("hardfault\n");
v_mepc = __get_MEPC();
v_mcause = __get_MCAUSE();
v_mtval = __get_MTVAL();
printf("mepc:%08x\n", v_mepc);
printf("mcause:%08x\n", v_mcause);
printf("mtval:%08x\n", v_mtval);
#if 0
FLASH_ROM_SW_RESET(); FLASH_ROM_SW_RESET();
sys_safe_access_enable(); sys_safe_access_enable();
R16_INT32K_TUNE = 0xFFFF; R16_INT32K_TUNE = 0xFFFF;
@ -273,7 +305,8 @@ void HardFault_Handler(void)
sys_safe_access_enable(); sys_safe_access_enable();
R8_RST_WDOG_CTRL |= RB_SOFTWARE_RESET; R8_RST_WDOG_CTRL |= RB_SOFTWARE_RESET;
sys_safe_access_disable(); sys_safe_access_disable();
while(1); #endif
while (1);
} }
/********************************************************************* /*********************************************************************
@ -289,27 +322,27 @@ __HIGH_CODE
void mDelayuS(uint16_t t) void mDelayuS(uint16_t t)
{ {
uint32_t i; uint32_t i;
#if(FREQ_SYS == 80000000) #if (FREQ_SYS == 80000000)
i = t * 20; i = t * 20;
#elif(FREQ_SYS == 60000000) #elif (FREQ_SYS == 60000000)
i = t * 15; i = t * 15;
#elif(FREQ_SYS == 48000000) #elif (FREQ_SYS == 48000000)
i = t * 12; i = t * 12;
#elif(FREQ_SYS == 40000000) #elif (FREQ_SYS == 40000000)
i = t * 10; i = t * 10;
#elif(FREQ_SYS == 32000000) #elif (FREQ_SYS == 32000000)
i = t << 3; i = t << 3;
#elif(FREQ_SYS == 24000000) #elif (FREQ_SYS == 24000000)
i = t * 6; i = t * 6;
#elif(FREQ_SYS == 16000000) #elif (FREQ_SYS == 16000000)
i = t << 2; i = t << 2;
#elif(FREQ_SYS == 8000000) #elif (FREQ_SYS == 8000000)
i = t << 1; i = t << 1;
#elif(FREQ_SYS == 4000000) #elif (FREQ_SYS == 4000000)
i = t; i = t;
#elif(FREQ_SYS == 2000000) #elif (FREQ_SYS == 2000000)
i = t >> 1; i = t >> 1;
#elif(FREQ_SYS == 1000000) #elif (FREQ_SYS == 1000000)
i = t >> 2; i = t >> 2;
#else #else
i = t << 1; i = t << 1;
@ -317,7 +350,7 @@ void mDelayuS(uint16_t t)
do do
{ {
__nop(); __nop();
} while(--i); } while (--i);
} }
/********************************************************************* /*********************************************************************
@ -334,7 +367,7 @@ void mDelaymS(uint16_t t)
{ {
uint16_t i; uint16_t i;
for(i = 0; i < t; i++) for (i = 0; i < t; i++)
{ {
mDelayuS(1000); mDelayuS(1000);
} }
@ -344,19 +377,19 @@ void mDelaymS(uint16_t t)
int _write(int fd, char *buf, int size) int _write(int fd, char *buf, int size)
{ {
int i; int i;
for(i = 0; i < size; i++) for (i = 0; i < size; i++)
{ {
#if DEBUG == Debug_UART0 #if DEBUG == Debug_UART0
while(R8_UART0_TFC == UART_FIFO_SIZE); /* 等待数据发送 */ while (R8_UART0_TFC == UART_FIFO_SIZE); /* 等待数据发送 */
R8_UART0_THR = *buf++; /* 发送数据 */ R8_UART0_THR = *buf++; /* 发送数据 */
#elif DEBUG == Debug_UART1 #elif DEBUG == Debug_UART1
while(R8_UART1_TFC == UART_FIFO_SIZE); /* 等待数据发送 */ while (R8_UART1_TFC == UART_FIFO_SIZE); /* 等待数据发送 */
R8_UART1_THR = *buf++; /* 发送数据 */ R8_UART1_THR = *buf++; /* 发送数据 */
#elif DEBUG == Debug_UART2 #elif DEBUG == Debug_UART2
while(R8_UART2_TFC == UART_FIFO_SIZE); /* 等待数据发送 */ while (R8_UART2_TFC == UART_FIFO_SIZE); /* 等待数据发送 */
R8_UART2_THR = *buf++; /* 发送数据 */ R8_UART2_THR = *buf++; /* 发送数据 */
#elif DEBUG == Debug_UART3 #elif DEBUG == Debug_UART3
while(R8_UART3_TFC == UART_FIFO_SIZE); /* 等待数据发送 */ while (R8_UART3_TFC == UART_FIFO_SIZE); /* 等待数据发送 */
R8_UART3_THR = *buf++; /* 发送数据 */ R8_UART3_THR = *buf++; /* 发送数据 */
#endif #endif
} }
@ -372,8 +405,7 @@ int _write(int fd, char *buf, int size)
* *
* @return size: Data length * @return size: Data length
*/ */
__attribute__((used)) __attribute__((used)) void *_sbrk(ptrdiff_t incr)
void *_sbrk(ptrdiff_t incr)
{ {
extern char _end[]; extern char _end[];
extern char _heap_end[]; extern char _heap_end[];
@ -385,5 +417,3 @@ void *_sbrk(ptrdiff_t incr)
curbrk += incr; curbrk += incr;
return curbrk - incr; return curbrk - incr;
} }