SDIDAT <br /><br />0x5A000040, 44, 48,<br />4C(Li/W, Li/HW, Li/B, Bi/<br />0x5A000041(Bi/HW),<br />0x5A000043(Bi/B)<br /><br />NOTE:<br />! (Li/W, Li/HW, Li/B): Access by Word/HalfWord//Byte unit when endian mode is Little<br />! (Bi/W): Access by Word unit when endian mode is Big<br />! (Bi/HW): Access by HalfWord unit when endian mode is Big<br />! (Bi/B): Access by Byte unit when endian mode is Big<br /><br />像2440addr.h这种头文件本身设计就不好,如果想用MMU把寄存器保护起来,都没法用了.<br /><br />下面这样就好多了:<br />typedef struct{<br /> reg32 SDICON ; //0x5a000000) //SDI control<br /> reg32 SDIPRE ; //0x5a000004) //SDI baud rate prescaler<br /> reg32 SDICARG ; //0x5a000008) //SDI command argument<br /> reg32 SDICCON ; //0x5a00000c) //SDI command control<br /> reg32 SDICSTA ; //0x5a000010) //SDI command status<br /> reg32 SDIRSP0 ; //0x5a000014) //SDI response 0<br /> reg32 SDIRSP1 ; //0x5a000018) //SDI response 1<br /> reg32 SDIRSP2 ; //0x5a00001c) //SDI response 2<br /> reg32 SDIRSP3 ; //0x5a000020) //SDI response 3<br /> reg32 SDIDTIMER ; //0x5a000024) //SDI data/busy timer<br /> reg32 SDIBSIZE ; //0x5a000028) //SDI block size<br /> reg32 SDIDCON ; //0x5a00002c) //SDI data control<br /> reg32 SDIDCNT ; //0x5a000030) //SDI data remain counter<br /> reg32 SDIDSTA ; //0x5a000034) //SDI data status<br /> reg32 SDIFSTA ; //0x5a000038) //SDI FIFO status<br /> reg32 SDIIMSK ; //0x5a00003c) //SDI interrupt mask. edited for 2440A<br /> <br />#ifdef __BIG_ENDIAN /* edited for 2440A */<br /> reg32 rsvd[3];<br /> reg32 SDIDAT ; //0x5a00004c) //SDI data<br /><br />#else <br /> reg32 SDIDAT ; //0x5a000040) //SDI data <br />#endif //SD Interface<br />} regSD_CTR;<br /><br />void Main( void )<br />{<br />#define SD_CONTROL_BASE 0x5a000000<br /> regSD_CTR *pSDCtr = ((regSD_CTR *)SD_CONTROL_BASE)<br />.....<br />}<br /><br /><br />
|