搜索
bottom↓
回复: 3

AVR xmega32 关于捕获配置!

[复制链接]

出0入8汤圆

发表于 2014-6-21 17:19:37 | 显示全部楼层 |阅读模式
本帖最后由 Cortex_M3 于 2014-6-21 18:44 编辑

请各位朋友帮忙看看xmega32的外部输入捕获

EVSYS.CH0MUX = EVSYS_CHMUX_PORTD_PIN1_gc;       // PD1
EVSYS.CH0CTRL = EVSYS_DIGFILT_1SAMPLE_gc;

//EVSYS.CH1MUX = EVSYS_CHMUX_PORTD_PIN1_gc;     // PD1/
//EVSYS.CH1CTRL = EVSYS_DIGFILT_1SAMPLE_gc;

void Input_Capture _Init(void)
{
        /*
        * Configure TCD0 to input capture
        *上升沿触发,2分频16M
        *输入捕捉中断使能
        */
        tc_enable(&TCD0);
        tc_write_clock_source(&TCD0, TC_CLKSEL_DIV2_gc);
        tc_set_input_capture(&TCD0, TC_EVACT_CAPT_gc | TC_EVSEL_CH0_gc);
        tc_enable_cc_channels(&TCD0,(enum tc_cc_channel_mask_enable_t)(TC_CCAEN));
        tc_set_cca_interrupt_callback(&TCD0, PMIC_LVL_LOW);
        tc_set_cca_interrupt_callback(&TCD0, tos_egde_interrupt_callback);

        /*
        * Configure TCD1 to compare mode
        *12us定时中断,在这段时间内没数据,认为帧结束,2分频16M
        */
        tc_enable(&TCD1);
        tc_set_wgm(&TCD1,TC_WG_NORMAL);
        tc_write_clock_source(&TCD1, TC_CLKSEL_DIV2_gc);
        tc_write_cc(&TCD1, TC_CCA, 192);
        tc_set_cca_interrupt_level(&TCD1, PMIC_LVL_LOW);
        tc_set_cca_interrupt_callback(&TCD1, tos_cca_interrupt_callback);
}

// 外部输入捕获中断处理函数
static void tos_egde_interrupt_callback()
{
        tc_write_count(&TCD1, 0);    // 清空TCD1的超时计数
        if(!ReceiveEffective)
        {
                tos_time[time_sn] = tc_read_cc(&TCD0, TC_CCA);//每一次信号记录中断时间,将计数器值赋给计时数组
                time_sn++;                                    //计时栈标志加1
                if (time_sn>23) {time_sn = 0;}
                TosSig = 1;
        }       
}

//------------------------------------------------
// TCD1 CCA比较中断用于判断一帧数据结束
//------------------------------------------------
static void tos_cca_interrupt_callback()
{
        tc_write_count(&TCD0, 0);
        if(time_sn>15 && TosSig)
        {
                TosDataPos = time_sn;
                ReceiveEffective = 1;
        }
        else
        {
          TosSig = 0;
          time_sn = 0;
  }       
}

将PD1 外部输入配置到事件0通道可以使用
如果将PD1配置到事件1通道就无法使用
配置区别在于红色字体部分,具体如下。
        tc_set_input_capture(&TCD0, TC_EVACT_CAPT_gc | TC_EVSEL_CH1_gc);
        tc_enable_cc_channels(&TCD0,(enum tc_cc_channel_mask_enable_t)(TC_CCBEN));
        tc_set_ccb_level(&TCD0, PMIC_LVL_LOW);
        tc_set_ccb_interrupt_callback(&TCD0, tos_egde_interrupt_callback);

然后中断中读取的是通道1对应的TC_CCB
        tos_time[time_sn] = tc_read_cc(&TCD0, TC_CCB);

麻烦大家给看看,是否这样配置。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入8汤圆

 楼主| 发表于 2014-6-21 17:36:55 | 显示全部楼层
水贴太多,顶一下!

出0入8汤圆

 楼主| 发表于 2014-6-21 20:46:45 | 显示全部楼层
为何没有人指导一下呢

出0入0汤圆

发表于 2014-6-29 17:48:44 | 显示全部楼层
事件系统不需要中断
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 16:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表