00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef SERIAL_ARM7_INCLUDE
00031 #define SERIAL_ARM7_INCLUDE
00032
00033 #ifndef ARM7
00034 #error Serial header is for ARM7 only
00035 #endif
00036
00037
00038 #include <nds/bios.h>
00039
00040
00041
00042 #define REG_RCNT (*(vu16*)0x04000134)
00043 #define REG_KEYXY (*(vu16*)0x04000136)
00044 #define RTC_CR (*(vu16*)0x04000138)
00045 #define RTC_CR8 (*( vu8*)0x04000138)
00046
00047 #define REG_SIOCNT (*(vu16*)0x04000128)
00048
00049 #define SIO_DATA8 (*(vu8*)0x0400012A)
00050 #define SIO_DATA32 (*(vu32*)0x04000120)
00051
00052
00053
00054
00055 #define SIO_MULTI_0 (*(vu16*)0x04000120)
00056 #define SIO_MULTI_1 (*(vu16*)0x04000122)
00057 #define SIO_MULTI_2 (*(vu16*)0x04000124)
00058 #define SIO_MULTI_3 (*(vu16*)0x04000126)
00059 #define SIO_MULTI_SEND (*(vu16*)0x0400012A)
00060
00061
00062
00063 #define REG_SPICNT (*(vu16*)0x040001C0)
00064 #define REG_SPIDATA (*(vu16*)0x040001C2)
00065
00066 #define SPI_ENABLE BIT(15)
00067 #define SPI_IRQ BIT(14)
00068 #define SPI_BUSY BIT(7)
00069
00070
00071 #define SPI_BAUD_4MHz 0
00072 #define SPI_BAUD_2MHz 1
00073 #define SPI_BAUD_1MHz 2
00074 #define SPI_BAUD_512KHz 3
00075
00076
00077 #define SPI_BYTE_MODE (0<<10)
00078 #define SPI_HWORD_MODE (1<<10)
00079
00080
00081 #define SPI_DEVICE_POWER (0 << 8)
00082 #define SPI_DEVICE_FIRMWARE (1 << 8)
00083 #define SPI_DEVICE_NVRAM (1 << 8)
00084 #define SPI_DEVICE_TOUCH (2 << 8)
00085 #define SPI_DEVICE_MICROPHONE (2 << 8)
00086
00087
00088
00089 #define SPI_CONTINUOUS BIT(11)
00090
00091
00092
00093
00094
00095
00096
00097 #define FIRMWARE_WREN 0x06
00098 #define FIRMWARE_WRDI 0x04
00099 #define FIRMWARE_RDID 0x9F
00100 #define FIRMWARE_RDSR 0x05
00101 #define FIRMWARE_READ 0x03
00102 #define FIRMWARE_PW 0x0A
00103 #define FIRMWARE_PP 0x02
00104 #define FIRMWARE_FAST 0x0B
00105 #define FIRMWARE_PE 0xDB
00106 #define FIRMWARE_SE 0xD8
00107 #define FIRMWARE_DP 0xB9
00108 #define FIRMWARE_RDP 0xAB
00109
00110
00111 static inline
00112 void SerialWaitBusy() {
00113 while (REG_SPICNT & SPI_BUSY)
00114 swiDelay(1);
00115 }
00116
00117
00118
00119
00120
00121 void readFirmware(u32 address, void * destination, u32 size);
00122
00123
00124 #endif
00125