SSブログ

UNO R4 digitalWrite と I/Oポートレジスタ [Arduino]

UNO R4 で digitalWrite() の代わりに、I/Oポートレジスタを制御することで高速化できるということは、各所で報告されております。

digitalWriteFast with UNO R4 - UNO R4 _ UNO R4 Minima - Arduino Forum
https://forum.arduino.cc/t/digitalwritefast-with-uno-r4/1145206

digitalWrite() と I/Oポートレジスタの制御でどのくらい時間が違うのかですが、
HIGH, LOW 1000回ループと、HIGH, LOW, HIGH, LOW 1000回ループの差分でfor()ループの影響を除去してHIGH, LOW 1000回分だけとして、これを2で割って、digitalWrite() 1回分にかかる速度を調べてみました。ただ、割り込みなどがあるので、その時々で結構まちまちの値が出ました。

だいたい、
digitalWrite(LED_BUILTIN, HIGH); や
digitalWrite(LED_BUILTIN, LOW);
で 700 ns ちょっと。

R_PORT1->POSR = bit(11); や
R_PORT1->PORR = bit(11);
で 83 ns ちょっと。

UNO R4が48MHzということは、CPU 1cycleあたり、20.8333 nsくらい。
83.333nsだと、4 cyclesに相当するのかな?

ポート操作は速いけど、UNO R4は、「MINIMA」と「WIFI」でも一部ポートが違うので注意。

dif_minima_wifi.png
タグ:Uno R4
nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。