[技术问答] HC32L110的PCA比较捕获和TIM4/5/6的捕获功能是一样的吗?

[复制链接]
1584|47
手机看帖
扫描二维码
随时随地手机跟帖
wzx1994|  楼主 | 2020-8-11 08:57 | 显示全部楼层 |阅读模式
驱动库示例代码里面好像没找到TIM4/5/6的输入捕获代码,只看到了PCA输入捕获

使用特权

评论回复
wzx1994|  楼主 | 2020-8-11 08:58 | 显示全部楼层
跑了一下PCA的示例代码,我用逻辑分析仪抓了,一直都有波形产生,但是中断只进了几次就不进了。

使用特权

评论回复
wzx1994|  楼主 | 2020-8-11 10:27 | 显示全部楼层
找到了定时器捕获的示例代码了。华大的命名规则还真的是不一样啊。

使用特权

评论回复
wzx1994|  楼主 | 2020-8-11 11:47 | 显示全部楼层
void cap_init(void)
{
       en_adt_unit_t enAdt;
       uint16_t u16Period;

    stc_adt_basecnt_cfg_t stcAdtBaseCntCfg;
    stc_adt_CHxX_port_cfg_t stcAdtTIM5ACfg;
       
    DDL_ZERO_STRUCT(stcAdt5CntState);
    DDL_ZERO_STRUCT(stcAdtBaseCntCfg);
    DDL_ZERO_STRUCT(stcAdtTIM5ACfg);
       
                Gpio_SetFunc_TIM5_CHA_P34();
       
                Clk_SetPeripheralGate(ClkPeripheralAdt, TRUE);
       
                enAdt = AdTIM5;

    stcAdtBaseCntCfg.enCntMode = AdtSawtoothMode;
    stcAdtBaseCntCfg.enCntDir = AdtCntUp;
    stcAdtBaseCntCfg.enCntClkDiv = AdtClkPClk0Div2;
    Adt_Init(enAdt, &stcAdtBaseCntCfg);                      //ADT载波、计数模式、时钟配置

    u16Period = 0xffff;
    Adt_SetPeriod(enAdt, u16Period);                         //周期设置
               
    stcAdtTIM5ACfg.enCap = AdtCHxCompareInput;
    Adt_CHxXPortConfig(enAdt, AdtCHxA, &stcAdtTIM5ACfg);     //端口CHA配置,捕获输入功能

    Adt_ConfigHwCaptureA(enAdt,AdtHwTrigTimxAFall);                                //< CHxA端口上采样到下降沿
//                Adt_ConfigHwCaptureA(enAdt,AdtHwTrigTimxARise);                                //< CHxA端口上采样到上升沿

    Adt_ConfigIrq(enAdt, AdtCMAIrq, TRUE, Adt5CaptureACalllback); //捕获中断A配置
    EnableNvic(TIM5_IRQn,  3, TRUE);   //AdvTimer5中断使能
               
    Adt_StartCount(enAdt);
}

void Adt5CaptureACalllback(void)
{
    Adt_GetCaptureValue(AdTIM5, AdtCHxA, &u16Capture);
    //Adt_GetCntState(AdTIM5, &stcAdt5CntState);
                //Adt_ConfigHwCaptureA(enAdt,AdtHwTrigTimxARise);                                //< CHxA端口上采样到上升沿
        //Adt_ClearPeriodBuf(AdTIM5);
                //Adt_ClearHwCaptureA(AdTIM5);
        Adt_ClearIrqFlag(AdTIM5,AdtCMAIrq);
}

使用特权

评论回复
评论
wzx1994 2020-8-29 13:35 回复TA
@martinhu :已经修改好了 
martinhu 2020-8-29 11:50 回复TA
ADT的例子不会只进一次捕获中断吧,先学学那个再自己尝试着修改 
wzx1994|  楼主 | 2020-8-11 15:35 | 显示全部楼层
我的这个输入捕获配置是不是有啥问题?只进一次中断

使用特权

评论回复
wzx1994|  楼主 | 2020-8-11 17:42 | 显示全部楼层
161005f3267b25acbd.png 不知道这样配置是不是对的。
23685f3267f3f0421.png

使用特权

评论回复
guguo8266| | 2020-8-29 10:48 | 显示全部楼层
wzx1994 发表于 2020-8-11 10:27
找到了定时器捕获的示例代码了。华大的命名规则还真的是不一样啊。

我还没有找到

使用特权

评论回复
wzx1994|  楼主 | 2020-8-29 11:16 | 显示全部楼层

高级定时器的示例代码,叫ADT 782535f49c8a16ac81.png

使用特权

评论回复
guguo8266| | 2020-9-3 13:43 | 显示全部楼层
wzx1994 发表于 2020-8-29 11:16
高级定时器的示例代码,叫ADT

本样例主要展示ADT捕获输入功能。
说明:
   

================================================================================
测试环境
================================================================================
测试用板:
---------------------
HC32L110_STK

辅助工具:
---------------------
电源

辅助软件:
---------------------


================================================================================
使用步骤
================================================================================
1)连接P23(IA0)与P24(IB0)。
2)打开工程编译并运行。
3)串口输出捕获值与计数值非常接近。
4) 可以在寄存器中观察GCMAR与GCMBR的值非常接近
5) 也可以在IAR的livewatch或KEIL的Watch窗口观察变量u16Capture与GCMAR的比较值近似。
程序跑起来了,但是没有找到接近的值

使用特权

评论回复
guguo8266| | 2020-9-3 13:47 | 显示全部楼层
guguo8266 发表于 2020-9-3 13:43
本样例主要展示ADT捕获输入功能。
说明:
   

[img]%5Battachimg%5D1527828[/attachimg][/img]

使用特权

评论回复
guguo8266| | 2020-9-3 13:48 | 显示全部楼层
62065f508331ab9e6.png

使用特权

评论回复
wzx1994|  楼主 | 2020-9-3 13:51 | 显示全部楼层

想确定一下,多次捕获到的计数值是累加的吗?

使用特权

评论回复
guguo8266| | 2020-9-3 13:56 | 显示全部楼层
wzx1994 发表于 2020-9-3 13:51
想确定一下,多次捕获到的计数值是累加的吗?

这是例程,我只是想测个外部的方波周期

使用特权

评论回复
wzx1994|  楼主 | 2020-9-3 13:57 | 显示全部楼层
guguo8266 发表于 2020-9-3 13:56
这是例程,我只是想测个外部的方波周期

例程我也用了,根据例程来改,但是获得的计数值居然每次是累加的。只能手动去清除计数值

使用特权

评论回复
guguo8266| | 2020-9-3 15:09 | 显示全部楼层
wzx1994 发表于 2020-9-3 13:57
例程我也用了,根据例程来改,但是获得的计数值居然每次是累加的。只能手动去清除计数值 ...

我用的是内部时钟,感觉没有触发捕获。

使用特权

评论回复
wzx1994|  楼主 | 2020-9-3 15:10 | 显示全部楼层
guguo8266 发表于 2020-9-3 15:09
我用的是内部时钟,感觉没有触发捕获。

我也是用的内部时钟,内部高速时钟。有没有进中断?

使用特权

评论回复
guguo8266| | 2020-9-3 15:42 | 显示全部楼层
wzx1994 发表于 2020-9-3 15:10
我也是用的内部时钟,内部高速时钟。有没有进中断?

可以进入中断了,我的设定周期e000,读到的值是e001

使用特权

评论回复
wzx1994|  楼主 | 2020-9-3 21:02 | 显示全部楼层
guguo8266 发表于 2020-9-3 15:42
可以进入中断了,我的设定周期e000,读到的值是e001

那应该读到的值不对吧

使用特权

评论回复
guguo8266| | 2020-9-4 11:56 | 显示全部楼层
wzx1994 发表于 2020-9-3 21:02
那应该读到的值不对吧

我觉得可能就是这样,
我换了主频率也是大1!

使用特权

评论回复
guguo8266| | 2020-9-8 16:37 | 显示全部楼层
110低功耗串口和普通串口一起用,为啥库文件定义重复?如何修改?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则