RX621のバス機能で外付けのMaxVに書込み

RX621のバス機能で外付けのCPLD(MaxV)に書込みしました。
 今の処、外付けのCPLD(MaxV)の中身は、入力したRX621のバス信号をロジックスコープに渡す回路だけです。

●実験の構成と動作結果

 RX621のバス信号をロジックスコープ観測した波形と、構成と、プログラムを下記します。
 説明する事は無いのですが、RX621周辺回路の制御の親切な説明が欲しいと益々思います。



 



 


●実験のプログラム

 HEWで作成したプログラムを下に置きます。

 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

/***********************************************************************/
/* */
/* FILE :Rx621_Cs2Cpld.c */
/* DATE :Sat, Jul 18, 2015 */
/* DESCRIPTION :Main Program */
/* CPU TYPE :RX62N */
/* */
/* This file is generated by Renesas Project Generator (Ver.4.53). */
/* NOTE:THIS IS A TYPICAL EXAMPLE. */
/* */
/***********************************************************************/



//#include "typedefine.h"
#ifdef __cplusplus
//#include <ios> // Remove the comment when you use ios
//_SINT ios_base::Init::init_cnt; // Remove the comment when you use ios
#endif

void main(void);
#ifdef __cplusplus
extern "C" {
void abort(void);
}
#endif

#include "iodefine.h" // Include iodefine.h

// **********************************************
// ********** Global variable definition
unsigned char LedDat[2];

// **********************************************
// ********** Macro definitions

// ***** Ft232H address *****
//?????#define Ft_DatAdrs (void*)(0x06000000) // Ft_RxF address 0600 0000 Cs2
#define Ft_DatAdrs (void*)(0x06000005) // Ft_RxF address 0600 0000 Cs2
#define Ft_RxfAdrs (void*)(0x06000002) // Ft_RxF address 0600 0002 Cs2
#define Ft_TxeAdrs (void*)(0x06000003) // Ft_RxF address 0600 0003 Cs2



// **********************************************
// ********** システムクロック,SPIレジスタ初期設定
void HardwareSetupMain(void)
{

// ********** システムクロック設定 X'tal =12MHz
SYSTEM.SCKCR.LONG = 0x00010100; // システムクロック設定 ICLK=96MHz, BCLK=48MHz, PCLK=48MHz

// ********** LED接続ポート初期設定
PORT0.DR.BYTE = 0xff; // P0データレジスタ(DR)の設定
// (LED1,0(P0_1,P0_0)に消灯データ(0xff)を設定)
PORT0.DDR.BYTE = 0x03; // P0データディレクションレジスタ(DDR)の設定
// (P0_1,P0_0を出力方向)

// ********** BCLK出力ポート初期設定
PORT5.DDR.BIT.B3 = 1; // P53ディレクションレジスタ(DDR)の設定


// ********** 外部バス CS2 初期設定

BSC.CS2CR.WORD = 0x0020; // CS2制御レジスタ設定
//  エンディアンモード:動作モードのエンディアンと同じ
//  外部バス幅:8ビットバス
//  動作許可:動作禁止

BSC.CS2REC.WORD = 0x0404; // CS2リカバリサイクル設定
//  ライトリカバリ:4
//  リードリカバリ:4

BSC.CS2MOD.WORD = 0x0000; // CS2モードレジスタ設定
//  ページリードアクセスモード:ノーマルアクセス互換モード
//  ページライトアクセス許可:ページライトアクセス禁止
//  ページリードアクセス許可:ページリードアクセス禁止
//  外部ウェイト許可:外部ウェイト禁止
//  ライトアクセスモード:バイトストローブ

BSC.CS2WCR1.LONG = 0x04040404; // CS2ウェイト制御レジスタ1設定
//  ノーマルリードサイクルウェイト:4
//  ノーマルライトサイクルウェイト:4
//  ページリードサイクルウェイト:4
//  ページライトサイクルウェイト:4

BSC.CS2WCR2.LONG = 0x44440444; // CS2ウェイト制御レジスタ2設定
//  CSアサートウェイト:4
//  ライトデータ出力ウェイト:4
//  WRアサートウェイト:4
//  RDアサートウェイト:4
//  ライトデータ出力延長サイクル:4
//  ライト時CS延長サイクル:4
//  リード時CS延長サイクル:4

// ********** ポートファンクション(外部バス CS2) 初期設定

IOPORT.PF0CSE.BYTE = 0x06; // ポートファンクションレジスタ0設定
//  CS1とCS2出力許可

IOPORT.PF2CSS.BYTE = 0x14; // ポートファンクションレジスタ2設定
//  P71からCS1#-Bを出力 / P72からCS2#-Bを出力

IOPORT.PF4BUS.BYTE = 0x01; // ポートファンクションレジスタ4設定
//  A9〜A4出力無効、A3〜A0出力有効

IOPORT.PF9IRQ.BYTE = 0x16; // ポートファンクションレジスタ9設定
//  P12/P13/P14をIRQ2/IRQ3/IRQ4入力端子として設定

PORT1.ICR.BYTE = 0x16; //入力バッファコントロールレジスタ設定
//  P12/P13/P14をIRQ2/IRQ3/IRQ4入力端子として設定

// ********** 外部バス有効を設定
SYSTEM.SYSCR0.WORD = 0x5A03; // システムコントロールレジスタ0に外部バス有効を設定

}


// **********************************************
// ******************** main ********************

void main(void)
{
static unsigned char * p_Ft_DatAdrs; // address pointer(Ft_DatAdrs)

unsigned long n; //
unsigned long SpiRxDat; //

LedDat[0] = 1; // LED1=On,LED0=OFF
LedDat[1] = 2; // LED1=OFF,LED0=On

PORT0.DDR.BIT.B1 = 1; // Reverse P01(LED)
PORT0.DDR.BIT.B0 = 1; // Reverse P00(LED)

PORT5.DDR.BIT.B3 = 1; // Reverse P53

HardwareSetupMain(); //システムクロック,SPIレジスタ初期設定

// ********** 外部バス CS2動作許可
BSC.CS2CR.BIT.EXENB = 1; // CS2制御レジスタに動作許可を設定

// p_Ft_DatAdrs = Ft_DatAdrs; // Ft_DatAdrsにアドレス設定

while( 1 )
{
PORT0.DR.BIT.B1 = 0; // Reverse P01(LED)
PORT0.DR.BIT.B0 = 1; // Reverse P00(LED)

p_Ft_DatAdrs = Ft_DatAdrs; // Ft_DatAdrsにアドレス設定

* p_Ft_DatAdrs = 0x55; // Ft_DatAdrsに書込み

// ********** 時間待ち
for(n=0; n<20000000; n++){} //時間待ち


PORT0.DR.BIT.B1 = 1; // Reverse P01(LED)
PORT0.DR.BIT.B0 = 0; // Reverse P00(LED)

p_Ft_DatAdrs = Ft_TxeAdrs; // Ft_DatAdrsにアドレス設定

* p_Ft_DatAdrs = 0xAA; // Ft_DatAdrsに書込み

// ********** 時間待ち
for(n=0; n<20000000; n++){} //時間待ち


}


}

#ifdef __cplusplus
void abort(void)
{

}
#endif





ホームへ戻る