implemented clock switch
This commit is contained in:
parent
1004efa300
commit
9bce46516a
@ -28,7 +28,7 @@ typedef enum {ACMD41_RESP_INIT, ACMD41_RESP_ERR, ACMD41_RESP_SDSC, ACMD41_RESP_S
|
|||||||
typedef enum {CMD8_RESP_TIMEOUT, CMD8_RESP_ACK, CMD8_RESP_ERR} CMD8_RESP_t;
|
typedef enum {CMD8_RESP_TIMEOUT, CMD8_RESP_ACK, CMD8_RESP_ERR} CMD8_RESP_t;
|
||||||
typedef uint8_t CID_t;
|
typedef uint8_t CID_t;
|
||||||
|
|
||||||
void SDIO_InitModule();
|
void initModuleHw();
|
||||||
|
|
||||||
int SDIO_sendCmd(uint8_t CMD, uint32_t arg, uint8_t expectedAns);
|
int SDIO_sendCmd(uint8_t CMD, uint32_t arg, uint8_t expectedAns);
|
||||||
int SDIO_getResp(uint8_t expectedCMD, uint8_t typeOfAns, uint32_t* responseBuffer);
|
int SDIO_getResp(uint8_t expectedCMD, uint8_t typeOfAns, uint32_t* responseBuffer);
|
||||||
@ -45,7 +45,7 @@ CMD8_RESP_t SDIO_send_CMD8();
|
|||||||
void initDetectandProtectionPins();
|
void initDetectandProtectionPins();
|
||||||
int checkNotInserted(); // Returns 0 if inserted!
|
int checkNotInserted(); // Returns 0 if inserted!
|
||||||
int checkWriteProtection(); // returns 0 if write protected
|
int checkWriteProtection(); // returns 0 if write protected
|
||||||
|
void switchPrescaler(uint8_t clkdiv);
|
||||||
|
|
||||||
//BYTE rxtxbuffer[1<<BLOCKSIZE]; //Data RX and TX Buffer not needed anymore. thanks to DMA
|
//BYTE rxtxbuffer[1<<BLOCKSIZE]; //Data RX and TX Buffer not needed anymore. thanks to DMA
|
||||||
SDInfo_t cardInfo; // = {.type = CARD_NONE};
|
SDInfo_t cardInfo; // = {.type = CARD_NONE};
|
||||||
@ -72,7 +72,7 @@ DSTATUS SDIO_initialize(){
|
|||||||
cardInfo.rca = 0;
|
cardInfo.rca = 0;
|
||||||
cardInfo.type = CARD_NONE;
|
cardInfo.type = CARD_NONE;
|
||||||
|
|
||||||
SDIO_InitModule();
|
initModuleHw();
|
||||||
|
|
||||||
initDetectandProtectionPins();
|
initDetectandProtectionPins();
|
||||||
|
|
||||||
@ -126,6 +126,10 @@ DSTATUS SDIO_initialize(){
|
|||||||
//TODO: Set 4 bit mode
|
//TODO: Set 4 bit mode
|
||||||
//TODO:
|
//TODO:
|
||||||
|
|
||||||
|
switchPrescaler(WORKCLK);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (checkWriteProtection()) {
|
if (checkWriteProtection()) {
|
||||||
return STA_PROTECT;
|
return STA_PROTECT;
|
||||||
} else
|
} else
|
||||||
@ -168,7 +172,7 @@ DWORD __attribute__((weak)) get_fattime(){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void SDIO_InitModule(){
|
void initModuleHw(){
|
||||||
//Init Clocks
|
//Init Clocks
|
||||||
RCC->AHB1ENR |= PORTCLKMASK;
|
RCC->AHB1ENR |= PORTCLKMASK;
|
||||||
RCC->APB2ENR |= RCC_APB2ENR_SDIOEN;
|
RCC->APB2ENR |= RCC_APB2ENR_SDIOEN;
|
||||||
@ -209,6 +213,15 @@ void SDIO_InitModule(){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void switchPrescaler(uint8_t clkdiv) {
|
||||||
|
SDIO->POWER = 0;
|
||||||
|
__DSB();
|
||||||
|
SDIO->CLKCR &= ~SDIO_CLKCR_CLKDIV; // Clear prescaler
|
||||||
|
SDIO->CLKCR |= (SDIO_CLKCR_CLKDIV & clkdiv); // Set bits
|
||||||
|
__DSB();
|
||||||
|
SDIO->POWER = SDIO_POWER_PWRCTRL_0 | SDIO_POWER_PWRCTRL_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Send Command
|
//Send Command
|
||||||
//Clear respone Flags
|
//Clear respone Flags
|
||||||
|
Loading…
Reference in New Issue
Block a user