查看: 849|回复: 0

SAM4L-EK TC波形发生与捕获

[复制链接]
  • TA的每日心情
    开心
    2016-3-22 09:25
  • 签到天数: 115 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2016-5-30 09:32:54 | 显示全部楼层 |阅读模式
    分享到:
    本例演示的是使用SAM4L68脚PC04作为波形输出,
    然后使用66脚PC02作为波形捕获输入通道,
    对该PIN捕获的脉冲数、周期、脉宽进行计数。
    先来看看实验的现象,烧录程序后,默认的方波设置是
    频率178Hz,占空比30%

    逻辑分析仪捕获到的波形如下

    特别需要注意的是,SAM4L-EK开发板的排座和跳线帽比较多,此例需要即将PC02与PC04
    两个PIN进行短接,即下图中的PIN3与PIN7

    再次将频率和占空比分别设置为1000Hz80%

    逻辑分析仪测试到的波形如下,可以看到产生的波形还是很精准的
    其中占空比也有可以用上图计数到的RA和RB的真实时间来计算,如下
    以(178HZ,30%)为例,
    4212-2948/4212 = 0.30009

    我们将J4 PIN3与PIN7连接的杜邦线给断开,
    测试的结果如下,可以看到,捕获通道此时并没有捕获到任何脉冲

    波形捕获的中断函数如下,图中指示的变量使用来计数捕获到的脉冲数的

    波形产生于捕获的相关初始化函数:
    static void tc_waveform_initialize(void)
    {
    uint32_t ra, rc;
    /* Configure the PMC to enable the TC module. */
    sysclk_enable_peripheral_clock(ID_TC_WAVEFORM);
    #if SAMG55
    /* Enable PCK output */
    pmc_disable_pck(PMC_PCK_3);
    pmc_switch_pck_to_mck(PMC_PCK_3, PMC_PCK_PRES_CLK_1);
    pmc_enable_pck(PMC_PCK_3);
    #endif
    /* Init TC to waveform mode. */
    tc_init(TC, TC_CHANNEL_WAVEFORM,
    /* Waveform Clock Selection */
    gc_waveconfig[gs_uc_configuration].ul_intclock
    | TC_CMR_WAVE /* Waveform mode is enabled */
    | TC_CMR_ACPA_SET /* RA Compare Effect: set */
    | TC_CMR_ACPC_CLEAR /* RC Compare Effect: clear */
    | TC_CMR_CPCTRG /* UP mode with automatic trigger on RC Compare */
    );
    /* Configure waveform frequency and duty cycle. */
    rc = (sysclk_get_peripheral_bus_hz(TC) /
    divisors[gc_waveconfig[gs_uc_configuration].ul_intclock]) /
    gc_waveconfig[gs_uc_configuration].us_frequency;
    tc_write_rc(TC, TC_CHANNEL_WAVEFORM, rc);
    ra = (100 - gc_waveconfig[gs_uc_configuration].us_dutycycle) * rc / 100;
    tc_write_ra(TC, TC_CHANNEL_WAVEFORM, ra);
    /* Enable TC TC_CHANNEL_WAVEFORM. */
    tc_start(TC, TC_CHANNEL_WAVEFORM);
    printf("Start waveform: Frequency = %d Hz,Duty Cycle = %2d%%\n\r",
    gc_waveconfig[gs_uc_configuration].us_frequency,
    gc_waveconfig[gs_uc_configuration].us_dutycycle);
    }
    /**
    * \brief Configure TC TC_CHANNEL_CAPTURE in capture operating mode.
    */
    //! [tc_capture_init]
    static void tc_capture_initialize(void)
    {
    /* Configure the PMC to enable the TC module */
    sysclk_enable_peripheral_clock(ID_TC_CAPTURE);
    #if SAMG55
    /* Enable PCK output */
    pmc_disable_pck(PMC_PCK_3);
    pmc_switch_pck_to_mck(PMC_PCK_3, PMC_PCK_PRES_CLK_1);
    pmc_enable_pck(PMC_PCK_3);
    #endif
    /* Init TC to capture mode. */
    tc_init(TC, TC_CHANNEL_CAPTURE,
    TC_CAPTURE_TIMER_SELECTION /* Clock Selection */
    | TC_CMR_LDRA_RISING /* RA Loading: rising edge of TIOA */
    | TC_CMR_LDRB_FALLING /* RB Loading: falling edge of TIOA */
    | TC_CMR_ABETRG /* External Trigger: TIOA */
    | TC_CMR_ETRGEDG_FALLING /* External Trigger Edge: Falling edge */
    );
    }
    //! [tc_capture_init]
    限于篇幅 ,此篇就不就数据结构和程序流程进行详细分析了。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 08:36 , Processed in 0.103875 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.