- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#contents();
*メニュー [#wf322d66]
//個人ページの下にページを作ることもできます。
-[[ファイル置き場>./upload]]
-[[コメントページ>./comments]]
-[[Rio Unite 130 分解>分解レポート#n13340d3]]
-過去の日誌
--[[./2008]]
--[[./2009]]
*komaへのコメント [#o41c145a]
#pcomment(./comments,reply);
*2010-04-24-タイマ割り込みでLED点灯 [#g5723342]
前回のタイマを使用したPWM波形は、TimerRC専用の出力ピンを使用しているため、それを別のピンに割り当てることはできない。
なので、今度はタイマ割り込みを発生させてLEDに接続されているピンPWM波形を発生させたい。
TimerRCの割り込み制御レジスタはなぜか3つもあるorz
,レジスタ名,機能
,TRCSR0,タイマRC割り込みのインプットキャプチャ/アウトプットコンペアの機能切り替え
,TRCIER,タイマRC割り込みを許可するかどうかを決めるレジスタ
,TRCIC,タイマRC割り込みのレベルを決定するレジスタ
R8Cには割り込みレベル(Processor Interrupt Priority Level: IPL)という値がある。
タイマを含めた、あらゆる割り込み処理に対してレベルを決めるレジスタが用意されていて、
割り込みのレベル>IPL
を満たさないものは割り込み処理が実行されない。
IPLは、例えば以下の処理を実行すると変更できる。
//IPLを3に変更
asm("LDIPL #3") ;
割り込み時に実行される関数定義については、''#pragma interrupt'' によって定義する。関数名は任意。
(vect=○○)というのは、 ''割り込みベクタ番号'' を与えている。すべての割り込み処理に対して一意の値があり、これによって何の割り込み処理のための関数であるかを認識させるっぽい。
ちなみに、TimerRCのSoftware Interrupt Numberは ''7'' 。
#pragma interrupt _timer_rc(vect=7)
void _timer_rc(void);
▼ソース
#ref(./upload/100423timer_rc.c)
*2010-04-23-サンプルコード [#ke6b18f5]
とりあえずリンク
[[R8C/2Dシリーズのサンプルコード集:http://japan.renesas.com/products/mpumcu/r8c/r8c2x/r8c2d/Application_Notes.jsp?event=resetFunctions&logo=0&productName=R8C%2F2D+%C3%A3%C2%82%C2%B0%C3%A3%C2%83%C2%AB%C3%A3%C2%83%C2%BC%C3%A3%C2%83%C2%97®ion=jp&hiddenFunctionsKey=41&hiddenProductsId=2125&sort=&pageNo=1&redirectEvent=resetFunctions&documentUrl=http%3A%2F%2Fjapan.renesas.com%2Fproducts%2Fmpumcu%2Fr8c%2Fr8c2x%2Fr8c2d%2FApplication_Notes.jsp&x=18&y=11]]
*2010-04-23-感想とか [#a65ffe58]
とりあえず、R8Cのマニュアルはとっても分かりにくいと言うことが分かった!
網羅的に記述してあるけど、とりあえず動かすにはどうすればいいのかっていうのが全然理解できない。
このままではLEDをチカチカさせることもままならない!!
*2010-04-22-タイマを使用する_02 [#w297d5da]
PWM波形が出た!!っと言ってもほとんどサンプル通りですが。。
''msttrc''というレジスタがあることを完全に見落としていたため、
かなり足止めを食らいました。
以下ソースです。
▼ソース
#ref(./upload/100421timer_rc.c)
#include "sfr_r82D.h"
void timer_rc_init(void); //Initial setting of Timer RC SFR
void main(void)
{
//-----------------------------------------------------------------------
// 外部水晶発振子20MHz 使用
//-----------------------------------------------------------------------
asm("FCLR I"); // 割り込み処理禁止
prc0 = 1; // cm0,cm1,ocd,har0,har1,har2 書き込み許可
cm13 = 1; // cm1_addr(0007h) bit3 P4-6,7 X'tal
cm05 = 0; // cm0_addr(0006h) bit5 X'tal 発振
cm06 = 0; // cm0_addr(0006h) bit6 cm16,cm17 有効
asm("NOP"); // 発振が安定するまで待つ
asm("NOP"); // 発振が安定するまで待つ
asm("NOP"); // 発振が安定するまで待つ
asm("NOP"); // 発振が安定するまで待つ
ocd2 = 0; // ocd_addr(000Ch) bit3 メインクロック選択
prc0 = 0; // cm0,cm1,ocd,har0,har1,har2 書き込み禁止
//asm("FSET I"); // 割り込み処理許可
//-----------------------------------------------------------------------
// LED Port を設定する
//-----------------------------------------------------------------------
pd2 = 0xff; // ポートP2 出力モードに設定
//-----------------------------------------------------------------------
// Timer Port を設定する
//-----------------------------------------------------------------------
//pd5 = 0xff;
//-----------------------------------------------------------------------
// Initialize SFR of Timer RC
//-----------------------------------------------------------------------
timer_rc_init();
//-----------------------------------------------------------------------
// Main
//-----------------------------------------------------------------------
while(1){
}
}
/************************************************************************************/
/* Name: timer_rc_init
/* Parameters: None
/* Returns: None
/* Description: Initial setting of Timer RC SFR
/************************************************************************************/
void timer_rc_init(void){
// timer RC enable
msttrc = 1;
// timer on/off
tstart_trcmr = 0; // Stop TRC Count
trcic = 0x00; // Interrupt disabled
// pwm mode setup
pwmb_trcmr = 1; // TRCIOB PWM mode selection bit:PWM mode
pwmc_trcmr = 1; // TRCIOC PWM mode selection bit:PWM mode
pwmd_trcmr = 1; // TRCIOD PWM mode selection bit:PWM mode
pwm2_trcmr = 1; // PWM2 mode selection bit:PWM mode
bfc_trcmr = 0; // TRCGRC:General register
bfd_trcmr = 0; // TRCGRD:General register
// active lebel setup
tob_trccr1 = 0; // TRDIOB output level:"H" active
toc_trccr1 = 0; // TRDIOC output level:"H" active
tod_trccr1 = 0; // TRDIOD output level:"H" active
// pin output enable
eb_trcoer = 0; // TRCIOB Pin Output enable
ec_trcoer = 0; // TRCIOC Pin Output enable
ed_trcoer = 0; // TRCIOD Pin Output enable
pto_trcoer = 0; // INT0 of Pulse output forced cutoff input disabled
// count source clk setup
tck0_trccr1 = 0; // Count Source Selection Bit:f1("000")
tck1_trccr1 = 0; // f1 20MHz
tck2_trccr1 = 0;
cclr_trccr1 = 1; // The TRC register clear at the compare match with TRCGRA
// count value setup
trc = 0; // The Count value of TRC is initialized to "0"
trcgra = 4000 - 1; // 25ns * 4000 = 100us
trcgrb = 1000 - 1; // 25ns * 1000 = 25us
trcgrc = 2000 - 1; // 25ns * 2000 = 50us
trcgrd = 3000 - 1; // 25ns * 3000 = 75us
trcier = 0x00; // Disable interrupts ,ovie/imied/imiec/imieb/imiea
tstart_trcmr = 1; // Start TRC Count
}
▼PWM波形
#ref(./upload/2010-04-23-pwmwave.jpg,,,50%)
*2010-04-22-タイマを使用する_01 [#w297d5da]
R8Cでタイマをセットアップするまで、面倒な設定が多すぎるorz
タイマのカウント用CLKやPWMモードやら、柔軟な設計ができるのはいいけど、
いちいち設定すべきレジスタが代わるのがめんどくさい。
レジスタの名前も覚えにくい。。
*2010-04-21-HEW新規ワークスペース生成 [#e87e6851]
HEW,High-performance Embedded Workshopは開発環境の名前。
プロジェクト生成後、マイコンのSFR(Special Function Resistor)を制御しやすくするため、ヘッダファイルを別途ディレクトリにコピーする必要がある。以下の中にある ''sfr_r82d.h'' というファイル。
C:\Program Files\Renesas\Hew\System\Pg\Renesas\M16C\V5_42_0\Generate\sfr\R8C\R8C2C_2D
このヘッダファイルの一番上の行に、なぜか日付が書いてあり、これがあるとコンパイルできないので消す。
*2010-04-21-R8C/2Dマイコン開発セット [#z683d27e]
[[kanou]]さんに相談して、これを買ってみました。
http://akizukidenshi.com/catalog/g/gK-03018/
早速LCDモジュールの半田付けをミスりましたorz