首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于生成1U的XMega计时器

用于生成1U的XMega计时器
EN

Stack Overflow用户
提问于 2016-01-14 21:34:08
回答 3查看 1.6K关注 0票数 2

我用的是xmega Atxmega32A4u,

如本例所示,XMega Timer and Microseconds我尝试了一下,但我无法生成1U来切换引脚。

请引导我获得1us的延迟。

我想用这个计时器和1wire协议。

代码语言:javascript
复制
#define OUTFREQ     120000L

static void Timer_OW_ISR(void)
{
  gpio_toggle_pin(OW_READER);
}

void Timer_Init_OW(void)
{
   tc_enable(&TCC2);
   tc_set_overflow_interrupt_callback(&TCC2, Timer_OW_ISR);
   tc_set_wgm(&TCC2, TC_WGMODE_FRQ_gc);
   tc_write_period(&TCC2, sysclk_get_per_hz() / (64L*2L*OUTFREQ) - 1); 
}

void Start_Timer_OW(void)
{
  tc_write_clock_source(&TCC2, TC2_CLKSEL_DIV1_gc);
}

在主函数中,我调用了Timer_OW_ISR()函数

EN

回答 3

Stack Overflow用户

发布于 2016-01-16 02:21:36

下载manual并查看第171页。您希望在页面底部生成FRQ波形。在本章的其他地方,您可以看到如何启用您想要切换的引脚。

默认情况下,该设备的运行频率为2 2MHz,这一速度足以切换引脚。您可以将时钟更改为32 MHz。

在问题修改后进行编辑。

我看到您正在使用Atmel软件框架。我没有太多的经验。看起来您仍然没有正确使用ASF。

你说过你想每隔一秒就切换一个引脚。对吗?也许你应该在你的问题中更具体地说明你正在尝试做什么。

这么快的频率的困难在于,设备上的时钟运行速度只比这个频率快一点。这表示您不应使用ISR (中断服务例程)。该例程将花费太多时间来运行,并且将无法达到1 MHz频率。(在任何情况下,ISR的目的都是响应中断,而不是从main()调用。)

但您可以在不使用ISR的情况下实现引脚切换。相反,让时钟直接切换引脚。使用FRQ功能。您可以在寄存器中设置周期,并使用事件通道系统将时钟连接到正确的引脚。详细信息应该在手册中。

你一定要用ASF吗?没有它,配置时钟和处理器速度很容易。只需在您自己的C代码中将某些寄存器赋给正确的值即可。

票数 0
EN

Stack Overflow用户

发布于 2016-01-20 01:06:26

如果你只是想切换一个具有特定频率的引脚,那么我会选择一个支持PWM的引脚,并使用CTC PWM模式。

这消除了ISR开销和由ASF框架ISR调度程序代码引入的未知延迟。(如果有--我对这个框架或ATXMegas没有太多经验(只有atmega和attiny))

票数 0
EN

Stack Overflow用户

发布于 2019-04-17 20:00:18

检查Xmega manual的14.8.2节,下面使用内部2 2MHz时钟和FRQ模式(频率波形生成)将引脚PC.0切换到1 2MHz。

代码语言:javascript
复制
#include <avr/io.h>

/*
* FRQ frequency = Fclk/(2N*(CCA+1)
* where N represents the prescaler divider used
* In this example:  1000000 = 2000000/(2*1*(0+1))
*/
int main( void )
{
    PORTC_DIR |= 0x01;       //Set PC.0 as output port
    TCC0_CTRLA |= 0x01;      //Clock divider clk/1
    TCC0_CTRLB |= 0x01;      //FRQ mode
    TCC0_CTRLB |= 0x10;      //Channel selection CCAEN
    TCC0_CCA = 0x00;         //Output toggled on each compare match between CNT and CCA registers
    while(1);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34790997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档