我需要在Renesas R8C /36CμController的引脚19上驱动32Khz方波。该引脚是不可协商的(电路设计已经完成。)
软件设计使用250μsec中断来模拟多任务处理,但这仅适用于2Khz全波。
我是否需要为驱动32 Khz创建另一个更高优先级的中断,还是有其他一些我不知道的技巧?
答案 0 :(得分:6)
我不熟悉RC8,瑞萨在性能方面没有多说,但是它是CISC处理器,每条指令通常有4个周期,所以让我们估计大约4 MIPS?有些指令要长得多,最多可以划分30个周期。
因此,如果您创建一个64KHz定时器并在每个中断上翻转输出,则每个中断之间有大约63条指令,您有中断延迟加上翻转该位的代码。如果它可以工作,它可能会构成一个重要的CPU负载,并可能影响其他操作的及时性。
要切合实际,没有重新设计,项目可能不可行。在我看来,你已经用4KHz操作系统打破了它 - 这个速率下的软件开销可能是你CPU负载的重要部分。
<强> [ADDED] 强>
我之前在中断之间建议了6条指令 - 计算器中的手指故障,我已将该估计值更改为63,并将我的结论调整为“几乎不可行”。
然而,我再次查看数据表,中断延迟是可变的,因为指令执行是可变的,并且当前指令必须在中断服务之前完成,最坏的情况是DIVX指令执行时,它占用时间 - 在中断例程的第一个指令之前的51个周期。那是2.55us,当你需要每15.625us触发一次中断时,可变延迟会产生很大的抖动,构成你总CPU时间的6到16%,甚至不考虑ISR本身所使用的。如果中断本身是当这个中断到期时,预占用或更高优先级的中断正在运行,将进一步产生抖动。
它的工作原理是否取决于32KHz的精度和抖动限制,以及您的代码需要完成的任何其他工作。
答案 1 :(得分:3)
正如许多人所指出的那样,如果32khz时钟是用gpio生成的,那么从硬件的角度来看,这种设计似乎并不是很好。
然而,我不知道你的情况多么绝望,我也不知道所涉及的音量。但如果它是原型或非常短的系列,并且引脚20是空闲的,则可以将引脚19和20短路,将引脚19设置为输入,将20设置为输出。由于引脚20可以用作定时器rd的输出,你可以设置该定时器输出32khz而不使用任何中断。
我不是瑞萨的微观专家,但我说的是我在你附上的数据表中看到的以及之前与其他mcu的经验。
我希望这会有所帮助。
答案 2 :(得分:1)
查看该芯片的数据表:
看起来您唯一真正的选择是将引脚用作通用输出端口。 唯一可用的输出模式似乎是通用输出端口。
答案 3 :(得分:1)
如果您不能将引脚19连接到另一个具有硬件产生32KHz的引脚并且仅将引脚19作为输入?不是一个值得骄傲的时刻,但在DIL包装上很容易。
你可以每15.6us调用一次中断并切换pin19然后在第十六次中断时执行多任务处理,但这可能是浪费。中断率为32Khz,设置pin19然后执行多任务决策的时间为八次,其他七次等待直到你可以重置pin19并执行一些后台代码的时间不到CPU时间的一半