パルスカウンター

16bitのパルスカウンタが2個あります。32bitカウンタ1個としても使用できます。

パルスカウンターはパルス出力のメーター各種や測定装置のパルスをカウントする機能です。スリープ中にパルスカウントが可能なため超低消費電力で動作します。

以下はパルスカウンターの使用例です。パルスカウンターは、パルス的に発生する信号数を数えることと、一定数に達した場合に割り込みを発生する機能を持っています。

※ スリープ中も動作しますのでウェイクアップ用の割り込みとしても利用できます。
※ チャタリング防止(debounce)用の設定もあります。内部の32kHz オシレータを稼働させる必要があります。
※ カウンタは16bitまたは32bitとなりますが、32bitを使用した場合、動作できるカウンタは1系統に限定されます。
※ 割り込み(u32DeviceIdはE_AHI_DEVICE_SYSCTRL, u32ItemBitmapはE_AHI_SYSCTRL_PC0_MASK, E_AHI_SYSCTRL_PC1_MASK)を設定しておきます。 割り込みは、タイマーの項を参照ください。

対応できるパルスについて

100 kHz まで検知可能と半導体のマニュアルには記載されております。また debounce (チャタリングなどの防止のため、連続的な信号が来た場合に反応する) 機能を使用する場合、

・2サンプル連続・・・3.7 kHz
・4サンプル連続・・・2.2 kHz
・8サンプル連続・・・1.2 kHz

まで検出可能です。

APIの利用例

#define PUILSE_INT_COUNT 100

// パルスカウンタの初期設定
PRIVATE void vPulseCounterConfig(void)
{
	// カウンタの設定
	bAHI_PulseCounterConfigure(
		E_AHI_PC_0,
		1,      // 0:RISE, 1:FALL EDGE
		0,      // Debounce 0:off, 1:2samples, 2:4samples, 3:8samples
		TRUE,   // Enable Combined Counter (32bitカウンタ)
		TRUE);  // Enable Interrupt (割り込み)

	// カウンタのセット
	bAHI_SetPulseCounterRef(
		E_AHI_PC_0,
		0x0); // 何か事前に値を入れておく

	// カウンタのスタート
	bAHI_StartPulseCounter(E_AHI_PC_0); // start it
}

...
// パルス数の読み込み
    bAHI_Read32BitCounter(&u32pulse);
    bAHI_Read16BitCounter(E_AHI_PC_0, &u16pulse); // 16bitの場合
                
...
// パルス数のクリアと、割り込みまでのパルス数の設定
    bAHI_Clear32BitPulseCounter();
    bAHI_Clear16BitPulseCounter(E_AHI_PC_0); // 16bitの場合

    bAHI_SetPulseCounterRef(E_AHI_PC_0, PULSE_INT_COUNT);