GPIO Registers: Difference between revisions

Gericom (talk | contribs)
Rewrite page
Line 4: Line 4:


{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Old3DS
!  Name
!  Name
!  Address
!  Address
!  Width
!  Width
!  GPIO [[GPIO_Services|bitmasks]] associated with this register
|-
|-
| GPIO_DATA0
| style="background: green" | Yes
| [[#GPIOn_DATA|GPIO1_DATA]]
| 0x10147000
| 0x10147000
| 2
| 1
| 0x1, 0x2, 0x4
|-
| style="background: green" | Yes
| [[#GPIOn_DATA|GPIO2_DATA]]
| 0x10147010
| 1
|-
| style="background: green" | Yes
| [[#GPIOn_DIR|GPIO2_DIR]]
| 0x10147011
| 1
|-
| style="background: green" | Yes
| [[#GPIOn_INTCFG|GPIO2_INTCFG]]
| 0x10147012
| 1
|-
|-
| GPIO_DATA1
| style="background: green" | Yes
| [[#0x10147010|0x10147010]]
| [[#GPIOn_INTEN|GPIO2_INTEN]]
| 4
| 0x10147013
| 0x8, 0x10
| 1
|-
|-
| GPIO_DATA2
| style="background: green" | Yes
| [[#GPIOn_DATA2|GPIO2_DATA2]]
| 0x10147014
| 0x10147014
| 2
| 2
| 0x20
|-
|-
| GPIO_DATA3
| style="background: green" | Yes
| [[#GPIOn_DATA|GPIO3_DATA]]
| 0x10147020
| 0x10147020
| 2
| 2
| 0x40, 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000, 0x10000, 0x20000
|-
|-
| GPIO_DATA3_INTERRUPT_CLEAR
| style="background: green" | Yes
| [[#GPIOn_DIR|GPIO3_DIR]]
| 0x10147022
| 0x10147022
| 2
| 2
| 0x40, 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000, 0x10000, 0x20000
|-
|-
| ??
| style="background: green" | Yes
| [[#GPIOn_INTCFG|GPIO3_INTCFG]]
| 0x10147024
| 0x10147024
| 2
| 2
| 0x40, 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000, 0x10000, 0x20000
|-
|-
| ?
| style="background: green" | Yes
| [[#0x10147026|0x10147026]]
| [[#GPIOn_INTEN|GPIO3_INTEN]]
| 0x10147026
| 2
| 2
| ?
|-
|-
| GPIO_DATA4
| style="background: green" | Yes
| [[#GPIOn_DATA2|GPIO2_DATA2]]
| 0x10147028
| 0x10147028
| 2
| 2
| 0x40000
|-
|}
|}


Line 131: Line 147:
= Descriptions =
= Descriptions =


== 0x10147010 ==
== GPIO ==
=== GPIO pins ===


{| class="wikitable" border="1"
[[GPIO services]] bitmasks use this table, in that order:
!  Bit
!  Description
|-
| 24
| Enable/disable? GPIO interrupt 0x64 (bitmask 0x8)
|-
| 25
| Enable/disable? GPIO interrupt 0x66 (bitmask 0x10)
|}
 
== 0x10147026 ==


{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Bit
!  Bit
!  IRQ ID
!  Description
!  Description
|-
|-
| 0-8
| 0
| ?
| ?
| GPIO1_0 (?)
|-
|-
| 9
| 1
| Enable/disable interrupt 0x71.
| 0x63
| Touch Pen down
|-
|-
| 10-15
| 2
| ?
| 0x60
|}
| Shell closed
 
|-style="border-top: double"
== GPIO_DATA ==
| 0
 
| 0x64
=== GPIO_DATA0 ===
| Headphones inserted
{| class="wikitable" border="1"
!  Bit
!  Description
|-
|-
| 0-2
| 1
| Used for GPIO [[GPIO_Services|bitmask]] 0x7.
| 0x66
| GPIO2_1 (?)
|-style="border-top: double"
| DATA2.0
| -
| GPIO2_DATA2_0 (wifi related?)
|-style="border-top: double"
| 0
| 0x68
| C-stick
|-
|-
| 1
| 1
| DS EXTKEYIN Pen down (0 = touching, 1 = not touching)
| 0x69
| IrDA
|-
| 2
| 0x6A
| Gyro
|-
|-
| 3
| 3
| Unused by GPIO-sysmodule and TwlBg.
| 0x6B
| GPIO3_3 (?)
|-
|-
| 4
| 4
| Only used by [[Bootloader|Boot11]].
| 0x6C
| GPIO3_4 (?)
|-
|-
| 5-15
| 5
| Unused by GPIO-sysmodule and TwlBg.
| 0x6D
| GPIO3_5 (?)
|-
| 6
| 0x6E
| GPIO3_6 (?)
|-
| 7
| 0x6F
| GPIO3_7 (?)
|-
| 8
| 0x70
| GPIO3_8 (?)
|-
| 9
| 0x71
| MCU
|-
| 10
| 0x72
| NFC
|-
| 11
| 0x73
| GPIO3_11 (?)
|-
|-style="border-top: double"
| DATA2.0
| -
| GPIO3_DATA2_0 (wifi related?)
|}
|}


=== GPIO_DATA1 ===
=== GPIOn_DATA ===
Pin values, one bit per pin.
 
=== GPIOn_DIR ===
Pin directions for GPIO2 and GPIO3, one bit per pin.
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
Bit
Value
!  Description
!  Description
|-
|-
| 0-1
| 0
| Used for GPIO [[GPIO_Services|bitmask]] 0x18.
| Input
|-
|-
| 2-31
| 1
| Unused by GPIO-sysmodule and TwlBg.
| Output
|}
|}


=== GPIO_DATA2 ===
=== GPIOn_INTCFG ===
Interrupt configuration for GPIO2 and GPIO3 pins (not the extra ones), one bit per pin.
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
Bit
Value
!  Description
!  Description
|-
|-
| 0
| 0
| Used for GPIO [[GPIO_Services|bitmask]] 0x20.
| Falling edge
|-
|-
| 1-15
| 1
| Unused by GPIO-sysmodule and TwlBg.
| Rising edge
|}
|}


=== GPIO_DATA3 ===
=== GPIOn_INTEN ===
Interrupt enable bits for GPIO2 and GPIO3 pins (not the extra ones), one bit per pin.
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
Bit
Value
!  Description
!  Description
|-
|-
| 0-11
| 0
| Used for GPIO [[GPIO_Services|bitmask]] 0x3FFC0.
| Interrupt disabled
|-
|-
| 12-31
| 1
| Unused by GPIO-sysmodule and TwlBg.
| Interrupt enabled
|}
|}


=== GPIO_DATA4 ===
=== GPIOn_DATA2 ===
Extra pins for GPIO2 and GPIO3 (one bit each). These two pins, in total, are not bound to any IRQ and are not configurable.
 
=== Default values ===
After bootrom initialization, these are the values of the registers:
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
Bit
Address
Description
Value
|-
| 0x10147000
| 0x0003
|-
| 0x10147010
| 0x00000002
|-
| 0x10147014
| 0x0000
|-
| 0x10147020
| 0x00000DFB
|-
|-
| 0
| 0x10147024
| Used for GPIO [[GPIO_Services|bitmask]] 0x40000.
| 0x00000000
|-
|-
| 1-15
| 0x10147028
| Unused by GPIO-sysmodule and TwlBg.
| 0x0000
|}
|}


Line 284: Line 362:
| 15
| 15
| DS SIO SI pin (rtc irq pin)
| DS SIO SI pin (rtc irq pin)
|}
= Default values =
After bootrom initialization, these are the values of the registers:
{| class="wikitable" border="1"
!  Address
!  Value
|-
| 0x10147000
| 0x0003
|-
| 0x10147010
| 0x00000002
|-
| 0x10147014
| 0x0000
|-
| 0x10147020
| 0x00000DFB
|-
| 0x10147024
| 0x00000000
|-
| 0x10147028
| 0x0000
|}
|}