Hkk233 发表于 2023-4-14 14:45

关于TimerA定时器捕获输入的问题

使用TimerA定时器来进行捕获输入,通过keil查看寄存器,定时器在计数,中断也使能了,但是无法进入中断服务函数,输入信号应该是没有问题的,我写了一个外部中断的代码,输入信号的三个引脚可以触发外部中断。是我配置的问题吗?
void TimerA_CaptureInit(void)
{
        stc_timera_base_init_t   stcTimeraInit;
        stc_timera_capture_init_t   stcTimeraCaptureInit;
        stc_irq_regi_conf_t      stcIrqRegiConf;
        stc_port_init_t            stcPortInit;
       
       
        MEM_ZERO_STRUCT(stcTimeraInit);
        MEM_ZERO_STRUCT(stcTimeraCaptureInit);
        MEM_ZERO_STRUCT(stcIrqRegiConf);
        MEM_ZERO_STRUCT(stcPortInit);

       
        PWC_Fcg2PeriphClockCmd(PWC_FCG2_PERIPH_TIMA2,Enable);
//        PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_AOS,Enable);
       
       
        PORT_SetFunc(TIMA_HALL_A_GPIO_PORT,TIMA_HALL_A_GPIO_PIN,Func_Tima2,Disable);
        PORT_SetFunc(TIMA_HALL_B_GPIO_PORT,TIMA_HALL_B_GPIO_PIN,Func_Tima2,Disable);
        PORT_SetFunc(TIMA_HALL_C_GPIO_PORT,TIMA_HALL_C_GPIO_PIN,Func_Tima2,Disable);
       
       
        stcTimeraInit.enClkDiv = TimeraPclkDiv256;
        stcTimeraInit.enCntDir = TimeraCountDirUp;          //向上计数
        stcTimeraInit.enCntMode = TimeraCountModeSawtoothWave;//三角波
        stcTimeraInit.enSyncStartupEn = Disable;
        stcTimeraInit.u16PeriodVal = TIMERA_COUNT_OVERFLOW;
        TIMERA_BaseInit (M4_TMRA2,&stcTimeraInit);
       
        stcTimeraCaptureInit.enCapturePwmRisingEn = Enable;         //HICP0 采样到上升沿时捕获通道动作控制
        stcTimeraCaptureInit.enCapturePwmFallingEn = Enable;         //HICP1 采样到下降沿时捕获通道动作控制
        stcTimeraCaptureInit.enCaptureSpecifyEventEn = Disable;      //HICP2 专用比较时间触发通道动作控制
        stcTimeraCaptureInit.enPwmClkDiv =TimeraFilterPclkDiv4;      //NOFICK pwm滤波时钟选择
        stcTimeraCaptureInit.enPwmFilterEn = Enable;               //NOFIENCP 滤波功能控制
        stcTimeraCaptureInit.enCaptureTrigRisingEn = Disable;      //HICP3
        stcTimeraCaptureInit.enCaptureTrigFallingEn = Disable;      //HICP4
        stcTimeraCaptureInit.enTrigClkDiv = TimeraFilterPclkDiv1;
        stcTimeraCaptureInit.enTrigFilterEn =Disable;
       
        TIMERA_CaptureInit(M4_TMRA2,TIMERA_UINT_CH1,&stcTimeraCaptureInit);
        TIMERA_IrqCmd(M4_TMRA2,TIMERA_UNIT2_CH1_INT,Enable);
       
        TIMERA_CaptureInit(M4_TMRA2,TIMERA_UINT_CH3,&stcTimeraCaptureInit);
        TIMERA_IrqCmd(M4_TMRA2,TIMERA_UNIT2_CH3_INT,Enable);
       
       
        TIMERA_CaptureInit(M4_TMRA2,TIMERA_UINT_CH4,&stcTimeraCaptureInit);
        TIMERA_IrqCmd(M4_TMRA2,TIMERA_UNIT2_CH4_INT,Enable);
       
       
        stcIrqRegiConf.enIntSrc = TIMERA_UNIT2_COMPARE_INT;
        stcIrqRegiConf.enIRQn = Int000_IRQn;
        stcIrqRegiConf.pfnCallback = &TimeraUnit2_IrqCallback;
        enIrqRegistration(&stcIrqRegiConf);
        NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn);
        NVIC_SetPriority(stcIrqRegiConf.enIRQn,DDL_IRQ_PRIORITY_00);
        NVIC_EnableIRQ(stcIrqRegiConf.enIRQn);
       
//        stcPortInit.enExInt = Enable;
//        PORT_Init(KEY2_GPIO_PORT,KEY2_GPIO_PIN,&stcPortInit);
//        TIMERA_SetCaptureTriggerSrc(EVT_PORT_EIRQ10);
       
        TIMERA_Cmd(M4_TMRA2,Enable);
       
       
}

Hkk233 发表于 2023-4-14 15:05

补充一下,数据也捕获不到

tpgf 发表于 2023-5-11 12:00

楼主设置的是只捕获脉冲的上升沿或者下降沿吗

wiba 发表于 2023-5-11 12:13

Hkk233 发表于 2023-4-14 15:05
补充一下,数据也捕获不到

我不是很明白 定时器的输入捕获功能怎么才能捕获数据呢

zljiu 发表于 2023-5-11 14:40

捕获一般就是捕捉边沿的变化至于说数据是怎么捕捉呢

tfqi 发表于 2023-5-11 14:59

楼主还得确认一下中断向量是不是正确的

磨砂 发表于 2023-5-11 15:12

楼主除了开启定时器中断外还需要开启总中断

Henryko 发表于 2023-5-12 23:13

应该是捕捉边沿的变化

喂什么玩意 发表于 2024-7-31 11:13

输入信号的三个引脚可以触发外部中断
页: [1]
查看完整版本: 关于TimerA定时器捕获输入的问题