我试图从atxmega128a3u中剔除一些数据并需要将引脚切换为4us,但到目前为止我还没有接近那个......
在这里,我将我的计时器设置为88us,但是我的计时器大约为146us。
int main(void)
{
//CRYSTAL SETUP
OSC_XOSCCTRL = OSC_FRQRANGE_12TO16_gc | OSC_XOSCSEL_XTAL_16KCLK_gc; // 16Mhz Crystal
OSC_CTRL |= OSC_XOSCEN_bm;
while(!(OSC_STATUS & OSC_XOSCRDY_bm)); //Wait for crystal to stabilize.
CCP = CCP_IOREG_gc;
CLK_CTRL = CLK_SCLKSEL_XOSC_gc;
//END CRYSTAL SETUP
cli();
TCC0.PERL = 0x80; //88us
TCC0.PERH = 0x05;
TCC0.CTRLA = 0x01;
TCC0.INTCTRLA = 0x02;
PMIC.CTRL = 0x02;
sei();
}
ISR(TCC0_OVF_vect) {
PORTF.OUTTGL = PIN3_bm;
}
如何获得更快,更准确的响应时间?
答案 0 :(得分:3)
那是你的完整代码吗?如果是,控制器将在执行sei()后重置;自从程序代码结束以来。您在示波器上看到的延迟可能是启动和晶振设置时间。
使用
while(true);
在主要结尾处构建。 我将易失性NOP指令放在那里,以防止编译器优化空的while循环。如果循环中有任何其他代码,则可以省略它。