ntr_bootrom/trunk/IrisSubp/include/private/IrisSioDefine.h

133 lines
4.9 KiB
C

//======================================================================
// 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 <IrisSubpTarget.h>
// ノーマル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