Timer0/1 は割り込み時間を計算するためのクロックを設定します

        クロックは一般に外部水晶発振器クロックと内部クロックに分けられ、相対的に外部水晶発振器クロックの方が内部システムクロックよりも精度が高く、時刻計算も正確です。良いものは高価で高価であるため、製品が必要としない限り、外部水晶発振器クロックは一般的に使用されません。

        この記事では主に、クロックを使用してTimer0/1(RTC、PWM割り込み、ADC)を設定する方法と、割り込み時間の設定方法を紹介します。

基礎知識 1 MHz=1000 kHz=1000 000 Hz 1s = 1 000ms

タイマ機能を選択する前に、クロックを選択し、次に分周を選択して割り込み時間を決定する必要があります

目次

1. クロック構造

2. Timer0/1のクロックを設定します

2.1、RC32K (低電力クロック)

2.2、RC1M (システムクロック)

2.2.1 PLL分周構成

 2.2.2 TIMER0/1 分周選択の取得

 3. 中断時間を計算する

3.1 RC_32KHz計算割り込み時間

3.2 RC_1MHz計算割り込み時間


1. クロック構造

以下に示すように:

RC32KHz(RC128KHz4分周)は低速クロック(低電力モード)であり、

RC1MHzはシステムクロック(各モジュールに接続可能)、

XOSC は外部水晶発振器クロックです。

 

クロック構造の説明:
(1). システムには、 RC128KHz、RC1MHz、外部水晶発振器の 3 つのアナログ クロック ソースが含まれており、そのうち RC128KHz はアナログ端で 4 で分周されて RC32KHz クロック ソースを形成し、デジタル システムに送信されて使用されます。 , RC1MHz はアナログ端で 4 つの周波数分割後に形成されます。RC250KHz クロック ソースはデジタル システムに送信されて使用されます。外部水晶発振器は通常 8MHz と 16MHz をサポートします。
(2). アナログ PLL フェーズ ロック ループ アクセス クロック ソースは内部 RC1MHz と外部水晶発振器クロックをサポートしますが、アクセス クロックは 1MHz のみをサポートする ため、PLL アクセス クロック ソースが外部水晶発振器を選択する場合は、次に従って実行する必要があります。異なる外部水晶発振器周波数への周波数分割または 1MHz までの 16 周波数分割。
(3). システム クロックは内部 PLL 出力クロックです。PLL 出力クロックの最大周波数は 32MHz で 、外部水晶発振器クロックがシステムとして選択されている場合、SYS_CLK_SEL はさまざまなアプリケーション要件に応じて分周用に構成できます。クロックまたは水晶発振器クロックが PLL アクセス クロック ソースとして使用されます。低消費電力でウェイクアップする場合、水晶発振器の起動時間の影響により、システムの待ち時間は、PLL アクセス クロック ソースとして使用される場合よりも大幅に長くなります。内部 RC1MHz が PLL アクセス クロック ソースおよびシステム クロックとして選択されます。
(4). CAN モジュールの動作クロックは、外部水晶発振器と内部システム クロックをサポートしていますが、プログラム構成を通じて、水晶発振器が動作クロックとして選択されている場合、クロスタイム ドメインの問題が発生することに注意してください。システム実行クロック、および SYS_CAN_DOMAIN レジスタを適切に設定する必要がある; CAN モジュール クロックが CAN モジュールに供給されていない場合、CAN モジュールのどのレジスタにもアクセスできず、アクセス動作によりシステムが誤動作する可能性があります。
(5). WDT カウント クロックは RC32KHz とその周波数 32 分周であり、ソフトウェアによるオプションです。
(6). RTC カウント クロック RC32KHz とその 32 分周、外部水晶発振器の 32 分周、ソフトウェア オプション。
(7). すべての周辺機器とシステム クロックをゲートして消費電力を削減できます。

2. Timer0/1のクロックを設定します

 チップのマニュアルに従ってクロックを選択してください

2.1、RC32K (低電力クロック)

128kHz を 4 分周した低電力クロック、RC_128K、RC_32K

2.2、RC1M (システムクロック)

2.2.1 PLL分周構成

RC1M 入力から PLL1MHz、出力32MHz

図のように RC 1MHz→PLL 32MHz が選択されています。チェックされていない場合は、レジスタを設定する必要があります。

 PLL レジスタには外部クロックの分周がないことがわかります。これは、チップに外部水晶発振器クロックがないことを証明しています。

 2.2.2 TIMER0/1 分周選択の取得

PLL は 32MHz を G に出力し、TIMER0/1 に 2 で分周することを選択します。

初期化チェックまたはレジスタ選択

 

 3. 中断時間を計算する

3.1 RC_32KHz計算割り込み時間

    32KHz = 32 000 Hz、1 S は 32 000 Hz (0x7D00)、1ms は 32 Hz (0x20)

3.2 RC_1MHz計算割り込み時間

RC_1MHZ→1MHZ→PLL(32MHz)→G(2分周)→16MHz

1S は 16MHz 16MHz = 16 000 000Hz 1ms は 16 000Hz (0X3E80)

/*!
    \brief      timer0/1 initialize
    \param[in]  timerx: TIMERx(0,1)
	\param[in]	timer_cfg: timer0/1 config
	\param[in]	timer_mod: timer0/1 mod count
    \param[out] none
    \retval     none
*/
void timer_init(uint32_t timerx,uint8_t timer_cfg,uint16_t timer_mod)
{
	TIMER_CFG(timerx) = timer_cfg;
	TIMER_MOD(timerx) = timer_mod;
	if(timerx == (uint32_t)TIMER0){
		if((timer_cfg & TIMER_CFG_IE) != 0U){
			NVIC_EnableIRQ(TIMER0_IRQn);
		}else{
			NVIC_DisableIRQ(TIMER0_IRQn);
		}
	}else{
		if((timer_cfg & TIMER_CFG_IE) != 0U){
			NVIC_EnableIRQ(TIMER1_IRQn);
		}else{
			NVIC_DisableIRQ(TIMER1_IRQn);
		}
	}
}

timer_init(TIMER0,0x2B,0x3E80); 0X2B は各レジスタに設定され、0x3E80 は 1ms の割り込みを生成します。

他の割り込みイベントも基本的には同じで、真似するだけです。

おすすめ

転載: blog.csdn.net/qq_51679917/article/details/130388382