Difference between revisions of "Hardware/Serial Interface"
< Hardware
Jump to navigation
Jump to search
(started c'n'p info from yagcd) |
|||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
− | + | {{Infobox MMIO | |
− | == | + | | ppc = Full |
− | === | + | | arm = Full{{check}} |
− | + | | base = 0x0d806400 | |
− | [[ | + | | len = 0x100 |
+ | | bits = 32 | ||
+ | | ppcirq = 3 | ||
+ | }} | ||
+ | {{hwstub}} | ||
+ | {{yagcd}} | ||
+ | |||
+ | The Serial Interface is used to talk to the 4 GameCube controllers ("joypads"). | ||
+ | |||
+ | == Registers == | ||
+ | {{reg32 | SIC0OUTBUF | addr = 0xCD006400 | hifields = 2 | lofields = 2 | | ||
+ | |8| 8 | | ||
+ | |U | R/W | | ||
+ | | | CMD || | ||
+ | |8 | 8 | | ||
+ | |R/W | R/W | | ||
+ | | OUTPUT0 | OUTPUT1 | | ||
+ | |}} | ||
+ | {{reg32 | SIC1OUTBUF | addr = 0xCD00640c | hifields = 2 | lofields = 2 | | ||
+ | |8| 8 | | ||
+ | |U | R/W | | ||
+ | | | CMD || | ||
+ | |8 | 8 | | ||
+ | |R/W | R/W | | ||
+ | | OUTPUT0 | OUTPUT1 | | ||
+ | |}} | ||
+ | {{reg32 | SIC2OUTBUF | addr = 0xCD006418 | hifields = 2 | lofields = 2 | | ||
+ | |8| 8 | | ||
+ | |U | R/W | | ||
+ | | | CMD || | ||
+ | |8 | 8 | | ||
+ | |R/W | R/W | | ||
+ | | OUTPUT0 | OUTPUT1 | | ||
+ | |}} | ||
+ | {{reg32 | SIC3OUTBUF | addr = 0xCD006424 | hifields = 2 | lofields = 2 | | ||
+ | |8| 8 | | ||
+ | |U | R/W | | ||
+ | | | CMD || | ||
+ | |8 | 8 | | ||
+ | |R/W | R/W | | ||
+ | | OUTPUT0 | OUTPUT1 | | ||
+ | |}} | ||
+ | |||
+ | These registers are double buffered, so main processor writes to the SICxOUTBUF will not interfere with the serial interface output transfer. Internally, a second buffer is used to hold the output data to be transferred across the serial interface. To check if SICxOUTBUF has been transferred to the second buffer, main processor polls the SISR[WRST0] register. When SICxOUTBUF is transferred, SISR[WRST0] is cleared. | ||
+ | |||
+ | {{regdesc | ||
+ | |CMD|This byte is the opcode for the command sent to the controller during each command/response packet. This is the first data byte sent from the SI I/F to the game controller in the command/response packet. | ||
+ | | OUTPUT0 |This is the first data byte of the command packet. It is the second data byte sent from the SI I/F to the game controller in the command/response packet. | ||
+ | | OUTPUT1 |This is the second data byte of the command packet. It is the third data byte sent from the SI I/F to the game controller in the command/response packet. | ||
+ | }} |
Latest revision as of 07:25, 17 November 2009
Serial Interface | |
Access | |
---|---|
Broadway | Full |
Starlet | Full[check] |
Registers | |
Base | 0x0d806400 |
Length | 0x100 |
Access size | 32 bits |
Byte order | Big Endian |
IRQs | |
Broadway | 3 |
This Hardware-related article is a stub. You can help WiiBrew by expanding it. |
This article may be improved with information from Yet Another GameCube Documentation. You can help WiiBrew by expanding this article with the information and wikifying it. |
The Serial Interface is used to talk to the 4 GameCube controllers ("joypads").
Registers
SIC0OUTBUF (0xCD006400) | ||||||||||||||||
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | |
Access | U | R/W | ||||||||||||||
Field | CMD | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Access | R/W | R/W | ||||||||||||||
Field | OUTPUT0 | OUTPUT1 |
SIC1OUTBUF (0xCD00640c) | ||||||||||||||||
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | |
Access | U | R/W | ||||||||||||||
Field | CMD | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Access | R/W | R/W | ||||||||||||||
Field | OUTPUT0 | OUTPUT1 |
SIC2OUTBUF (0xCD006418) | ||||||||||||||||
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | |
Access | U | R/W | ||||||||||||||
Field | CMD | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Access | R/W | R/W | ||||||||||||||
Field | OUTPUT0 | OUTPUT1 |
SIC3OUTBUF (0xCD006424) | ||||||||||||||||
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | |
Access | U | R/W | ||||||||||||||
Field | CMD | |||||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Access | R/W | R/W | ||||||||||||||
Field | OUTPUT0 | OUTPUT1 |
These registers are double buffered, so main processor writes to the SICxOUTBUF will not interfere with the serial interface output transfer. Internally, a second buffer is used to hold the output data to be transferred across the serial interface. To check if SICxOUTBUF has been transferred to the second buffer, main processor polls the SISR[WRST0] register. When SICxOUTBUF is transferred, SISR[WRST0] is cleared.
Field | Description |
CMD | This byte is the opcode for the command sent to the controller during each command/response packet. This is the first data byte sent from the SI I/F to the game controller in the command/response packet. |
OUTPUT0 | This is the first data byte of the command packet. It is the second data byte sent from the SI I/F to the game controller in the command/response packet. |
OUTPUT1 | This is the second data byte of the command packet. It is the third data byte sent from the SI I/F to the game controller in the command/response packet. |