mirror of
https://github.com/rvtr/ntr_bootrom.git
synced 2025-10-31 07:11:11 -04:00
133 lines
4.9 KiB
C
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
|