void testBTIM(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
/* Configure the GPIO_LED pin */
GPIO_InitStructure.Pins = GPIO_PIN_3;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Init(CW_GPIOB, &GPIO_InitStructure);
__SYSCTRL_BTIM123_CLK_ENABLE();
CW_SYSCTRL->APBEN2 |= SYSCTRL_KEY | SYSCTRL_APBEN2_BTIM123_Msk;
CW_BTIM1->SMCR_f.SMS = 0;
CW_BTIM1->CR1_f.ONESHOT = 1;
CW_BTIM1->PSC = 3;
while (1)
{
BTIM1_DELAY_US(100);
PB03_TOG();
/* code */
}
}
// BTIM1 基地址
static const uint32_t BTIM1_BASE = 0x40004800;
// 定义 BTIM1 寄存器地址(static 限制作用域)
// 定义 BTIM1 寄存器地址
#define BTIM1_CNT (*(volatile uint32_t *)(BTIM1_BASE + 0x24)) // 计数寄存器
#define BTIM1_CR1 (*(volatile uint32_t *)(BTIM1_BASE + 0x00)) // 控制寄存器 1
#define BTIM1_ARR (*(volatile uint32_t *)(BTIM1_BASE + 0x2C)) // 计数寄存器
void BTIM1_DELAY_US(uint16_t us)
{
BTIM1_ARR = us;
// CW_BTIM1->ARR = us;
// CW_BTIM1->CNT_f.CNT = 0;
// CW_BTIM1->CR1_f.EN = 1;
BTIM1_CNT &= 0xFFFF0000;
BTIM1_CR1 |= 0x01;
while (1)
{
if (CW_BTIM1->ISR_f.UIF == 1)
{
CW_BTIM1->ISR;
CW_BTIM1->ICR_f.UIF = 0;
break;
}
/* code */
}
}
|