diff options
Diffstat (limited to 'src/siirtc.c')
-rw-r--r-- | src/siirtc.c | 131 |
1 files changed, 72 insertions, 59 deletions
diff --git a/src/siirtc.c b/src/siirtc.c index 965a068f1..f7e85ef4f 100644 --- a/src/siirtc.c +++ b/src/siirtc.c @@ -46,6 +46,19 @@ #define CMD_TIME CMD(3) #define CMD_ALARM CMD(4) +#define SCK_HI 1 +#define SIO_HI 2 +#define CS_HI 4 + +#define DIR_0_IN 0 +#define DIR_0_OUT 1 +#define DIR_1_IN 0 +#define DIR_1_OUT 2 +#define DIR_2_IN 0 +#define DIR_2_OUT 4 +#define DIR_ALL_IN (DIR_0_IN | DIR_1_IN | DIR_2_IN) +#define DIR_ALL_OUT (DIR_0_OUT | DIR_1_OUT | DIR_2_OUT) + #define GPIO_PORT_DATA (*(vu16 *)0x80000C4) #define GPIO_PORT_DIRECTION (*(vu16 *)0x80000C6) #define GPIO_PORT_READ_ENABLE (*(vu16 *)0x80000C8) @@ -126,15 +139,15 @@ bool8 SiiRtcReset() sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_RESET | WR); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -154,14 +167,14 @@ bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_STATUS | RD); - GPIO_PORT_DIRECTION = 5; + GPIO_PORT_DIRECTION = DIR_0_OUT | DIR_1_IN | DIR_2_OUT; statusData = ReadData(); @@ -170,8 +183,8 @@ bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc) | ((statusData & STATUS_INTME) >> 2) | ((statusData & STATUS_INTFE) >> 1); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -187,22 +200,22 @@ bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; statusData = STATUS_24HOUR | ((rtc->status & SIIRTCINFO_INTAE) << 3) | ((rtc->status & SIIRTCINFO_INTME) << 2) | ((rtc->status & SIIRTCINFO_INTFE) << 1); - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_STATUS | WR); WriteData(statusData); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -218,22 +231,22 @@ bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_DATETIME | RD); - GPIO_PORT_DIRECTION = 5; + GPIO_PORT_DIRECTION = DIR_0_OUT | DIR_1_IN | DIR_2_OUT; for (i = 0; i < DATETIME_BUF_LEN; i++) DATETIME_BUF(rtc, i) = ReadData(); INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -249,18 +262,18 @@ bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_DATETIME | WR); for (i = 0; i < DATETIME_BUF_LEN; i++) WriteData(DATETIME_BUF(rtc, i)); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -276,22 +289,22 @@ bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_TIME | RD); - GPIO_PORT_DIRECTION = 5; + GPIO_PORT_DIRECTION = DIR_0_OUT | DIR_1_IN | DIR_2_OUT; for (i = 0; i < TIME_BUF_LEN; i++) TIME_BUF(rtc, i) = ReadData(); INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -307,18 +320,18 @@ bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_TIME | WR); for (i = 0; i < TIME_BUF_LEN; i++) WriteData(TIME_BUF(rtc, i)); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -347,18 +360,18 @@ bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc) alarmData[1] = rtc->alarmMinute; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIOPortDirection = 7; // Why is this the only instance that uses a symbol? + GPIOPortDirection = DIR_ALL_OUT; // Why is this the only instance that uses a symbol? WriteCommand(CMD_ALARM | WR); for (i = 0; i < 2; i++) WriteData(alarmData[i]); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -373,10 +386,10 @@ static int WriteCommand(u8 value) for (i = 0; i < 8; i++) { temp = ((value >> (7 - i)) & 1); - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 5; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI; } // control reaches end of non-void function @@ -390,10 +403,10 @@ static int WriteData(u8 value) for (i = 0; i < 8; i++) { temp = ((value >> i) & 1); - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 5; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI; } // control reaches end of non-void function @@ -407,14 +420,14 @@ static u8 ReadData() for (i = 0; i < 8; i++) { - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 5; - - temp = ((GPIO_PORT_DATA & 2) >> 1); + GPIO_PORT_DATA = CS_HI; + GPIO_PORT_DATA = CS_HI; + GPIO_PORT_DATA = CS_HI; + GPIO_PORT_DATA = CS_HI; + GPIO_PORT_DATA = CS_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; + + temp = ((GPIO_PORT_DATA & SIO_HI) >> 1); value = (value >> 1) | (temp << 7); // UB: accessing uninitialized var } |