查看: 1117|回复: 0

XMEGA TC OVERFLOW中断使用方法

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

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2016-5-3 08:56:13 | 显示全部楼层 |阅读模式
    分享到:
    使用ATMEL Studio的官方库ASF的好处是,
    只需要了解片内外设的工作原理(流程),
    即可以按照这个流程直接调用相关的库函数,
    完成外设的驱动。
    这个过程不需要去了解MCU片内寄存器的实际值,
    因此开发效率大大提高!
    以下以介绍TC OVERFLOW中断的使用流程为例:
    pmic_init();
    sysclk_init();
    tc_enable(&TCC0);
    tc_set_overflow_interrupt_callback(&TCC0, my_callback);
    tc_set_wgm(&TCC0, TC_WG_NORMAL);
    tc_write_period(&TCC0, 1000);
    tc_set_overflow_interrupt_level(&TCC0, TC_INT_LVL_LO);
    cpu_irq_enable();
    tc_write_clock_source(&TCC0, TC_CLKSEL_DIV1_gc);
    整个过程完全没有具体寄存器值的操作,全部调用库函数;
    用户唯一需要编写的是my_callback这个函数,
    这是个回调函数,函数名可以使用自己喜欢的任意合法函数名,
    如:
    uint16_t tcc0IntCnt;
    static void tcc0_overflow(void)
    {
    if(++tcc0IntCnt >= 8000) {
    tcc0IntCnt = 0;
    ioport_toggle_pin_level(NHD_C12832A1Z_BACKLIGHT);
    }
    }
    需要注意的是,由于计数器CNT为16位,即最大65535次计数,
    而MCU主频基本都在MHz以上,因此满打满算一个中断周期至少是毫秒级,
    更长的定时周期,需要在回调函数里作二次计数。
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 20:25 , Processed in 0.118032 second(s), 17 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.