打印
[Atmel]

用SAM-BA或JLINK跑ATSAM4E16的程序(14)定时器

[复制链接]
905|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddllxxrr|  楼主 | 2015-11-19 19:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
定时器计数器(总)包括几个相同的16位或32位定时器计数器通道。TC通道数是特定设备,请参阅设备特定数据表的更多信息。
每个通道可以独立编程来执行一个广泛的功能,包括频率测量,事件计数,间隔测量,脉冲产生,延迟时间,脉冲宽度调制。
每个通道有三个外部时钟输入,五个内部时钟输入,2个多功能输入/输出信号,可由用户配置。每个通道都可以驱动一个内部中断信号,可以被编程来产生处理器中断。
定时器计数器(TC)嵌入一个正交解码逻辑连接在前面的计时器。在启用时,正交解码器进行输入行滤波,正交信号的解码,并连接到定时器/计数器,以读取电机的位置和速度。


今天搞定时器模块,首先建立ASF工程后加入TC模块:


然后打开ASF EXPLORER,打开API文档,找到EXAMPLE的文档

跟据提示,形成相应的程序。然后调式。

程序如下:

#include <asf.h>


/* Use TC Peripheral 0. */
#define TC             TC0
#define TC_PERIPHERAL  0


/* Configure TC0 channel 2 as capture input. */
#define TC_CHANNEL_CAPTURE 2
#define ID_TC_CAPTURE ID_TC2
#define PIN_TC_CAPTURE PIN_TC0_TIOA2
#define PIN_TC_CAPTURE_MUX PIN_TC0_TIOA2_MUX

/* Use TC2_Handler for TC capture interrupt. */
#define TC_Handler  TC2_Handler
#define TC_IRQn     TC2_IRQn

#define TC_CAPTURE_TIMER_SELECTION TC_CMR_TCCLKS_TIMER_CLOCK3

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 */
        );
}
void TC_Handler(void)
{
while(1);
}

int main (void)
{
        /* Insert system clock initialization code here (sysclk_init()). */
    sysclk_init();
        board_init();
        tc_capture_initialize();

        /* Insert application code here, after the board has been initialized. */
}


从上边程序可以清楚看出,用的是 TIOA

那么,我应怎么做呢?首先通过数据手册找到TIOA管脚是PA15

在49脚上,而我的开发板在SD卡上,如图:



我于是就用镊子轻触SD卡第九脚对地,模拟个下降沿,没有想到居然进到中断里边了。



就这样程序调通,当然我的中断用个while(1)这个是调试用的。真正的程序没有这样写的。我这个人达到目地不折手断。



相关帖子

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

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2398

主题

6954

帖子

67

粉丝