« Arduino UNO R4互換:RA4M1コアボードで周波数カウンタ | トップページ | スマートロードスターのスピードメータ修理 »

2025年5月 7日 (水)

Arduino UNO R4備忘録

・システムタイマー
  「AGTタイマー0」で1ms割り込み。
    volatile uint32_t agt_time_msをカウントアップ。

・「agt_time_ms」がmillis()の元。

・micros()はこの値にAGTタイマーそのものの値を加味
  して経過時間を得ている

・delay()もこの値を使ってる。

・delayMicroseconds()はUNO R3と同じでソフトウェアタイマー。
   void delayMicroseconds(unsigned int us)
     UNO R3のように14bitという制限はなさそう。

・割込有効/禁止はこんな命令に
  #define interrupts()   __enable_irq()
  #define noInterrupts()  __disable_irq()

  そして、ARMマイコンの機械語では、

  __STATIC_FORCEINLINE void __enable_irq(void)
     __ASM volatile ("cpsie i" : : : "memory");

  __STATIC_FORCEINLINE void __disable_irq(void)
     __ASM volatile ("cpsid i" : : : "memory");

  「CPSIE I」で割込許可。
  「CPSID I」で割り込み禁止。

  ※Z80のように「EI」「DI」でエエやんっと思っちゃいます。
   長い文字、キライです。

・USBではなくD1端子にシリアル出力する「Serial1.print」。
 残念ながらバッファリング処理してない。
 文字出力が終わるまで、元ルーチンに戻ってこない。

 

※関連
Arduino UNO R4、GPTのレジスタ定義にミス発見

※参考
Arduinoの変数サイズをCPU毎に調べてみた:ラジオペンチblog

|

« Arduino UNO R4互換:RA4M1コアボードで周波数カウンタ | トップページ | スマートロードスターのスピードメータ修理 »

Arduino UNO R4」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« Arduino UNO R4互換:RA4M1コアボードで周波数カウンタ | トップページ | スマートロードスターのスピードメータ修理 »