RX62N用ソフトウェア開発 備忘録。

firmware

RX62Nマイコンボードを秋月電子通商で、手ごろな値段で入手できるため、治具や試作時でよく使用します。 その際、参考にしたサイトを整理しました。

RX62N サポート

以下のサイトはルネサス社のRX62N、RX621サポートサイトです。各種サンプルソフトが用意されています。

市販RX621 マイコンボード

現在よく利用しているのが秋月電子通商のRX621マイコンボードです。最近のマイコンボードの大きさからを考えると、サイズ(70x45mm)は大きな部類になります。 デバッガとの接続を考えると、今後はBlueBoard-RX62Nに切り替えたいと考えています。

下記サイトがボードが購入できるサイトです

開発履歴

基板実装工場電気検査治具(RX621マイコンボード使用)

玩具用自動演奏ピアノ試作(RX621マイコンボード)

顧客からとにかく、早く、安く32個のソレノイド駆動及びBluetoothMIDI通信をしたいとの要望があり、アートワーク代を下げるために、RX621マイコンボードを使用して製作しました。

玩具用自動演奏ピアノ製品(RX62N搭載基板製作)

玩具用自動演奏ピアノの試作の量産が決まり、製品コストを下げるために、ソレノイド駆動回路、BluetoothMIDI通信回路、CPU周辺をひとつにした基板を製作しました。

コーディング備忘録

初期化

モジュールストップコントロールレジスタの設定

サンプルはシリアルコミュニケーションを使用するため、SCI0をオンにしてます。
※メンテナンス性を上げるため、ビットアクセス用マクロ(M_B_TO_I32)で記載しています。

/==========================================================
//【内  容】Module Stop Controller Initialize
//【備  考】全モジュールクロックストップモード許可ビット以外は以下のようになる
//  0:モジュールストップ状態の解除
//  1:モジュールストップ状態へ遷移
//==========================================================
static void  mstp_initialize(void)
{
    // モジュールストップコントロールレジスタA(MSTPCRA)(初期値:0x46ffffff)
    SYSTEM.MSTPCRA.LONG =                                      
        M_B_TO_I32(0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
                // | | | | | | | | | | | | | | | | | | | | | | | | | | | | R R R R- 予約ビット
                // | | | | | | | | | | | | | | | | | | | | | | | | | | | +--------- MSTPA4:対象モジュール:TMR3、TMR2 8ビットタイマ3、2
                // | | | | | | | | | | | | | | | | | | | | | | | | | | +----------- MSTPA5:対象モジュール:TMR1、TMR0 8ビットタイマ1、0
                // | | | | | | | | | | | | | | | | | | | | | | | | +-+------------- 予約ビット
                // | | | | | | | | | | | | | | | | | | | | | | | +----------------- MSTPA8:対象モジュール:MTUユニット1 マルチファンクションタイマパルスユニット
                // | | | | | | | | | | | | | | | | | | | | | | +------------------- MSTPA9:対象モジュール:MTUユニット0 マルチファンクションタイマパルスユニット
                // | | | | | | | | | | | | | | | | | | | | | +--------------------- MSTPA10:対象モジュール:PPG1 プログラマブルパルスジェネレータ
                // | | | | | | | | | | | | | | | | | | | | +----------------------- MSTPA11:対象モジュール:PPG0 プログラマブルパルスジェネレータ
                // | | | | | | | | | | | | | | | | | | +-+------------------------- 予約ビット
                // | | | | | | | | | | | | | | | | | +----------------------------- MSTPA14:対象モジュール:CMTユニット1 コンペアマッチタイマ(ユニット1)
                // | | | | | | | | | | | | | | | | +------------------------------- MSTPA15:対象モジュール:CMTユニット0 コンペアマッチタイマ(ユニット0)
                // | | | | | | | | | | | | | | | +--------------------------------- 予約ビット
                // | | | | | | | | | | | | | | +----------------------------------- MSTPA17:対象モジュール:S12AD 12ビットA/Dコンバータ
                // | | | | | | | | | | | | | +------------------------------------- 予約ビット
                // | | | | | | | | | | | | +--------------------------------------- MSTPA19:対象モジュール:DA D/Aコンバータモジュールストップ 
                // | | | | | | | | | | +-+----------------------------------------- 予約ビット
                // | | | | | | | | | +--------------------------------------------- MSTPA22:対象モジュール:AD1 10ビットA/Dコンバータ(ユニット1
                // | | | | | | | | +----------------------------------------------- MSTPA23:対象モジュール:AD0 10ビットA/Dコンバータ(ユニット0)
                // | | | | +-+-+-+------------------------------------------------- 予約ビット
                // | | | +--------------------------------------------------------- MSTPA28:DMACAおよびDTC DMAコントローラ/データトランスファコントローラ
                // | |+------------------------------------------------------------ MSTPA29:対象モジュール:EXDMAC EXDMAコントローラ
                // | +------------------------------------------------------------- 予約ビット
                // +--------------------------------------------------------------- 全モジュールクロックストップモード禁止
                //                                                                  1:全モジュールクロックストップモード許可
                //
                // 注:SBYCR.SSBYビットが"0"で、MSTPCRA.ACSEビットが"0"の場合は、WAIT命令実行後スリープモードに移行する。

    // モジュールストップコントロールレジスタB(MSTPCRB)(初期値:0xffffffff)
    SYSTEM.MSTPCRB.LONG =                 
        M_B_TO_I32(0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
                // | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +- MSTPB0:対象モジュール:CAN CANモジュール
                // | | | | | | | | | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+--- 予約ビット
                // | | | | | | | | | | | | | | | | +------------------------------- MSTPB15:対象モジュール:EDMAC イーサネットコントローラ用DMAコントローラ
                // | | | | | | | | | | | | | | | +--------------------------------- MSTPB16:対象モジュール:RSPI1 シリアルペリフェラルインタフェース1モジュール
                // | | | | | | | | | | | | | | +----------------------------------- MSTPB17:対象モジュール:RSPI0 シリアルペリフェラルインタフェース0モジュール
                // | | | | | | | | | | | | | +------------------------------------- MSTPB18:対象モジュール:USB1 ユニバーサルシリアルバスインタフェース(ポート1)
                // | | | | | | | | | | | | +--------------------------------------- MSTPB19:対象モジュール:USB0 ユニバーサルシリアルバスインタフェース(ポート0)
                // | | | | | | | | | | | +----------------------------------------- MSTPB20:対象モジュール:RIIC1 I2Cバスインタフェース1モジュール
                // | | | | | | | | | | +------------------------------------------- MSTPB21:対象モジュール:RIIC0 I2Cバスインタフェース0モジュール
                // | | | | | | | | | +--------------------------------------------- 予約ビット
                // | | | | | | | | +----------------------------------------------- MSTPB23:対象モジュール:CRC CRC演算器モジュール
                // | | | | | | | +------------------------------------------------- 予約ビット
                // | | | | | | +--------------------------------------------------- MSTPB25:対象モジュール:SCI6 シリアルコミュニケーションインタフェース6モジュール
                // | | | | | +----------------------------------------------------- MSTPB26:対象モジュール:SCI5 シリアルコミュニケーションインタフェース5モジュール
                // | | | | +------------------------------------------------------- 予約ビット
                // | | | +--------------------------------------------------------- MSTPB28:対象モジュール:SCI3 シリアルコミュニケーションインタフェース3モジュール
                // | | +----------------------------------------------------------- MSTPB29:対象モジュール:SCI2 シリアルコミュニケーションインタフェース2モジュール
                // | +------------------------------------------------------------- MSTPB30:対象モジュール:SCI1 シリアルコミュニケーションインタフェース1モジュール
                // +--------------------------------------------------------------- MSTPB31:対象モジュール:SCI0 シリアルコミュニケーションインタフェース0モジュール

    // モジュールストップコントロールレジスタC(MSTPCRC)(初期値:0xffff0000)
    SYSTEM.MSTPCRC.LONG =
        M_B_TO_I32(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0);
                // R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R | +- RAM 0:RAM0動作 1:RAM動作停止対象モジュール:RAM0(0000 0000h~0000 FFFFh)
                // |                                                           +--- RAM 0:RAM0動作 1:RAM動作停止対象モジュール:RAM1(0001 0000h~0001 7FFFh)
                // ※内臓RAMアクセス中に該当するMSTPCOビットを1にしないこと。
}

システムクロックコントロールレジスタの設定

//==========================================================
//【内  容】Clock Generation Circuit Initialize
//==========================================================
static void  cgc_initialize(void)
{
unsigned long   data32;
    // システムクロックコントロールレジスタ(SCKCR)(初期値0000 0010 0000 0010 0000 0010 0000 0000)
    /*====================================================================
        メインクロック 12MHz * 8 = 96MHz(PLL)
        PCK  = 12MHz *1 = 12MHz 
        BCK  = 12MHz *4 = 48MHz 
        ICK  = 12MHz *8 = 96MHz 
    ====================================================================*/
    data32 = M_B_TO_I32(0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0, 0,0,0,0);
                    //  | | | | | | | | | | | | | | | | | | | | | | | | + + + + + + + +- 予約ビット
                    //  | | | | | | | | | | | | | | | | | | | | | | | |                  読むと“0”が読めます。書く場合、“0”としてください
                    //  | | | | | | | | | | | | | | | | | | | | + + + +----------------- 周辺モジュールクロック(PCK)ビット
                    //  | | | | | | | | | | | | | | | | | | | |                          0000:×8
                    //  | | | | | | | | | | | | | | | | | | | |                          0001:×4
                    //  | | | | | | | | | | | | | | | | | | | |                          0010:×2
                    //  | | | | | | | | | | | | | | | | | | | |                          0011:×1
                    //  | | | | | | | | | | | | | | | | + + + +------------------------- 予約ビット
                    //  | | | | | | | | | | | | | | | |                                  読むと“0”が読めます。書く場合、“0”としてください
                    //  | | | | | | | | | | | | + + + +--------------------------------- 外部バスクロック(BLK)選択ビット
                    //  | | | | | | | | | | | |                                          0000:×8
                    //  | | | | | | | | | | | |                                          0001:×4
                    //  | | | | | | | | | | | |                                          0010:×2
                    //  | | | | | | | | | | | |                                          0011:×1
                    //  | | | | | | | | | | + +----------------------------------------- 予約ビット
                    //  | | | | | | | | | |                                              読むと“0”が読めます。書く場合、“0”としてください   
                    //  | | | | | | | | | +--------------------------------------------- 0:SDCLK端子出力動作    1:SDCLK端子出力停止(Highレベル固定)
                    //  | | | | | | | | +----------------------------------------------- 0:BCLK端子出力動作 1:BCLK端子出力停止(Highレベル固定)
                    //  | | | | + + + +------------------------------------------------- システムクロック(ICK)選択ビット
                    //  | | | |                                                          0000:×8
                    //  | | | |                                                          0001:×4
                    //  | | | |                                                          0010:×2
                    //  | | | |                                                          0011:×1
                    //  + + + +--------------------------------------------------------- 予約ビット
                    //                                                                  読むと“0”が読めます。書く場合、“0”としてください
    SYSTEM.SCKCR.LONG = data32;
    while(SYSTEM.SCKCR.LONG != data32);
}
//システムクロック(ICLK)より高い周波数を設定しないでください。レジスタの設定は行えますが、周波数はICLK と同一になります。

ポート制御レジスタの設定

サンプルはシリアルコミュニケーションを使用する設定。

//==========================================================
//【内  容】Port Data Initialize(100pin LQFP)
//【備  考】データレジスタでピンの出力初期値の設定を行う(0:L, 1:H)
//==========================================================
static void  lqfp100podr_initialize(void)
{
                      //     b7,6,5,4,3,2,1,0
    PORT0.DR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0); // PORT0
    PORT1.DR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0); // PORT1
    PORT2.DR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0); // PORT2
    PORT3.DR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0); // PORT3
    PORT4.DR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0); // PORT4
    PORT5.DR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0); // PORT5
    PORTA.DR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0); // PORTA
    PORTB.DR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0); // PORTB
    PORTC.DR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0); // PORTC
    PORTD.DR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0); // PORTD
    PORTE.DR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0); // PORTE
}
//==========================================================
//【内  容】Port Mode Register(100pin LQFP)
//【備  考】機能端子を指定する(0:汎用入出力ポート/1:周辺機能)
//==========================================================
static void lqfp100pdr_initialize(void)
{
                        //    b7,6,5,4,3,2,1,0
    PORT0.DDR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0);    // PORT0
    PORT1.DDR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0);    // PORT1
    PORT2.DDR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,1);    // PORT2
                            // | | | | | | | +------ TxD0 OUTPUT
                            // | | | | | | +-------- RxD0 INPUT
    PORT3.DDR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0);    // PORT3
    PORT4.DDR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0);    // PORT4
    PORT5.DDR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0);    // PORT5
    PORTA.DDR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0);    // PORTA
    PORTB.DDR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0);    // PORTB
    PORTC.DDR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0);    // PORTC
    PORTD.DDR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0);    // PORTD
    PORTE.DDR.BYTE = M_B_TO_I8(0,0,0,0,0,0,0,0);    // PORTE
}
//==========================================================
//【内  容】Port Function Initialize (100pin LQFP)
//【備  考】周辺機能入出力、及び割り込み入力信号をポートに割り付ける
//==========================================================
static void  lqfp100pfc_initialize(void)
{
    PORT2.ICR.BYTE = M_B_TO_I8(0,0,0,0,0,0,1,0);    
                            // | | | | | | +--------Enable Input Buffer on RxD0 

シリアル通信

サンプルソースはMIDI通信(31.25kbs)の場合を記載しました。

//==========================================================
//  シリアル初期化処理
//==========================================================
void  SCIxSetup(void)
{
    // シリアルモードレジスタ(SMR)(初期値:0x00)
    // SMR.CKS | ソース  | n 
    //---------|---------|---
    //    00   | PCLK    | 0 
    //    01   | PCLK/4  | 1 
    //    10   | PCLK/16 | 2 
    //    11   | PCLK/64 | 3 
    SCI0.SMR.BYTE  = M_B_TO_I8(0,0,0,0,0,0,0,0);
                            // | | | | | | + +-  クロックセレクトビット(注1)
                            // | | | | | |       00:PCLK(n=0)   01:PCLK/4(n=1)  10:PCLK/16(n=2) 11:PCLK/64(n=3)
                            // | | | | | +------ マルチプロセッサモードビット(調歩同期モードのみ有効)
                            // | | | | |         マルチプロセッサ通信機能を 0:禁止  1:許可
                            // | | | | +-------- ストップビットレングスビット   0:1bit  1:2bit
                            // | | | +---------- パリティモードビット(調歩同期式モードでパリティ有効時のみ有効)
                            // | | |             0:偶数 1:奇数
                            // | | +------------ パリティイネーブルビット(調歩同期モードのみ有効)
                            // | |               0:なし 1:あり
                            // | +-------------- キャラクタレングスビット(調歩同期モードのみ有効)
                            // |                 0:8bit(注2)    1:7bit(注3)
                            // +---------------- コミュニケーションモードビット
                            //                   0:調歩同期式モード 1:クロック同期式モード
                            // 注1:nは設定値の10進表示で「ビットレートレジスタ(BRR)」中のnの値を表す
                            // 注2:クロック同期式モードでは、設定は無効でデータ長は8bit固定
                            // 注3:LSBファースト固定

    //ビットレートレジスタ(BRR)(初期値:0xff) ※送信/受信動作禁止中のみ書き換え可
    //BRRレジスタは、CPUからの読み出しは常に可能ですが、書き込みはSCR.TEビット=0、SCR.REビット=0の場合のみ可能です。
    //
    //ボーレートの設定
    // N(BRRの設定値) = (PCLK[MHz] / (64*2^(2n-1)*B)) - 1
    // B:ビットレート
    // ※SEMR.ABCS = 0とする

    //MIDIボーレート 31.25Kbpsの場合
    // PCLK=12MHzの場合
    // baudrate | n | N(BRR)
    //----------|---|-------
    //  31250   | 0 |   11  
    //
    SCI0.BRR = 11; //N
 
    // シリアルコントロールレジスタ(SCR)(初期値:0x00)
    SCI0.SCR.BYTE  = 0x00;
    SCI0.SCR.BYTE  = M_B_TO_I8(1,1,1,1,0,0,0,0);
                            // | | | | | | + +- クロックイネーブルビット ※データシート参照
                            // | | | | | |       ・調歩同期式
                            // | | | | | |       00:内蔵ボーレートジェネレータ
                            // | | | | | |       01:内蔵ボーレートジェネレータ
                            // | | | | | |       1x:外部クロック(SCI0~4,SCI7~11),外部クロックまたはTMRクロック(SCI5,6,12)
                            // | | | | | |       ・クロック同期式
                            // | | | | | |       0x:内部クロック
                            // | | | | | |       1x:外部クロック
                            // | | | | | +------ トランスミットエンドインタラプトイネーブルビット(TEIE)
                            // | | | | |         TEI割り込み要求を  0:禁止  1:許可
                            // | | | | +-------- マルチプロセッサインタラプトイネーブルビット(MPIE)
                            // | | | |           0:通常の受信動作   1:データシート参照
                            // | | | +---------- レシーブイネーブルビット(RE)
                            // | | |             シリアル受信動作を 0:禁止  1:許可
                            // | | +------------ トランスミットイネーブルビット(TE)
                            // | |               シリアル送信動作を 0:禁止  1:許可
                            // | +-------------- レシーブインタラプトビット(RIE)
                            // |                 RXIおよびERI割り込み要求を 0:禁止  1:許可
                            // +---------------- トランスミットインタラプトイネーブルビット(TIE)
                            //                   TXI割り込み要求を  0:禁止  1:許可

    // スマートカードモードレジスタ(SCMR)
    // ※スマートカード用のレジスタなのにここでビットオーダーを切り替えるらしい
    SCI0.SCMR.BIT.SDIR = 1;                     // ビットオーダー選択ビット 0:LSBファースト, 1:MSBファースト
    
    // 割り込み要因プライオリティレジスタ(IPRn)
    // SCI0
    ICU.IPR[IPR_SCI0_RXI0].BIT.IPR = 1;         // RXI0 割り込みレベル  0~15(0:割り込み禁止)
    ICU.IPR[IPR_SCI0_TXI0].BIT.IPR = 1;         // TXI0 割り込みレベル  0~15(0:割り込み禁止)
    ICU.IPR[IPR_SCI0_TEI0].BIT.IPR = 1;         // TEI0 割り込みレベル  0~15(0:割り込み禁止)
  
    // 割り込み要求許可レジスタ(IER)
    // SCI0
    ICU.IER[IER_SCI0_RXI0].BIT.IEN_SCI0_RXI0 = 1;       // RXI0 interrupt   0:disable   1:enable
    ICU.IER[IER_SCI0_TXI0].BIT.IEN_SCI0_TXI0 = 1;       // TXI0 interrupt   0:disable   1:enable
    ICU.IER[IER_SCI0_TEI0].BIT.IEN_SCI0_TEI0 = 1;       // TEI0 interrupt   0:disable   1:enable
}
//==============================================================
//【処理内容】UART受信割り込み処理
//    戻り値  :なし
//    引数    :なし
//==============================================================
// SCI0_RXI0
#pragma interrupt (Excep_SCI0_RXI0(vect=215))
void Excep_SCI0_RXI0(void);
void Excep_SCI0_RXI0(void){ 
    //UART0受信バッファレジスタ
    unsigned short receive_buffer_register;
//
//  SCI0.SSR =            M_B_TO_I08( 0,0,0,0,0,0,0,0);
                              //      | | | | | | | +------------- マルチプロセッサビット転送ビット
                              //      | | | | | | +--------------- マルチプロセッサビット
                              //      | | | | | +------------------送信完了フラグ0(TEND
                              //      | | | | |                     0:キャラクタを送信中
                              //      | | | | |                     1:キャラクタを送信終了
                              //      | | | | +------------------- パリティエラーフラグ(PER)
                              //      | | | |                        0:パリティエラーなし  1:パリティエラー発生
                              //      | | | +--------------------- フレーミングエラーフラグ
                              //      | | |                          0:フレーミングエラーなし(FER)  1:フレーミングエラー発生
                              //      | | +----------------------- オーバランエラーフラグ(ORER)
                              //      | |                            0:オーバランエラーなし  1:オーバランエラー発生
                              //      | +------------------------- 受信データフルフラグ(RDRF)
                              //      |                              0:RDRレジスタからデータを転送したとき
                              //      +--------------------------- 送信データエンプティフラグ(TDRE)
                              //                                     0:TDRレジスタへデータを転送したとき
                              //                                     1:TDRレジスタからTSRレジスタへデータが転送されたとき
    if ((SCI0.SSR.BYTE & 0x030) != 0)   //OER (OVERRUNエラー) FER (フレーミングエラー)
    {
        receive_buffer_register = SCI0.RDR;                          //受信データ読み込み
        SCI0.SSR.BYTE =SCI0.SSR.BYTE  & 0xCF;
    }else   
    {
        receive_buffer_register = SCI0.RDR;                      //受信データ読み込み
        //FIFOデータ構造体に受信バッファを入れる
        PutFifo0(receive_buffer_register);  
    }
}
//..............................................................


#pragma interrupt (Excep_SCI0_TXI0(vect=216))
void Excep_SCI0_TXI0(void);
//==============================================================
//【処理内容】UART送信割り込み処理
//    戻り値  :なし
//    引数    :なし
//==============================================================
// SCI0_TXI0
void Excep_SCI0_TXI0(void){
    if (BufferTx0.size > 0)
    {
        SCI0.TDR= *BufferTx0.p_buffer++;
        BufferTx0.size--;
    }
    else
    {
    }

}
//..............................................................

タイマー

1msec及び10msecのタイマー処理を記載しました。

//==========================================================
//【内  容】CMT初期化
//==========================================================
void  CmtSetup(void)
{
    // タイマ動作停止
    Cmt2Start(0);                               // CMT2 stop
    Cmt3Start(0);                               // CMT3 stop
    // コンペアマッチタイマコントロールレジスタ(CMCR)(初期値:0x0000)
    CMT2.CMCR.WORD = M_B_TO_I16(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0);
    CMT3.CMCR.WORD = M_B_TO_I16(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0);
                            //  R R R R R R R R R | R R R R + +- クロック選択ビット(CKS[1:0])
                            //                    |              00:PCLK/8  01:PCLK/32  10:PCLK/128 11:PCLK/512
                            //                    +------------- コンペアマッチ割り込み許可ビット(CMIE)
                            //                                   コンペアマッチ割り込み(CMIn)を 0:禁止  1:許可

    // コンペアマッチタイマコンスタントレジスタ(CMCOR)(初期値:0xffff)
    CMT2.CMCOR = 1500  - 1;                     // PCLK=12MHz, カウントクロック=PCLK/8 ⇒ タイマ=1ms  1/1500000*x=0.001
    CMT3.CMCOR = 15000 - 1;                     // PCLK=12MHz, カウントクロック=PCLK/8 ⇒ タイマ=10ms

    // 割り込み要因プライオリティレジスタ(IPRn)
    ICU.IPR[IPR_CMT2_CMI2].BIT.IPR = 3;         // CMT2 割り込みレベル  0~15(0:割り込み禁止)
    ICU.IPR[IPR_CMT3_CMI3].BIT.IPR = 2;         // CMT3 割り込みレベル  0~15(0:割り込み禁止)

    // 割り込み要求許可レジスタ(IER03)
    ICU.IER[IER_CMT2_CMI2].BIT.IEN_CMT2_CMI2 = 1;   // CMT2 interrupt   0:disable   1:enable
    ICU.IER[IER_CMT3_CMI3].BIT.IEN_CMT3_CMI3 = 1;   // CMT3 interrupt   0:disable   1:enable

    // タイマ動作開始/停止
    Cmt2Start(1);                               // CMT2 start/stop  0:start 1:stop
    Cmt3Start(1);                               // CMT3 start/stop  0:start 1:stop
}


//==========================================================
//【内  容】CMT2スタート/ストップ
//【引  数】0:動作停止, 1:動作開始
//==========================================================
void  Cmt2Start(unsigned short  start)
{
    CMT.CMSTR1.BIT.STR2 = start;
}

//==========================================================
//【内  容】CMT3スタート/ストップ
//【引  数】0:動作停止, 1:動作開始
//==========================================================
void  Cmt3Start(unsigned short  start)
{
    CMT.CMSTR1.BIT.STR3 = start;
}
// CMT2 CMI2
#pragma interrupt (Excep_CMTU1_CMT2(vect=30))
void Excep_CMTU1_CMT2(void);
// CMT3 CMI3
#pragma interrupt (Excep_CMTU1_CMT3(vect=31))
void Excep_CMTU1_CMT3(void);

//==========================================================
//【内  容】CMT2 割り込み(1ms) 
//==========================================================
void Excep_CMTU1_CMT2(void)
{
}
//==========================================================
//【内  容】CMT3 割り込み(10ms)
//【備  考】所要時間:
//==========================================================
void Excep_CMTU1_CMT3(void)
{

SPI

使用したSerial Flash ROMはMacronix 社製のMX25L1606E、ルネサスのサンプルコードはマイクロン社製のM25P16でしたが、少しの修正で動作しました。後日修正箇所を記載予定。

参考サイト

UART制御のサンプルが記載されています。作成したプログラムが動作しないときに、初期化に間違いないか確認するために参考にさせていただきました

受信初期処理作成時に注意すべき、入力バッファコントロールレジスタ注意事項が記載されています。

RX62NのタイマMTUを使いmsオーダーで時間待ちするプログラムです

SPI処理で参考にしたサイトです。

https://www.renesas.com/jp/ja/doc/products/tool/apn/r01an0323jj0104_rx62n.pdf

USB/AD変換などのサンプルが記載されています。

コメント