パルス幅計測


で、R8の不思議なところが、カウンタにプリスケーラとリロードレジスタが付いていることです(p98)。
つまり、プリスケーラ(8ビット)+カウンタ(8ビット)=16ビットカウンタとして使用と、
ダウンカウントのみで、アンダーフロー(カウンタの値が-1になる)で自動的にリロードレジスタの値に復帰など、
データバスが8ビットで済む&コンペアマッチ用レジスタが必要ないなどと、効率的(?)な設計になっています。

まあ、詳しい説明はハードウェアマニュアル等を読むとして、ここでは実際にコードを記述します。
そうそう、CNTR0端子(タイマXの入出力)は、00と01の2箇所があるのですが(p23)、
なぜかUART(シリアル通信)機能のUCONに設定するビットがあります(p141)。
では、まずは、ベクタアドレスの記述から・・・(p73)。



.lword dummy_int ; vector 21
.glb _timer_x
.lword _timer_x ; vector 22 TIMER_X
.lword dummy_int ; vector 23
.lword dummy_int ; vector 24
.glb _int_1
.lword _int_1 ; vector 25 INT1
.lword dummy_int ; vector 26



タイマXのパルス幅計測モードでは、INT1割り込みが重要な役割を果たします(p107)。
ちなみにタイマX割り込みは、カウンタのアンダーフローで発生するので、パルス幅計測モードではあまり使わないかも。



/* グローバル変数 */

unsigned short pulse; // パルス幅計測用

/* timerX初期化 */

timer_x_init();

asm("FSET I"); // 全体の割り込み許可



/****************************************/
/* タイマX 初期化 */
/****************************************/

timer_x_init(void)
{

txs = 0; // カウント停止
while(txs == 1); // 注意事項(p242)より

txmod2 = 0; // パルス周期測定モード以外
txmod1 = 1; // パルス幅測定モード
txmod0 = 1;

r0edg = 1; // "H"レベル幅測定&INT1が立下りエッジで割り込み

txocnt = 0; // パルス幅計測モードでは0設定
txedg = 0;
txund = 0;

prex = 0xff; // フルレンジ
tx = 0xff;

txck1 = 0; // カウントソース設定 f8 = 1MHz(1us)
txck0 = 1;

cntrsel = 0; // p1_7/CNTR00/INT10使用 UART0関連レジスタのため、UART0側で注意が必要

int1ic = 0x05; // INT1割り込み許可
txic = 0x05; // timerX割り込み許可

txs = 1; // カウント開始
}

/****************************************/
/* INT1割り込み */
/****************************************/

#pragma interrupt int_1 // 割り込み処理関数指定
void int_1(void)
{

txs = 0; // カウント停止
while(txs == 1); // 注意事項(p242)より

pulse = tx; // パルス幅取得
pulse = (pulse << 8) + prex;
pulse = 0xffff - pulse;

uart_put_short_dec((unsigned short)pulse); /* パルス幅送信 */
uart_putc((unsigned char)0x0d); /* CR */
uart_putc((unsigned char)0x0a); /* LF */

prex = 0xff; // カウンタリセット
tx = 0xff;

txs = 1; // カウント開始
}

/****************************************/
/* タイマX割り込み */
/****************************************/

#pragma interrupt timer_x // 割り込み処理関数指定
void timer_x(void)
{

}



© Rakuten Group, Inc.
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: