· 

AVR128DB28のGPIOについて

 

AVR128DB28のGPIOの制御について毎度のことながら調べてみる。以前の調査はこちら(https://sunday-engineer.jimdofree.com/2022/06/19/arduino%E3%81%AEgpio%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)。Arduino的な書き方をすると、
  1. void setup(void){
  2.     pinMode(17,OUTPUT);
  3.     pinMode(18,OUTPUT);
  4.     pinMode(19,OUTPUT);
  5. }
  6. void loop(void){
  7.     digitalWrite(17,HIGH);
  8.     digitalWrite(18,HIGH);
  9.     digitalWrite(19,HIGH);
  10.     digitalWrite(17,LOW);
  11.     digitalWrite(18,LOW);
  12.     digitalWrite(19,LOW);
  13. }
まぁ、こうなる。そすっと、
で、以前Arduino UNO R3でやった時より、立ち上がり立下りとも3us遅い、、、なんやそれ。まぁ気を取り直して。データシートによると、
これだけのことで出力を制御できるっぽい。で、
  1. void setup(void){
  2.   PORTD.DIR|=0xE0;
  3. }
  4. void loop(void){
  5.   PORTD.OUT|=0xE0;
  6.   PORTD.OUT&=~0xE0;
  7. }
ってすると、
となるので、おおって思うけど、それでも実はAtmega328Pより遅い。で、AVR128DB28にはVirtualPortって機能があるので、こちらもやってみる。データシート読んでも何かさっぱりわからんのだけど、どうもシングルサイクルビットアクセスができるようにしたものっぽい。まぁやってみるだよ。で、
  1. void setup(void){
  2.   VPORTD.DIR|=0xE0;
  3. }
  4. void loop(void){
  5.   VPORTD.OUT|=0xE0;
  6.   VPORTD.OUT&=~0xE0;
  7. }
こういうコード。PORTDがVPORTDになっただけ。で、
立ち上がりエッジから立ち上がりエッジを比較すると、
まぁこんなもんか。AVR DXは公式で24MHzまでクロックを早くできるので、その点ではAtmega(上限20MHz)よりは有利なんだろうと思うことにする。そして、実は上の結果は48MHzのATSAMD21G18よりも早い。まぁいんじゃない?

AVR128DB28でのお遊びは一旦このくらいにしておこうと思う。次回はP板が入荷してから。いやしかし、まぁ良いデバイスだと思う。いろんなイミでちょうど良いデバイス。

あぁーこの休みに色々勉強せんといかんと思いつつもなかなかやる気が出ない。せめて軽い内容でブログを更新してみたってかんじ。ところで、仕事があるときは日々どんどん就寝時間が遅くなって土日で寝まくってなんとかリセットするって感じだけど、長期連休ではどんどん就寝時間が早まっていくのは、やっぱ、齢のせいだよなー