蓝牙工程监控
This commit is contained in:
parent
3cdccc4d63
commit
f119dc7d0d
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ void SYS_ResetExecute(void)
|
||||||
*/
|
*/
|
||||||
void SYS_DisableAllIrq(uint32_t *pirqv)
|
void SYS_DisableAllIrq(uint32_t *pirqv)
|
||||||
{
|
{
|
||||||
*pirqv = (PFIC->ISR[0] >> 8) | (PFIC->ISR[1] << 24);
|
*pirqv = (PFIC->ISR[0] >> 8) | (PFIC->ISR[1] << 24);
|
||||||
PFIC->IRER[0] = 0xffffffff;
|
PFIC->IRER[0] = 0xffffffff;
|
||||||
PFIC->IRER[1] = 0xffffffff;
|
PFIC->IRER[1] = 0xffffffff;
|
||||||
}
|
}
|
||||||
|
@ -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,20 +377,20 @@ 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
|
||||||
}
|
}
|
||||||
return size;
|
return size;
|
||||||
|
@ -372,18 +405,15 @@ 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[];
|
||||||
static char *curbrk = _end;
|
static char *curbrk = _end;
|
||||||
|
|
||||||
if ((curbrk + incr < _end) || (curbrk + incr > _heap_end))
|
if ((curbrk + incr < _end) || (curbrk + incr > _heap_end))
|
||||||
return NULL - 1;
|
return NULL - 1;
|
||||||
|
|
||||||
curbrk += incr;
|
curbrk += incr;
|
||||||
return curbrk - incr;
|
return curbrk - incr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue