Arduino到期输出TIOA和TIOB没有中断

时间:2014-01-07 06:45:32

标签: arduino

我是一名电气学生,想要使用arduino,因为它会产生用于驱动MOSFET的脉冲。我正在制造一台逆变器,想要产生脉冲。我和我有arduino。我的主要目标是:

1)一个软件中断用于下一个时间段的采样(这将改变..)。在三个周期之后,我将使用analogRead()时间段的新值并继续相同。

2)在一个时间周期内,由定时器通道TC0的RC计数设置,我想用适当的计数加载RA0和RB0,以获得具有不同占空比的输出脉冲(取决于RA0和RB0值)。

我编写了一个程序,用TC3提供软件中断,工作正常。即我能够为每个新的采样值自动将新值加载到RA0和RB0中(每3个周期新值到位,否则将加载相同的值)。 现在我也使用TC0(我用过Olavi Kamppari的库)来停止,加载新值和启动计时器。 当我在串口监视器中检查PIO_PB25B_TIOA0和PIO_PB27B_TIOB0时,我得到了33554432,134217728。

我真的很困惑。我期待输出1和0。我只想要TC0的两个脉冲而没有中断。我将ACPA值设置为3(Toggle)并且我也启用了计时器的时钟。但是我没有得到输出。

如果可能,请提供一个样本程序,可以输出PB25和PB27(TIOA0和TIOB0)的脉冲。非常感谢任何帮助。

感谢您阅读我的问题。

谢谢。

1 个答案:

答案 0 :(得分:0)

以下草图在TIOA6(内存中的引脚5)

上输出3 MHz信号

我即将发布一个关于相同代码的问题 - 我想要达到8(和一点点)MHz但是已经碰到了概念砖墙!

请注意,这正在开发中 - 不使用IRQ处理程序 - PMC_Enable_Periph应该引用ID_TC6(我相信) - 然后IRQ处理程序可以放在垃圾箱中历史!

void TC6_Handler()
{
        TC_GetStatus(TC2, 0);    
}

void startTimer(Tc *tc, uint32_t channel, IRQn_Type irq) {
        pmc_set_writeprotect(false);
        pmc_enable_periph_clk((uint32_t)irq);

        TC_Configure(tc, channel,
               TC_CMR_WAVE |
               TC_CMR_WAVSEL_UP_RC |
               TC_CMR_TCCLKS_TIMER_CLOCK1|
               TC_CMR_ACPA_TOGGLE );  // RC compare TOGGLES TIOA)smiley-wink;

        TC_SetRA(tc, channel, 1); //50% high, 50% low
        TC_SetRC(tc, channel, 1);


         PIO_Configure(PIOC,
                       PIO_PERIPH_B,
                       PIO_PC25B_TIOA6,
                       PIO_DEFAULT);

         TC_Start(tc, channel);     
}

void setup(){    
        startTimer(TC2, 0, TC6_IRQn);
}

void loop(){
}