打印
[Atmel]

SAML21走起6:TC0 定时器

[复制链接]
1799|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
这个我昨天就搞了,本来认为很简单,照着提示一路做就完了。但是后来发现灯怎么也不亮。

我于是掉过头仔细看了下快速指导。


如下:
In this use case, the TC will be used as a timer, to generate overflow and compare match callbacks.

In the callbacks the on-board LED is toggled.

The TC module will be set up as follows:

•GCLK generator 1 (GCLK 32K) clock source
•16-bit resolution on the counter
•Prescaler is divided by 64
•GCLK reload action
•Count upward
•Don't run in standby
•No waveform outputs
•No capture enabled
•Don't perform one-shot operations
•No event input enabled
•No event action
•No event generation enabled
•Counter starts on 0
•Counter top set to 2000 (about 4s) and generate overflow callback
•Channel 0 is set to compare and match value 900 and generate callback
•Channel 1 is set to compare and match value 930 and generate callback

可以看到必须设一下GCLK generator 1 (GCLK 32K) clock source
于是得设两个地方一个是,外部晶振32K 为true,再一个 GCLK generator 1必须是true且为GCLK 32K

再下进程序,则LED0亮了。


以下是程序:
#include <asf.h>
#define CONF_TC_MODULE TC3

struct tc_module tc_instance;
void tc_callback_to_toggle_led(struct tc_module *const module_inst);
void configure_tc(void);
void configure_tc_callbacks(void);

void tc_callback_to_toggle_led( struct tc_module *const module_inst)
{ port_pin_toggle_output_level(LED0_PIN);}
void configure_tc(void)
{ struct tc_config config_tc;
tc_get_config_defaults(&config_tc);
config_tc.counter_size = TC_COUNTER_SIZE_8BIT;
config_tc.clock_source = GCLK_GENERATOR_1;
config_tc.clock_prescaler = TC_CLOCK_PRESCALER_DIV1024;
config_tc.counter_8_bit.period = 100;
config_tc.counter_8_bit.compare_capture_channel[0] = 50;
config_tc.counter_8_bit.compare_capture_channel[1] = 54;
tc_init(&tc_instance, CONF_TC_MODULE, &config_tc);
tc_enable(&tc_instance);}
void configure_tc_callbacks(void)
{ tc_register_callback(&tc_instance, tc_callback_to_toggle_led, TC_CALLBACK_OVERFLOW);
tc_register_callback(&tc_instance, tc_callback_to_toggle_led, TC_CALLBACK_CC_CHANNEL0);
tc_register_callback(&tc_instance, tc_callback_to_toggle_led, TC_CALLBACK_CC_CHANNEL1);
tc_enable_callback(&tc_instance, TC_CALLBACK_OVERFLOW);
tc_enable_callback(&tc_instance, TC_CALLBACK_CC_CHANNEL0);
tc_enable_callback(&tc_instance, TC_CALLBACK_CC_CHANNEL1);}

int main (void)
{
system_init();
configure_tc();
configure_tc_callbacks();
system_interrupt_enable_global();

while (1)

{
}
}


相关帖子

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

本版积分规则

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

2399

主题

6964

帖子

68

粉丝