Код: Выделить всё
int was_cap0 = 0;
int was_cap1 = 0;
uint32_t cap0, cap1;
void ECAP0_IRQHandler(void)
{
ECAP0->ECCLR_bit.CEVT0 = 1;
ECAP0->ECCLR_bit.INT = 1;
ECAP0->PEINT_bit.PEINT = 1;
cap0 = ECAP0->CAP0;
was_cap0 = 1;
}
void ECAP1_IRQHandler(void)
{
ECAP1->ECCLR_bit.CEVT0 = 1;
ECAP1->ECCLR_bit.INT = 1;
ECAP1->PEINT_bit.PEINT = 1;
cap1 = ECAP1->CAP0;
was_cap1 = 1;
}
void capture_init(void)
{
RCU->HCLKCFG_bit.GPIOAEN = 1;
GPIOA->DENSET_bit.PIN4 = 1;
GPIOA->DENSET_bit.PIN5 = 1;
GPIOA->ALTFUNCSET_bit.PIN4 = 1;
GPIOA->ALTFUNCSET_bit.PIN5 = 1;
SIU->REMAPAF_bit.ECAP0EN = 1;
SIU->REMAPAF_bit.ECAP1EN = 1;
RCU->PCLKCFG_bit.ECAP0EN = 1;
RCU->PRSTCFG_bit.ECAP0EN = 1;
RCU->PCLKCFG_bit.ECAP1EN = 1;
RCU->PRSTCFG_bit.ECAP1EN = 1;
ECAP0->ECCTL0 = 0;
ECAP0->ECCTL1 = 0;
ECAP0->ECCTL1_bit.TSCTRSTOP = 1;
ECAP0->ECCTL1_bit.REARM = 1;
ECAP0->ECCTL0_bit.CAPLDEN = 1;
ECAP1->ECCTL0 = 0;
ECAP1->ECCTL1 = 0;
ECAP1->ECCTL1_bit.TSCTRSTOP = 1;
ECAP1->ECCTL1_bit.REARM = 1;
ECAP1->ECCTL0_bit.CAPLDEN = 1;
ECAP0->ECEINT_bit.CEVT0 = 1;
ECAP1->ECEINT_bit.CEVT0 = 1;
Энвик_EnableIRQ(ECAP0_IRQn);
Энвик_EnableIRQ(ECAP1_IRQn);
}
int main()
{
SystemCoreClockUpdate();
retarget_init();
BSP_LED_Init();
BSP_Btn_Init();
SysTick_Config(10000000);
capture_init();
while (1)
{
if (was_cap0) {printf("CAP0: %u\n", cap0); was_cap0 = 0;}
if (was_cap1) {printf("CAP1: %u\n", cap1); was_cap1 = 0;}
if (BSP_Btn_IsPressed()) {printf("button\n");}
}
}