//====================================================================== // IrisSioDefine.h // IRIS SIO定数 // // Copyright (C) 2004 NINTENDO Co.,Ltd. //====================================================================== #ifndef _IRIS_SIO_DEFINE_H #define _IRIS_SIO_DEFINE_H #ifdef __cplusplus extern "C" { #endif #include // ノーマルSIOコントロール構造体 typedef struct { u16 sck_i_o:1; // クロックI/O選択 u16 sck:1; // 内部クロック選択 u16 ackRecv:1; // 転送許可フラグ受信 u16 ackSend:1; // 転送許可フラグ送信 u16 dummy_6_4:3; u16 enable:1; // SIO許可 u16 dummy_11_8:4; u16 mode:2; // 通信モード選択 u16 if_enable:1; // 割り込み要求 許可 u16 sck_up:1; // シフトクロック倍速 u8 data; // データ u8 dummy_31_24; } SioNormalCnt; typedef vl SioNormalCnt vSioNormalCnt; //---------------------------------------------------------------------- // シリアル通信はビジーか? //---------------------------------------------------------------------- #define IsSioBusy() \ \ (*(vu16 *)REG_SIOCNT & SIO_ENABLE) //・シリアル通信がビジーかどうかを返します。 //---------------------------------------------------------------------- // シリアル通信は送信許可状態か? //---------------------------------------------------------------------- #define IsSioSendEnable() \ \ (!(*(vu16 *)REG_SIOCNT & SIO_ACK_RECV)) //・シリアル通信が送信許可状態かどうかを返します。 //---------------------------------------------------------------------- // シリアル通信スタート //---------------------------------------------------------------------- #define StartSio() \ \ (*(vu16 *)REG_SIOCNT |= SIO_START) //・シリアル通信を開始します。 //---------------------------------------------------------------------- // シリアル通信終了待ち //---------------------------------------------------------------------- #define WaitSio() \ { \ while (IsSioBusy()) ; \ } //・シリアル通信の終了を待ちます。 //---------------------------------------------------------------------- // レジスタ・アドレス //---------------------------------------------------------------------- #define REG_RCNT (REG_BASE + 0x134) // 汎用入出力コントロール #define REG_SIOCNT (REG_BASE + 0x128) // シリアル通信コントロール #define REG_SIODATA8 (REG_BASE + 0x12a) // 8bitシリアル通信データ #define REG_SIODATA32 (REG_BASE + 0x120) // 32bitシリアル通信データ //---------------------------------------------------------------------- // SIOコントロール //---------------------------------------------------------------------- #define SIO_MODE_MASK 0x3000 // 通信モード #define SIO_BAUD_RATE_MASK 0x0003 // ボーレート #define SIO_ID_NO_MASK 0x0030 // 通信ID #define SIO_MODE_SHIFT 12 #define SIO_BAUD_RATE_SHIFT 0 #define SIO_ID_NO_SHIFT 4 #define SIO_8BIT_MODE 0x0000 // ノーマル8ビット通信モード #define SIO_32BIT_MODE 0x1000 // ノーマル32ビット通信モード #define SIO_SCK_OUT 0x0000 // 外部クロック選択 #define SIO_SCK_IN 0x0001 // 内部クロック選択 #define SIO_IN_SCK_256K 0x0000 // 内部クロック 256KHz選択 #define SIO_IN_SCK_2M 0x0002 // 2MHz選択 #define SIO_ACK_RECV 0x0004 // 転送要求 #define SIO_ACK_SEND 0x0008 // 転送許可 #define SIO_START 0x0080 // 転送スタート #define SIO_ENABLE 0x0080 // SIO許可 #define SIO_IF_ENABLE 0x4000 // 割り込み要求 許可 #define SIO_SCK_UP 0x8000 // シフトクロック倍速 // 構造体メンバ用定数 #define ST_SIO_8BIT_MODE 0 // ノーマル8ビット通信モード #define ST_SIO_32BIT_MODE 1 // ノーマル32ビット通信モード #define ST_SIO_SCK_OUT 0 // 外部クロック選択 #define ST_SIO_SCK_IN 1 // 内部クロック選択 #define ST_SIO_IN_SCK_256K 0 // 内部クロック 256KHz選択 #define ST_SIO_IN_SCK_2M 1 // 2MHz選択 #ifdef __cplusplus } // extern "C" #endif #endif // _IRIS_SIO_DEFINE_H