16 基本タイマー(BCTM)
この章は、CH32F2x、CH32V2x、およびCH32V3xファミリ全体に適用されます。
基本タイマーモジュールには、16ビットの自動リロードタイマー(TIM6およびTIM7)が搭載されており、更新イベントをカウントし、割り込み/DMA要求を生成するために使用できます。
基本タイマーモジュールには、16ビットの自動リロードタイマー(TIM6およびTIM7)が搭載されており、更新イベントをカウントし、割り込み/DMA要求を生成するために使用できます。
16.1 主な機能
基本的なタイマー機能
・ 16ビット自動リロードカウンタ(アップカウントをサポート)
・ 16ビットプリスケーラ(分周比は1~65536の範囲で動的に調整可能)
・ DACをトリガーする同期回路
・ 更新イベント発生時の割り込み/DMA要求生成
・ 16ビット自動リロードカウンタ(アップカウントをサポート)
・ 16ビットプリスケーラ(分周比は1~65536の範囲で動的に調整可能)
・ DACをトリガーする同期回路
・ 更新イベント発生時の割り込み/DMA要求生成
16.2 原理と構造
16.2.1 概要
図16-1 基本タイマーの構造ブロック図
図16-1に示すように、基本タイマーの構造は入力クロックとコアカウンタの2つの部分に分けられます。
基本タイマーのクロックソースはAHBバスクロック(CK_INT)です。これらの入力クロック信号は、設定された各種フィルタリングと分周処理を経てCK_PSCクロックとなり、コアカウンタに出力されます。
さらに、これらの複雑なクロックソースは、TRGOとしてDACペリフェラルに出力することもできます。
基本タイマーの中核は16ビットカウンタ(CNT)です。
CK_PSCはプリスケーラ(PSC)によって分周され、CK_CNTとなり、最終的にCNTに出力されます。
CNTはアップカウントをサポートし、カウントサイクルが終了するたびにCNTの初期値をリロードする自動リロードレジスタ(ATRLR)を備えています。
16.2.2 基本タイマーと汎用タイマーの違い
汎用タイマーと比較して、基本タイマーには以下の機能がありません。
1) 基本タイマーはダウンカウントまたはアップダウンカウントをサポートしていません。
2) 基本タイマーは4つの独立した比較/キャプチャチャネルを備えていません。
3) 基本タイマーはタイマーを制御するための外部信号をサポートしていません。
4) 基本タイマーはインクリメンタルコード、またはタイマー間のカスケード接続/同期をサポートしていません。
1) 基本タイマーはダウンカウントまたはアップダウンカウントをサポートしていません。
2) 基本タイマーは4つの独立した比較/キャプチャチャネルを備えていません。
3) 基本タイマーはタイマーを制御するための外部信号をサポートしていません。
4) 基本タイマーはインクリメンタルコード、またはタイマー間のカスケード接続/同期をサポートしていません。
16.2.3 クロック入力
基本タイマーのクロックは内部クロック(CK_INT)によって提供されます。
16.2.4 カウンタと周辺回路
CK_PSCは、分周器(PSC)への入力として周波数分周に使用されます。
PSCは16ビットで、実際の分周係数はR16_TIMx_PSCの値+1に相当します。
CK_PSCはPSCを介してCK_INTになります。
R16_TIMx_PSCの値の変更はリアルタイムには反映されませんが、更新イベント後にPSCに反映されます。
更新イベントには、UGビットのクリアとリセットが含まれます。
PSCは16ビットで、実際の分周係数はR16_TIMx_PSCの値+1に相当します。
CK_PSCはPSCを介してCK_INTになります。
R16_TIMx_PSCの値の変更はリアルタイムには反映されませんが、更新イベント後にPSCに反映されます。
更新イベントには、UGビットのクリアとリセットが含まれます。
16.3 デバッグモード
システムがデバッグモードに入ると、タイマーはDBGモジュールの設定に従って実行を継続するか停止します。
16.4 レジスタの説明
表16-1 TIM6関連レジスタ
| TIM | TIM6 | TIM7 |
| Offset address | 0x400010 | 0x400014 |
| Name | Offset address | Description | Reset value |
|---|---|---|---|
| R16_TIMy_CTLR1 | 00 | TIMy control register1 | 0x0000 |
| R16_TIMy_CTLR2 | 04 | TIMy control register2 | 0x0000 |
| R16_TIMy_DMAINTENR | 0C | TIMy DMA/interrupt enable register | 0x0000 |
| R16_TIMy_INTFR | 10 | TIMy interrupt flag register | 0x0000 |
| R16_TIMy_SWEVGR | 14 | TIMy event generation register | 0x0000 |
| R16_TIMy_CNT | 24 | TIMy counter | 0x0000 |
| R16_TIMy_PSC | 28 | TIMy prescaler | 0x0000 |
| R16_TIMy_ATRLR | 2C | TIMy auto reload register | 0x0000 |
16.4.1 制御レジスタ1 (TIMy_CTLR1) (y=6/7)
CTLR1 = ConTroL Register1 | Access base address 0x4000*C00 Offset address: 0x00
■レジスター内容
ソフトウェアはこのビットを介してUEVイベントのソースを選択します。
ソフトウェアはこのビットを介してUEVイベントの生成を有効/無効にします。
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Reserved | ARPE | Reserved | OPM | URS | UDIS | CEN | |||||||||
| RO | RW | RO | RW | RW | RW | RW | |||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
ARPE
自動リロードおよびプリロード有効ビット(Auto reload and preload enable bit)| 1 | 自動リロード値レジスタ(ATRLR)が有効。 |
| 0 | 自動リロード値レジスタ(ATRLR)が無効。 |
OPM
シングルパルスモード (Single pulse mode)| 1 | 次の更新イベント(CENビットがクリアされる)が発生するとカウンタは停止します。 |
| 0 | 次の更新イベントが発生してもカウンタは停止しません。 |
URS
更新要求ソース(Update request source)ソフトウェアはこのビットを介してUEVイベントのソースを選択します。
| 1 | 更新割り込みまたはDMA要求が有効な場合、カウンタのオーバーフロー/アンダーフローのみが更新割り込みまたはDMA要求を生成します。 |
| 0 | 更新割り込みまたはDMA要求が有効な場合、以下のいずれかのイベントが更新割り込みまたはDMA要求を生成します。 -カウンタのオーバーフロー/アンダーフロー -UGビットのセット -スレーブモードコントローラによって生成された更新 |
UDIS
更新無効 (Update disable)ソフトウェアはこのビットを介してUEVイベントの生成を有効/無効にします。
| 1 | UEV無効。更新イベントは生成されず、レジスタ(ATRLR、PSC、CHCTLRx)は値を維持します。 UGビットがセットされるか、スレーブモードコントローラによってハードウェアリセットが送信されると、カウンタとプリスケーラは再初期化されます。 |
| 0 | UEV有効。更新(UEV)イベントは、以下のいずれかのイベントによって生成されます。 − カウンタのオーバーフロー/アンダーフロー − UGビットのセット − スレーブモードコントローラによって生成された更新。 バッファ付きレジスタには、プリロードされた値がロードされます。 |
CEN
カウンター有効 (Counter enable)| 1 | カウンター有効 |
| 0 | カウンター無効 |
16.4.2 制御レジスタ2 (TIMy_CTLR2) (y=6/7)
CTLR2 = ConTroL Register2 | Access base address 0x4000*C00 Offset address: 0x04
■レジスター内容
これらの3ビットは、マスターモード時にスレーブタイマーに送信される同期情報(TRGO)を選択するために使用されます。可能な組み合わせは次のとおりです。
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Reserved | MMS | Reserved | |||||||||||||
| RO | RW | RO | |||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
MMS
マスターモード選択 (Master mode selection)これらの3ビットは、マスターモード時にスレーブタイマーに送信される同期情報(TRGO)を選択するために使用されます。可能な組み合わせは次のとおりです。
| 000 | リセット - UGビットはトリガ出力(TRGO)として使用されます。 トリガ入力によって生成されたリセットの場合(スレーブモードコントローラがリセットモードの場合)、TRGOの信号は実際のリセットに対して遅延します。 |
| 001 | イネーブル - カウンタは信号CNT_ENをトリガ出力(TRGO)として使用できるようにします。 場合によっては、複数のタイマーを同時に起動したり、一定時間内にスレーブタイマーをイネーブルするように制御したりする必要があります。 カウンタイネーブル信号は、ゲーティングモードでは、CEN制御ビットとトリガ入力信号の論理和によって生成されます。 カウンタイネーブル信号がトリガ入力によって制御される場合、マスター/スレーブモードが選択されていない限り、TRGOに遅延が発生します(TIMx_SMCFGRレジスタのMSMビットの説明を参照)。 |
| 010 | 更新イベントがトリガ入力(TRGO)として選択されます。 例えば、マスタータイマーのクロックをスレーブタイマーの分周器として使用できます。 |
| 011 | |
| 100 | |
| 101 | |
| 110 | |
| 111 |
16.4.3 DMA/割り込み有効レジスタ(TIMy_DMAINTENR)(y=6/7)
DMAINTENR = DMA/INTerrupt ENable Register | Access base address 0x4000*C00 Offset address: 0x0C
■レジスター内容
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Reserved | UDE | Reserved | UIE | ||||||||||||
| RO | RW | RO | RW | ||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
UDE
更新DMA要求有効ビット (Update DMA request enable bit)| 1 | 更新DMA要求有効。 |
| 0 | 更新DMA要求無効。 |
UIE
更新割り込み有効ビット(Update interrupt enable bit)| 1 | 更新割り込み有効。 |
| 0 | 更新割り込み無効。 |
16.4.4 割り込みフラグレジスタ(R16_TIMy_INTFR)(y=6/7)
INTFR = INTerrupt Flag Register | Access base address 0x4000*C00 Offset address: 0x10
■レジスター内容
新イベントが発生すると、このビットはハードウェアによってセットされ、ソフトウェアによってクリアされます。
以下の状況の場合に更新イベントが発生します。
UDIS=0、繰り返しカウンタ値がオーバーフローまたはアンダーフロー。
URS=0、UDIS=0、UGビットがセットされている、またはカウンタコアがソフトウェアによって再初期化されている。
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Reserved | UIF | ||||||||||||||
| RO | RWO | ||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
UIF
更新割り込みフラグビット (Update interrupt flag bit)新イベントが発生すると、このビットはハードウェアによってセットされ、ソフトウェアによってクリアされます。
| 1 | 更新割り込み発生。 |
| 0 | 更新割り込み未発生。 |
UDIS=0、繰り返しカウンタ値がオーバーフローまたはアンダーフロー。
URS=0、UDIS=0、UGビットがセットされている、またはカウンタコアがソフトウェアによって再初期化されている。
16.4.5 イベント生成レジスタ(TIMy_SWEVGR)(y=6/7)
SWEVGR = EVent Generation Register | Access base address 0x4000*C00 Offset address: 0x14
■レジスター内容
更新イベントを生成します。
このビットはソフトウェアによってセットされ、ハードウェアによって自動的にクリアされます。
注:分周器のカウンタもクリアされますが、分周器の係数は変更されません。
Centro対称モードまたはアップカウントモードでは、コアカウンタがクリアされます。
ダウンカウントモードでは、コアカウンタはリロード値レジスタの値を取得します。
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Reserved | UG | ||||||||||||||
| RO | WO | ||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
UG
更新イベント生成ビット (Update event generation bit)更新イベントを生成します。
このビットはソフトウェアによってセットされ、ハードウェアによって自動的にクリアされます。
| 1 | カウンタを初期化し、更新イベントを生成します。 |
| 0 | 影響しません。 |
Centro対称モードまたはアップカウントモードでは、コアカウンタがクリアされます。
ダウンカウントモードでは、コアカウンタはリロード値レジスタの値を取得します。
16.4.6 汎用タイマーのカウンタ(TIMy_CNT)(y=6/7)
CNT = CouNter of general purpose Timer | Access base address 0x4000*C00 Offset address: 0x24
■レジスター内容
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| CNT | |||||||||||||||
| RW | |||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
CNT
カウンターのリアルタイム値。(Real-time value of counter)16.4.7 プリスケーラ(TIMy_PSC)(y=6/7)
PSC = PreSCaler | Access base address 0x4000*C00 Offset address: 0x28
■レジスター内容
カウンターのクロック周波数は、分周器の入力周波数/(PSC+1)に等しくなります。
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| PSC | |||||||||||||||
| RW | |||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PSC
タイマーの分周器の分周係数(Frequency division factor of the timer's prescaler)カウンターのクロック周波数は、分周器の入力周波数/(PSC+1)に等しくなります。
16.4.8 自動リロードレジスタ(TIMy_ATRLR)(y=6/7)
ATRLR = | Access base address 0x4000*C00 Offset address: 0x00
■レジスター内容
ATRLRの動作と更新時間については、セクション14.2.4を参照してください。
ATRLRが空になると、カウンタは停止します。
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ATRLR | |||||||||||||||
| RW | |||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
ATRLR
ATRLR[15:0]の値がカウンタにロードされます。ATRLRの動作と更新時間については、セクション14.2.4を参照してください。
ATRLRが空になると、カウンタは停止します。
