📄 mmcsd.c
字号:
//-----> // else RES_Set(RES_OK);
//----->
//-----> // if(
//-----> // Bit_39_Response_R3_ie_Bit15_MMCSD_adp_rsp7_reg_after_CMD1_OR_ACMD41
//-----> // !=
//-----> // BIT39_RESPONSE_R3_ie_BIT15_MMCSD_ADP_RSP7_REG_AFTER_CMD1_OR_ACMD41_EQUAL1
//-----> // )
//-----> // RES_Set(RES_BAD);
//-----> // else RES_Set(RES_OK);
//----->
//-----> //RESPONSE R3:READ MMCSD_ADP_RESP_REG6 AND MMCSD_ADP_RESP_REG7
//-----> // if(MMCSD_ReadWord16AtAddress16(MMCSD_ADP_RSP6_REG_ADDR) != MMC_OCR_REG_VOLTAGE_RANGE_LEAST_SIGNIFICANTS_BITS)
//-----> //verif that is equal to arg_reg_1
//-----> // RES_Set(RES_BAD);
//-----> // else RES_Set(RES_OK);
//----->
//-----> // if((MMCSD_ReadWord16AtAddress16(MMCSD_ADP_RSP7_REG_ADDR) & 0x7FFF) != MMC_OCR_REG_VOLTAGE_RANGE_MOST_SIGNIFICANTS_BITS)
//-----> //verif that is equal to arg_reg_2
//-----> // RES_Set(RES_BAD);
//-----> // else RES_Set(RES_OK);
//----->
//-----> //////////////////////CMD1////////////////////////////////////////////
//-----> return(result_value);
//----->}
//----->
//----->
//----->//-------------------------------------------------------------------------
//----->// NAME : ACmd41
//----->// DESCRIPTION : set mmcsd command ACmd41 with its arguments, SEND_APP_OP_COND,
//----->// asks the accessed card to send its operating condition register
//----->// (OCR) content in the response on the CMD line.
//----->// PARAMETERS :
//----->//
//----->//
//----->// RETURN VALUE:
//----->// LIMITATIONS : None
//----->//-------------------------------------------------------------------------
//----->UWORD16 ACmd41(void)
//----->{
//-----> UWORD16 result_value;
//-----> UWORD8 Counter_time_out;
//----->
//-----> result_value = MMCSD_ADP_STAT_REG_CMD_TIMEOUT_NO_RESPONSE_BIT_EQUAL_NO_CMD_TIME_OUT_ERROR;
//----->
//-----> write_word16_at_address16((DEMASK_ALL_IRQ_IN_MMCSD_ADP_IE_REG & MASK_OF_MMCSD_ADP_IE_REG), MMCSD_ADP_IE_REG_ADDR);
//----->
//-----> Counter_time_out = 0;
//-----> Counter_IRQ_MMCSD = 0;
//-----> Content_of_MMCSDAdp_Stat_Reg = INITIALISATION_CONTENT_OF_MMCSD_ADP_STAT_REG;
//-----> do
//-----> {
//-----> End_of_Cmd_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_END_OF_CMD_BIT_EQUAL_END_OF_CMD;
//-----> Cmd_Timeout_Bit_of_MMCSD_Adp_Stat_Reg = MMCSD_ADP_STAT_REG_CMD_TIMEOUT_NO_RESPONSE_BIT_EQUAL_NO_CMD_TIME_OUT_ERROR;
//-----> Cmd_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_CMD_CRC_ERROR_BIT_EQUAL_NO_CRC_ERROR;
//-----> Ocr_Busy_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_OCR_BUSY_AFTER_CMD1_OR_ACMD41_BIT_EQUAL_NO_OCR_BUSY;
//-----> Card_Err_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_CARD_ERR_BIT_EQUAL_NO_ERROR;
//-----> ( Bit_39_Response_R3_ie_Bit15_MMCSD_adp_rsp7_reg_after_CMD1_OR_ACMD41
//-----> =
//-----> NEGATION_OF_BIT39_RESPONSE_R3_ie_BIT15_MMCSD_ADP_RSP7_REG_AFTER_CMD1_OR_ACMD41_EQUAL1
//-----> );
//----->
//-----> RES_Set(0xCD41);//detection of CMD
//----->
//-----> MMC_SetMmcCommand(MMCSD_OCR_REG_VOLTAGE_RANGE_LEAST_SIGNIFICANTS_BITS, MMCSD_ADP_ARG1_REG_ADDR,
//-----> MMCSD_OCR_REG_VOLTAGE_RANGE_MOST_SIGNIFICANTS_BITS, MMCSD_ADP_ARG2_REG_ADDR,
//-----> ACMD41, MMCSD_ADP_CMD_REG_ADDR);
//----->
//-----> Test_IRQ();
//----->
//-----> if(
//-----> Cmd_Timeout_Bit_of_MMCSD_Adp_Stat_Reg
//-----> ==
//-----> NEGATION_OF_MMCSD_ADP_STAT_REG_CMD_TIMEOUT_NO_RESPONSE_BIT_EQUAL_NO_CMD_TIME_OUT_ERROR
//-----> )
//-----> { result_value = NEGATION_OF_MMCSD_ADP_STAT_REG_CMD_TIMEOUT_NO_RESPONSE_BIT_EQUAL_NO_CMD_TIME_OUT_ERROR;
//-----> break;
//-----> }
//----->
//-----> }
//-----> while(
//-----> (
//-----> (End_of_Cmd_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_END_OF_CMD_BIT_EQUAL_END_OF_CMD)
//-----> // ||
//-----> // (Cmd_Timeout_Bit_of_MMCSD_Adp_Stat_Reg != //----->MMCSD_ADP_STAT_REG_CMD_TIMEOUT_NO_RESPONSE_BIT_EQUAL_NO_CMD_TIME_OUT_ERROR)
//-----> ||
//-----> (Cmd_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_CMD_CRC_ERROR_BIT_EQUAL_NO_CRC_ERROR)
//-----> ||
//-----> (Ocr_Busy_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_OCR_BUSY_AFTER_CMD1_OR_ACMD41_BIT_EQUAL_NO_OCR_BUSY)
//-----> ||
//-----> (Card_Err_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_CARD_ERR_BIT_EQUAL_NO_ERROR)
//-----> ||
//-----> (
//-----> Bit_39_Response_R3_ie_Bit15_MMCSD_adp_rsp7_reg_after_CMD1_OR_ACMD41
//-----> !=
//-----> BIT39_RESPONSE_R3_ie_BIT15_MMCSD_ADP_RSP7_REG_AFTER_CMD1_OR_ACMD41_EQUAL1
//-----> )
//-----> //Bit_39_Response_R3_ie_Bit15_MMCSD_adp_rsp7_reg_after_CMD1_OR_ACMD41 = 0 <=> card has not finished the power up //----->routine
//-----> )
//-----> &&
//-----> (Counter_time_out++ < TIME_OUT)
//-----> );
//----->
//-----> return(result_value);
//----->}
//----->
//----->//-------------------------------------------------------------------------
//----->// NAME : Cmd2
//----->// DESCRIPTION : set mmcsd command 2 with its arguments, ALL_SEND_CID;
//----->// asks any card to send the CID numbers on the CMD line.
//----->// Any card that is connected to the host will respond.
//----->//
//----->// PARAMETERS :
//----->//
//----->//
//----->// RETURN VALUE:
//----->// LIMITATIONS : None
//----->//-------------------------------------------------------------------------
//----->void Cmd2(void)
//----->{
//----->
//-----> UWORD8 Counter_time_out;
//----->
//-----> //////////////////////CMD2///////////////////////
//----->
//-----> //configure interrupt int_mask_reg RQUE : a bit of int_mask_reg at 1 <=> demask the interrupt,
//-----> //a bit of int_mask_reg at 0 <=> mask the interrupt
//----->
//----->
//-----> write_word16_at_address16((DEMASK_ALL_IRQ_IN_MMCSD_ADP_IE_REG & MASK_OF_MMCSD_ADP_IE_REG), MMCSD_ADP_IE_REG_ADDR);
//----->
//-----> Counter_time_out = 0;
//-----> Counter_IRQ_MMCSD = 0;
//-----> Content_of_MMCSDAdp_Stat_Reg = INITIALISATION_CONTENT_OF_MMCSD_ADP_STAT_REG;
//-----> do
//-----> {
//-----> End_of_Cmd_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_END_OF_CMD_BIT_EQUAL_END_OF_CMD;
//-----> Cmd_Timeout_Bit_of_MMCSD_Adp_Stat_Reg = //----->NEGATION_OF_MMCSD_ADP_STAT_REG_CMD_TIMEOUT_NO_RESPONSE_BIT_EQUAL_NO_CMD_TIME_OUT_ERROR;
//-----> Cmd_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_CMD_CRC_ERROR_BIT_EQUAL_NO_CRC_ERROR;
//----->
//-----> //////////////////////////////////////////////
//-----> //CMD2:ALL_SEND_CID,
//-----> //This command CMD2 :asks all cards to send their CID (Card Identification number) numbers
//-----> //
//-----> //Bits of mmc_adp_st_reg concerned:
//-----> //---------------bit 0 : End_of_Cmd_Bit_of_MMCSD_Adp_Stat_Reg at 1 it's OK----------------
//-----> //---------------bit 7 : Cmd_Timeout_Bit_of_MMCSD_Adp_Stat_Reg at 0 it's OK----------------
//-----> //---------------bit 8 : Cmd_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg at 0 it's OK---------------
//-----> //
//-----> //RESPONSE R2: READ ALL ADP_RESP_REGi 1 =< i =< 8.Read the bits 1 <-> 127 in all ADP_RESP_REGi (CID card) is not necessary.
//-----> //it would be better :
//-----> //1)to set ARGUMENTS_OF_CMD3 and CMD3
//-----> //2)to wait the signal irq_o_sn at low state, indicating an IRQ, and consequently read the card status
//-----> //in the RESPONSE R1 of CMD3, read response R1 bits 39<->8 to detect CARD_STATUS_IS_IN_IDENT_STATE_IN_RESPONSE_R1_OF_CMD3
//-----> RES_Set(0xCD02);//detection of CMD
//-----> //-----> MMC_SetMmcCommand(NO_ARGUMENT_BITS_IN_MMC_ARG_REG_1,NO_ARGUMENT_BITS_IN_MMC_ARG_REG_2,CMD2);
//-----> MMC_SetMmcCommand(NO_ARGUMENT_BITS_IN_MMCSD_ARG1_REG, MMCSD_ADP_ARG1_REG_ADDR,
//-----> NO_ARGUMENT_BITS_IN_MMCSD_ARG2_REG, MMCSD_ADP_ARG2_REG_ADDR,
//-----> CMD2, MMCSD_ADP_CMD_REG_ADDR);
//-----> //CMD2
//-----> //////////////////////////////////////////////
//----->
//-----> Test_IRQ();
//----->
//-----> }
//-----> while(
//-----> (
//-----> (End_of_Cmd_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_END_OF_CMD_BIT_EQUAL_END_OF_CMD)
//-----> ||
//-----> (Cmd_Timeout_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_CMD_TIMEOUT_NO_RESPONSE_BIT_EQUAL_NO_CMD_TIME_OUT_ERROR)
//-----> ||
//-----> (Cmd_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_CMD_CRC_ERROR_BIT_EQUAL_NO_CRC_ERROR)
//-----> )
//-----> &&
//-----> (Counter_time_out++<TIME_OUT)
//-----> );
//----->
//-----> // if(End_of_Cmd_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_END_OF_CMD_BIT_EQUAL_END_OF_CMD)
//-----> // RES_Set(RES_BAD);
//-----> // else RES_Set(RES_OK);
//----->
//-----> // if(Cmd_Timeout_Bit_of_MMCSD_Adp_Stat_Reg != //----->MMCSD_ADP_STAT_REG_CMD_TIMEOUT_NO_RESPONSE_BIT_EQUAL_NO_CMD_TIME_OUT_ERROR)
//-----> // RES_Set(RES_BAD);
//-----> // else RES_Set(RES_OK);
//----->
//-----> // if(Cmd_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_CMD_CRC_ERROR_BIT_EQUAL_NO_CRC_ERROR)
//-----> // RES_Set(RES_BAD);
//-----> // else RES_Set(RES_OK);
//----->
//----->
//-----> ////////////////////////CMD2////////////////////////
//----->}
//----->
//----->
//----->//-------------------------------------------------------------------------
//----->// NAME : Cmd3
//----->// DESCRIPTION : set mmcsd command 3 with its arguments,SEND_RELATIVE_ADDR,
//----->// ask the card to publish a new relative address(RCA).
//----->// PARAMETERS :
//----->//
//----->//
//----->// RETURN VALUE:
//----->// LIMITATIONS : None
//----->//-------------------------------------------------------------------------
//----->void Cmd3(UWORD16 relative_card_address)
//----->{
//----->
//-----> UWORD8 Counter_time_out;
//-----> ///////////////////////CMD3////////////////////
//----->
//-----> //configure interrupt int_mask_reg RQUE : a bit of int_mask_reg at 1 <=> demask the interrupt,
//-----> //a bit of int_mask_reg at 0 <=> mask the interrupt
//----->
//-----> write_word16_at_address16((DEMASK_ALL_IRQ_IN_MMCSD_ADP_IE_REG & MASK_OF_MMCSD_ADP_IE_REG), MMCSD_ADP_IE_REG_ADDR);
//----->
//-----> Counter_time_out = 0;
//-----> Counter_IRQ_MMCSD = 0;
//-----> Content_of_MMCSDAdp_Stat_Reg = INITIALISATION_CONTENT_OF_MMCSD_ADP_STAT_REG;
//-----> do
//-----> {
//-----> End_of_Cmd_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_END_OF_CMD_BIT_EQUAL_END_OF_CMD;
//-----> Cmd_Timeout_Bit_of_MMCSD_Adp_Stat_Reg = //----->NEGATION_OF_MMCSD_ADP_STAT_REG_CMD_TIMEOUT_NO_RESPONSE_BIT_EQUAL_NO_CMD_TIME_OUT_ERROR;
//-----> Cmd_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_CMD_CRC_ERROR_BIT_EQUAL_NO_CRC_ERROR;
//-----> Card_Err_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_CARD_ERR_BIT_EQUAL_NO_ERROR;
//-----> Response_R1_IN_MMCSD_adp_rsp6_reg_of_cmd3 = NEGATION_OF_CARD_STATUS_IS_IN_IDENT_STATE;
//----->
//-----> //////////////////////////////////////////////
//-----> //CMD3:SET_RELATIVE_ADDR,
//-----> //This command CMD3 sets relative adress,i-e sets an arbitrary card number of identification(RCA),
//-----> //given by the user.this arbitrary number is set in the arg_reg_2.
//-----> //REPONSE:READ RESPONSE R1, READ ADP_RESP_REG7 AND ADP_RESP_REG8 read bits card status : bits 8 <-> 39 of response R1
//-----> //to detect CARD_STATUS_IS_IN_IDENT_STATE_IN_RESPONSE_R1_OF_CMD3
//-----> //
//-----> //Bits of mmc_adp_st_reg concerned:
//-----> //---------------bit 0 : End_of_Cmd_Bit_of_MMCSD_Adp_Stat_Reg at 1 it's OK----------------
//-----> //---------------bit 7 : Cmd_Timeout_Bit_of_MMCSD_Adp_Stat_Reg at 0 it's OK----------------
//-----> //---------------bit 8 : Cmd_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg at 0 it's OK---------------
//-----> //---------------bit14 : Card_Err_Bit_of_MMCSD_Adp_Stat_Reg at 0 it's OK----------
//-----> //Response in Resp_Reg : Response_R1_IN_MMCSD_adp_rsp6_reg_of_cmd3 = CARD_STATUS_IS_IN_IDENT_STATE it's OK
//-----> RES_Set(0xCD03);//detection of CMD
//-----> MMC_SetMmcCommand(NO_ARGUMENT_BITS_IN_MMCSD_ARG1_REG, MMCSD_ADP_ARG1_REG_ADDR,
//-----> relative_card_address, MMCSD_ADP_ARG2_REG_ADDR,
//-----> CMD3MMC, MMCSD_ADP_CMD_REG_ADDR);
//-----> //CMD3
//-----> //////////////////////////////////////////////
//----->
//-----> Test_IRQ();
//----->
//-----> }
//-----> while(
//-----> (
//-----> (End_of_Cmd_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_END_OF_CMD_BIT_EQUAL_END_OF_CMD)
//-----> ||
//-----> (Cmd_Timeout_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_CMD_TIMEOUT_NO_RESPONSE_BIT_EQUAL_NO_CMD_TIME_OUT_ERROR)
//-----> ||
//-----> (Cmd_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_CMD_CRC_ERROR_BIT_EQUAL_NO_CRC_ERROR)
//-----> ||
//-----> (Card_Err_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_CARD_ERR_BIT_EQUAL_NO_ERROR)
//-----> ||
//-----> (Response_R1_IN_MMCSD_adp_rsp6_reg_of_cmd3 =! CARD_STATUS_IS_IN_IDENT_STATE)
//-----> )
//-----> &&
//-----> (Counter_time_out++ < TIME_OUT)
//-----> );
//----->
//-----> // if(End_of_Cmd_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_END_OF_CMD_BIT_EQUAL_END_OF_CMD)
//-----> // RES_Set(RES_BAD);
//-----> // else RES_Set(RES_OK);
//----->
//-----> // if(Cmd_Timeout_Bit_of_MMCSD_Adp_Stat_Reg != //----->MMCSD_ADP_STAT_REG_CMD_TIMEOUT_NO_RESPONSE_BIT_EQUAL_NO_CMD_TIME_OUT_ERROR)
//-----> // RES_Set(RES_BAD);
//-----> // else RES_Set(RES_OK);
//----->
//-----> // if(Cmd_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_CMD_CRC_ERROR_BIT_EQUAL_NO_CRC_ERROR)
//-----> // RES_Set(RES_BAD);
//-----> // else RES_Set(RES_OK);
//----->
//-----> // if(Card_Err_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_CARD_ERR_BIT_EQUAL_NO_ERROR)
//-----> // RES_Set(RES_BAD);
//-----> // else RES_Set(RES_OK);
//----->
//-----> // if(Response_R1_IN_MMCSD_adp_rsp6_reg_of_cmd3 =! CARD_STATUS_IS_IN_IDENT_STATE)
//-----> // RES_Set(RES_BAD);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -