CH573 CH582 CH592 CH579 SysTick使用

发布时间 2023-11-23 14:23:57作者: WCH蓝牙应用分享

CH573:在中断中翻IO,用示波器和逻辑分析仪抓取,间隔是500ms。

int main()
{
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    DebugInit();        /* 配置串口调试 */
    PRINT("Start @ChipID=%02X\n", R8_CHIP_ID);
    GPIOB_SetBits(GPIO_Pin_22);
    GPIOB_ModeCfg(GPIO_Pin_22, GPIO_ModeOut_PP_5mA);
    SysTick_Config(FREQ_SYS/2);
    while(1);
}

__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void SysTick_Handler()          /***嘀嗒定时器中断函数***/
{
    GPIOB_InverseBits(GPIO_Pin_22);
    SysTick->CNTFG &= ~(1<<1);                    //清除中断标志
}

CH582:在中断中翻IO,用示波器和逻辑分析仪抓取,间隔是500ms。

int main(
{
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    DebugInit();        /* 配置串口调试 */
    PRINT("Start @ChipID=%02X\n", R8_CHIP_ID);
    GPIOB_SetBits(GPIO_Pin_22);
    GPIOB_ModeCfg(GPIO_Pin_22, GPIO_ModeOut_PP_5mA);
    SysTick_Config(FREQ_SYS/2);
    while(1);
}

__INTERRUPT
__HIGH_CODE
void SysTick_Handler()          /***嘀嗒定时器中断函数***/
{
    GPIOB_InverseBits(GPIO_Pin_22);
    SysTick->SR = 0;                    //清除中断标志
}

CH592:在中断中翻IO,用示波器和逻辑分析仪抓取,间隔是500ms。

int main()
{
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    DebugInit();        /* 配置串口调试 */
    PRINT("Start @ChipID=%02X\n", R8_CHIP_ID);
    GPIOB_SetBits(GPIO_Pin_22);
    GPIOB_ModeCfg(GPIO_Pin_22, GPIO_ModeOut_PP_5mA);
    SysTick_Config(FREQ_SYS/2);
    while(1);
}

__INTERRUPT
__HIGH_CODE
void SysTick_Handler()          /***嘀嗒定时器中断函数***/
{
    GPIOB_InverseBits(GPIO_Pin_22);
    SysTick->SR = 0;                    //清除中断标志
}

CH579:ARM cortex M0 的 systick 是一个24bit的,以主频为单位向下的计数器(0xFFFFFF即十进制16777215)

int main()
{
  DebugInit();
  PRINT( "Start @ChipID=%02X\n", R8_CHIP_ID );
  GPIOB_SetBits(GPIO_Pin_22);
  GPIOB_ModeCfg(GPIO_Pin_22, GPIO_ModeOut_PP_5mA);
  SysTick_Config(FREQ_SYS/2);
  NVIC_EnableIRQ(SysTick_IRQn);
  while(1);
}
void SysTick_Handler()
{
  GPIOB_InverseBits(GPIO_Pin_22);
}

END...