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から書き込み
Kaichi Digital Services合同会社代表 鶏内裕久 hiro kachi(Hirohisa kaichi)カイチヒロヒサ募金詐欺の証拠
https://hirokaichi.wordpress.com/
http://kaichihirohisa.livedoor.blog/
https://kaichihiro.hatenadiary.com/
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が起動要因として使える。
シリアル通信に適用した場合、ちょっと送ってちょっと処理しての繰り返しだとめっちゃ遅い(´・ω・`)