Embedded 在20Mhz瑞萨微控制器IO引脚上驱动高频输出(32Khz)

Embedded 在20Mhz瑞萨微控制器IO引脚上驱动高频输出(32Khz),embedded,microcontroller,Embedded,Microcontroller,我需要在Renesas R8C/36Cµ控制器的引脚19上驱动32Khz方波。引脚不可协商(电路设计已经完成。) 软件设计使用250微秒的中断来模拟多任务,但这仅适用于2Khz全波 我是否需要创建另一个更高优先级的中断来驱动32 Khz,还是有其他一些我不知道的技巧 查看该芯片的数据表: 看起来您唯一的实际选择是将pin用作通用输出端口。 唯一可用的输出模式似乎是通用输出端口。我对RC8不太熟悉,Renesas在性能方面没有说太多,但它是一个CISC处理器,每个指令通常有4个周期,所以让

我需要在Renesas R8C/36Cµ控制器的引脚19上驱动32Khz方波。引脚不可协商(电路设计已经完成。)

软件设计使用250微秒的中断来模拟多任务,但这仅适用于2Khz全波

我是否需要创建另一个更高优先级的中断来驱动32 Khz,还是有其他一些我不知道的技巧


  • 查看该芯片的数据表:

    看起来您唯一的实际选择是将pin用作通用输出端口。
    唯一可用的输出模式似乎是通用输出端口。

    我对RC8不太熟悉,Renesas在性能方面没有说太多,但它是一个CISC处理器,每个指令通常有4个周期,所以让我们估计大约4个MIPS?有些指令长得多,除法最多30个周期

    因此,如果您创建一个64KHz定时器,并在每个中断上翻转输出,每个中断之间大约有63条指令,您有中断延迟加上翻转位的代码。如果它能正常工作,则可能会造成大量CPU负载,并可能影响其他操作的及时性

    现实一点,如果不重新设计,项目可能就不可行。在我看来,4KHz操作系统已经在给它带来压力了——以这种速度运行的软件开销很可能是CPU负载的一个重要部分

    [新增]

    我之前建议在中断之间使用6条指令——计算器中的手指故障,我已将该估计值更改为63,并将我的结论调整为“几乎不可行”

    然而,我再次查看了数据表,中断延迟是可变的,因为指令执行是可变的,并且当前指令必须在中断服务之前完成,最坏的情况是当DIVX指令正在执行时,在中断例程的第一条指令之前,它需要51个周期。也就是2.55us,当您需要每15.625us触发一次中断时,可变延迟将产生明显的抖动,占总CPU时间的6%到16%,甚至不考虑ISR本身使用的时间。。另外,如果中断本身被抢占,或者在该中断到期时运行更高优先级的中断,则会施加进一步的抖动


    它是否工作将取决于32KHz的精度和抖动限制,以及您的代码需要完成的任何其他工作。

    正如许多人指出的那样,如果32KHz时钟是用gpio生成的,那么从硬件角度来看,这种设计似乎不是很好

    然而,我不知道你的处境有多绝望,也不知道涉及的数量。但如果它是原型或非常短的系列,并且引脚20是自由的,则可以将引脚19和20短路,将引脚19设置为输入,将引脚20设置为输出。由于引脚20可用作计时器rd的输出,因此您可以设置该计时器以在不使用任何中断的情况下输出32khz

    我不是瑞萨的微型专家,但我是从你所附的数据表中看到的,以及之前使用其他mcu的经验来谈的


    我希望这会有所帮助。

    如果您不能将引脚19绑定到另一个具有硬件以生成32KHz的引脚上,而只将引脚19作为输入?这不是一个值得骄傲的时刻,但在DIL包装上很容易


    你能每15.6us调用一个中断并切换pin19,然后在第16个中断上执行多任务操作吗?但这可能是浪费。中断速率为32Khz时,设置pin19的时间占执行多任务决策的时间的八分之一,其余七次等待,直到某一点,您可以重置pin19并在不到一半的CPU时间内执行一些背景代码

    如果32Khz是关键,最好将其完全作为单独的中断。将其分开也使中断处理程序变得简单。简单是好的。32kHz是关键。我本来希望能在船上的时钟或计时器上使用一些技巧,但我在文献中没有看到任何专门说明如何做到这一点的东西;我的评论主要是根据过去在不同芯片上的经验。如果你需要一个32KHz的引脚,而不是一个定时器输出引脚,它可能是“完整的”,但这几乎不是我所说的“设计”。)请注意,对于32kHz的方波,您需要64kHz的中断率。这也是我的想法。谢谢