カレンダー(月別)
08 ≪│2017/09│≫ 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
プロフィール

Suma

Author:Suma
東北の田舎でロボット開発に励んでいます。
現在のメインはマイクロマウス。目指すは東北地区大会優勝!!

ご注意
・当ブログはリンクフリーです ・当ブログの掲載情報を元に行った行為によって何らかの損害が生じたとしても管理人は一切責任を負いません。予めご了承ください。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--(--) --:-- |
8bitタイマ(TMR0)を使って1ms周期のタイマ割り込みを発生させてみる
TMR0のソースクロックPCLKは24MHz(Default)設定のままとする

・TMR0を設定する前にモジュールストップを解除しておく
 (MSTP()はiodefine.hに定義してあるマクロ)
MSTP(TMR0) = 0;

・TMR0の設定は以下のとおり
TMR0.TCCR.BYTE = 0x0D; /* PCLK/1024でカウント */
TMR0.TCR.BYTE = 0x48; /* コンペアマッチAでカウンタクリア、CMIEA許可 */
TMR0.TCORA = 23; /* 1.024ms Cycle (24-1) */

・TMR0の割り込み関連の設定
 (IEN()とIPR()はiodefine.hに定義してあるマクロ)
IEN(TMR0,CMIA0) = 1; /* TMR0のCMIA0割り込み要求許可 */
IPR(TMR0,CMIA0) = 2; /* TMR0のCMIA0割り込みレベル設定 */

・全体の割り込み許可(machine.hのインクルードが必要)
setpsw_i();

・intprg.cを編集
割り込み関数本体はTest001.cに記述したいのでintprg.cからはコメントアウト
// TMR0 CMIA0
//void Excep_TMR0_CMIA0(void){ }

・Test001.cにExcep_TMR0_CMIA0を記述
void Excep_TMR0_CMIA0(void){
 IR(TMR0,CMIA0) = 0; /* 割り込みフラグクリア */
/* LED点灯 */ 
}

・Test001.cに以下を記述
#pragma interrupt (Excep_TMR0_CMIA0(vect=174))


これで1ms周期(正確には1.024ms周期だけど)の割り込みが実現できた
オシロがないので1ms周期を直接確認はできないが、1ms割り込み内で1000カウントする度にLEDを点滅させてみた
ほぼ1秒間隔だったので割り込み周期は計算どおりのようである

次は内部の状態をモニタするためにシリアル通信かな、と思ったがE1エミュレータがあればそんな面倒なry

2013/03/12(火) 22:08 | コメント:0 | トラックバック:0 |
コメント
コメントを投稿
名前
タイトル
メール
URL
コメント
パスワード
管理者にだけ表示を許可する


トラックバック

この記事のトラックバックURL
 

この記事にトラックバックする (FC2 blog user only!)
 
この記事へのトラックバック


探索済み区画
これまで
区画を探索
検索フォーム
夢を叶えるための名言集


presented by 地球の名言
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。