Apr20th

RX621のページ

Top / RX621のページ

AKI-RX62


1. インストール、書き込み

USBでプログラム書き込み

1. スイッチを左から1101(上上下上)に。
2. PCと基板をUSBケーブルでつなぐ。
3. スイッチon
デバイスマネージャを見てGeneric USB Hubじゃなければ(Renesasなんちゃらだったら)以下を参考に。
http://documentation.renesas.com/doc/products/tool/doc/r20ut0648jj0100_fdt_usbudt.pdf
4. Renesas Flash Programmerから書き込み

2. プロジェクトの作成後にやること

1. プロジェクト作る。
2. resteprg.cの設定
extern void HardwareSetup(void); と
HardwareSetup(); を有効に
3. HarwareSetupの記述。マイコンリセット後真っ先にやらなければならない、クロックの設定やIOポートの設定を行う。
関数自体はどのファイルに記述してもおっけー。

void HardwareSetup(void)
{
    // クロックの設定
    SYSTEM.SCKCR.LONG = 0x00020100;     //PCLK=12*4MHz, BCLK=12*2MHz, ICLK=12*8MHz
    
    // 周辺モジュール有効化
    MSTP(SCI1) = 0; // SCI1モジュール有効化 	
    
    // ポート入出力設定
    initIO(); 
}

3. ポートの設定

まずはLチカ。

【入出力方向の設定】

データディレクションレジスタ

1で出力, 0で入力
設定例 :

PORTA.DDR.BIT.B0 = 1;	//PA0を出力に設定。
PORTB.DDR.BYTE = 0xFE;	//PB0を入力、残りを出力に設定。

【出力として使う】

データレジスタ

・ポートの出力値を設定
設定例 :

PORTA.DR.BIT.B0 = 1;	//PA0からHighを出力。

オープンドレインコントロールレジスタ

出力をオープンドレインにしたいときに1にする。
P0, P1, P2, P3, PCがオープンドレイン出力対応。
設定例 :

PORT2.ODR.BIT.B0 = 1;	//P20をオープンドレインに

【入力として使う】

入力バッファコントロールレジスタ

入力ポートとして使う際には入力バッファを有効にする。
設定例 :

PORTA.ICR.BIT.B0 = 1;	//PA0の入力バッファ有効

ポートレジスタ

ポートの状態を読む
設定例 :

porta = PORTA.PORT.BIT.B0;	//PA0の値をportaに読む

プルアップ抵抗コントロールレジスタ

内部でプルアップしたいときに1にする。
PA, PB, PC, PD, PEがプルアップ対応。
設定例 :

PORTA.PCR.BIT.B0 = 1;	//PA0プルアップ有効

4. 割り込み関係設定

・割り込み時に飛んで行く関数は vect.h で設定する。
例: CMT0とCMT1のコンペアマッチ割り込みの設定

// CMT0 CMI0
#pragma interrupt (Excep_CMT0_CMI0(vect=28))
void Excep_CMT0_CMI0(void);
// CMT1 CMI1
#pragma interrupt (Excep_CMT1_CMI1(vect=29))
void Excep_CMT1_CMI1(void);

vect=28の割り込みベクタの設定は、ハードウェアマニュアルのベクタテーブルの項を参照。
vext = VECT(CMT0, CMI0)でも可。

・割り込み先の関数はこんな感じで、#pragma ~~と書いてその下にズラッと記述していく。

#pragma section IntPRG
void Excep_CMT0_CMI0(void){
 // 処理内容
}
void Excep_CMT1_CMI1(void){
 // 処理内容
}

vecttbl.c 内のFixed_Vectors内で設定されている割り込み関数に関しても、
vect.hに宣言を, intprg.c等に関数の実体を記述しておく。

→HEWなりCubeSuite+なりでプロジェクトを作成した場合、すべての割り込みが設定された状態で生成されるのであまり気にしなくてもいいかも。
割り込み先の関数は intprg.c 内にズラっと書いてある。

5. IRQ

スイッチ入力をIRQの割込でやる例。
P33とP34にスイッチを接続してます。

void initIrqSwitch(void){

	PORT3.ICR.BIT.B3 = 1;			// P33 入力バッファ有効
	PORT3.DDR.BIT.B3 = 0;			// P33 入力
	PORT3.ICR.BIT.B4 = 1;			// P34 入力バッファ有効
	PORT3.DDR.BIT.B4 = 0;			// P34 入力
	
	
	ICU.IRQCR[3].BIT.IRQMD = 2;		//立ち上がりエッジで割込
	ICU.IRQCR[4].BIT.IRQMD = 2;		//立ち上がりエッジで割込
	
	
	//割込ステータスクリア
	IR(ICU,IRQ3) = 0;				//ICU.IR
	IR(ICU,IRQ4) = 0;
	
	// 割込優先度
	IPR(ICU,IRQ3) = 2;				//ICU.IPR
	IPR(ICU,IRQ4) = 2;
	
	// IRQ割込許可
	IEN(ICU, IRQ3) = 1;				//ICU.IER
	IEN(ICU, IRQ4) = 1;

}

intprg.c内に以下のように書いておけば、スイッチをおした時にそれぞれの処理が実行されます。

//ICU IRQ3
void Excep_ICU_IRQ3(void){ offLED3(); }
//ICU IRQ4
void Excep_ICU_IRQ4(void){ onLED3(); }

onLED3(), offLED3()はそれぞれLEDをオン/オフする関数。

6. DMA

DMA起動要因に設定された割込は、通常の割込関数には飛ばないっぽい
→DMCSLで設定可能

IRQは0~3が起動要因として使える。

シリアル通信に適用した場合、ちょっと送ってちょっと処理しての繰り返しだとめっちゃ遅い(´・ω・`)