[H8-ML(5730)] H8/3069 タイマーカウンターが作動しません
From: NARIOKA Kenichi <narioka@xxxxxxxxxxxxxxxxxxxxxxxx>
Date: 2005年11月06日(日)00時26分48秒
はじめまして.
成岡と申します.

H8/3069F25マイコンを勉強し始めて1ヶ月弱の初心者です.
タイマー割り込み機能を使いたいのですが,タイマーカウンターが作動せず困っ
ています.
どなたかアドバイスお願いします.

症状:タイマーカウンター(TCNT)が作動しない.
例えば,
LCD_DisplayNumber(0); //LCDに0を表示
ITU.TSTR.BIT.STR1 = 1;//ITU1 TCNTカウント開始(のはず)
while(1){
if(ITU1.TCNT > 1000) LCD_DisplayNumber(1); //LCDに1を表示
}
のように書いても,LCDにはずっと0が点灯したままです.

周囲にいる割と詳しい人にも尋ねてみたところ,「初期設定にどこか不備がある
のでは?」
とアドバイスされたので,いろいろ調べて設定してみたものの,タイマーが動い
てくれません.

「16ビットタイマのチャンネル0は使用できません.」とマニュアルにあったので,
チャンネル1を使いました.チャンネル2でもタイマー作動しません.
(また,チャンネル0でも念のため試しましたが,同様に作動していませんでした.)

どうぞよろしくお願いします.

プログラムは以下の通りです.
#include <stdio.h>
#include <string.h>
#include <sysio.h>
#include <3069S.H> // intをunsigned shortに置換

void timer_init(void);

int main(){
P1DDR = 0xff; // port1を全て出力に設定
P6DDR = 0x00; // port6を全て入力に設定
WriteCCR(0x00); // 割り込み許可
timer_init(); // timerの初期化
ITU.TSTR.BIT.STR1 = 1;//ITU1 TCNTカウント開始

LCD_DisplayNumber(0);
while(1){
if(ITU.TISRA.BIT.IMFA1 == 1){
ITU.TISRA.BIT.IMFA1 = 0;
LCD_DisplayNumber(1);
}
else if(ITU1.TCNT > 1000){
LCD_DisplayNumber(2);
}
}
return;
}
void timer_init(void){
ITU1.TIOR.BYTE = 0x88; // コンペアマッチによる端子出力禁止
ITU.TSNC.BYTE = 0x00;
ITU.TMDR.BYTE = 0x00;
ITU.TISRA.BIT.IMIEA1 = 1; // IMFA1への書き込みを許可
if(ITU.TISRA.BIT.IMFA1)ITU.TISRA.BIT.IMFA1 = 0; // 初期化
ITU1.TCR.BYTE = 0x00;
ITU1.TCNT = 0;
ITU1.GRA = 0x0c00;
MSTCR.BYTE.H = 0x78; // φクロックの出力許可(モード7で使用の場合)
MSTCR.BYTE.L = 0x00;
ITU.TSTR.BIT.STR1 = 0; // カウント停止状態
return;
}
void interrupt timer(){
if(ITU.TISRA.BIT.IMFA1)ITU.TISRA.BIT.IMFA1 = 0; // 初期化
LCD_DisplayNumber(2);
}

ベクタ番号28番にtimerを登録.

マイコン:H8/3069(64F3069F25)
開発環境::YellowIDE ver6.38

いろいろ調べている過程で,
ITU.TISRC.BIT.OVF0
ITU.TISRC.BIT.OVF1
ITU.TISRC.BIT.OVF2
の初期値は0とマニュアルにあるのですが,すべて1になっていることがわかりま
した.
症状と関係あるのかわかりませんが..

スレッド概略
[表示中](起点)
 ├[5731(1)]
 ├[5733(2)]
 └[5735(3)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]