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

2025年5月 6日 (火)

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

汎用PWMタイマのプリスケーラ設定、これが言うことを
聞かないので、追いかけてみました。

・きっかけは先日の1MHz方形波出力
・それを100Hzにしたかった。
・ハードウェアマニュアルにはこんな表。

G11_20250506114501

・タイマプリスケーラをPCLKD/16にすると、
 48MHz/16で3MHzクロックに。
 これを1/15000して200Hzにして、さらに
 トグル出力で100Hzに。
   こんな目論見。
・しかし出てきたのは400Hz。
   なぜ???

そこで、レジスタ定義ファイルを調べてみたら

__IOM uint32_t GTCR;  /*!< General PWM Timer Control Register */
struct
 {
 __IOM uint32_t CST : 1;  /*!< [0..0] Count Start */
 uint32_t : 15;
 __IOM uint32_t MD : 3;  /*!< [18..16] Mode Select */
 uint32_t : 4;
★ __IOM uint32_t TPCS : 4;  /*!< [26..23] Timer Prescaler Select */
 uint32_t : 5;
} GTCR_b;

「TPCS」が4bitになってました。
  ほんとは3bit

ということは、
  0b0000  1/1  これはok
  0b0010  1/4
  0b0100  1/16
  0b0110  1/64
  0b1010  1/256
  0b1010  1/1024

こんな具合にLSBに1bitの0を足して4bitにしなく
ちゃなりません。

GPTを触るときはちょいと注意ということで。

 

|

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

トラブル遭遇」カテゴリの記事

Arduino UNO R4」カテゴリの記事

コメント

コメントを書く



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




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