⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmcsd.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 5 页
字号:
//----->     //  else RES_Set(RES_OK);
//----->
//----->
//----->  /////////////////////CMD3///////////////////////////////////
//----->}  
//----->
//----->  
//----->//-------------------------------------------------------------------------
//----->// NAME        : Cmd7        
//----->// DESCRIPTION : set mmcsd command 7 with its arguments, SELECT/DESELECT_CARD,
//----->//               command toggles a card between the stand-by and transfer states 
//----->//               or between the programming and disconnect states. In both cases
//----->//               the card is selected by its own relative address and gets deselected
//----->//               by any other address; address 0 deselects all.
//----->//
//----->// PARAMETERS  :  
//----->//		
//----->//		                                                       
//----->// RETURN VALUE: 
//----->// LIMITATIONS : None                                                         
//----->//-------------------------------------------------------------------------
//----->void Cmd7(UWORD16 relative_card_address)
//----->{  
//-----> 
//-----> UWORD8 Counter_time_out; 
//----->  /////////////////////////////CMD7/////////////////////////
//----->  
//----->  //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_R1b_IN_MMCSD_adp_rsp6_reg_of_CMD7 = NEGATION_OF_CARD_STATUS_IS_IN_STAND_BY_STATE;
//----->   
//----->   //////////////////////////////////////////////////////
//----->   //CMD7:SELECT/DESELECT_CARD,
//----->   //this command selects or deselects a card with an RCA,
//----->   //arguments :arg_reg_1 <-- nothing,
//----->   //arg_reg_2 <-- [31:16] RCA (Relative Card Address register).
//----->   //RESPONSE:response R1b, between CMD3 and CMD7, the card state must be in stand-by state (stby).
//----->   //response R1b read in the do{}while() stop condition
//----->   //
//----->   //   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---------------   
//----->   //
//----->   //in the RESPONSE R1b of CMD7, read response R1b bits 39<->8 to detect
//----->   //CARD_STATUS_IS_IN_STAND_BY_STATE
//----->   RES_Set(0xCD07);//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,
//----->                   CMD7, MMCSD_ADP_CMD_REG_ADDR
//----->                  );
//----->   //CMD7
//----->   //////////////////////////////////////////////////////
//----->   
//----->    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_R1b_IN_MMCSD_adp_rsp6_reg_of_CMD7 != CARD_STATUS_IS_IN_STAND_BY_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_R1b_IN_MMCSD_adp_rsp6_reg_of_CMD7 != CARD_STATUS_IS_IN_STAND_BY_STATE)
//----->     //  RES_Set(RES_BAD);
//----->     //  else RES_Set(RES_OK);
//----->
//----->  /////////////////////////////CMD7/////////////////////////
//----->  
//----->
//----->}
//----->
//----->
//----->
//----->
//----->
//----->//-------------------------------------------------------------------------
//----->// NAME        : Cmd16       
//----->// DESCRIPTION : set mmcsd command 16 with its arguments, SET_BLOCKLEN,
//----->//               sets the block length (in bytes) for all following block
//----->//               commands(read and write). Default block length is specified
//----->//               in the CSD. supported only if partial RD/WR operation are allowed
//----->//               in CSD.
//----->//
//----->// PARAMETERS  :  
//----->//		
//----->//		                                                       
//----->// RETURN VALUE: 
//----->// LIMITATIONS : None                                                         
//----->//-------------------------------------------------------------------------
//----->void Cmd16(UWORD16 least_significants_bits_data_block_length_to_write_read_in_mmcsd_card,
//----->           UWORD16 most_significants_bits_data_block_length_to_write_read_in_mmcsd_card)
//----->{
//-----> 
//-----> UWORD8 Counter_time_out; 
//-----> 
//----->  /////////////////////////////CMD16/////////////////////////  
//----->
//----->  //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_cmd16 = NEGATION_OF_CARD_STATUS_IS_IN_TRANSFER_STATE;
//----->   
//----->   ///////////////////////////////////////////////////////
//----->   //CMD16:SET_BLOCKLEN,
//----->   //this command sets the block length (in bytes) for
//----->   //all following block commands (read and write).
//----->   //Arguments: on procede a une ecriture par bloc,mettre la taille du bloc qui correpond
//----->   //a la longueur totale des mots ecrits precedement dans le buffer data register.
//----->   //Caution: Modificate the value of :
//----->   //#define LEAST_SIGNIFICANTS_BITS_DATA_BLOCK_LENGTH_TO_WRITE_READ_IN_MMC_CARD 0x000A
//----->   //#define MOST_SIGNIFICANTS_BITS_DATA_BLOCK_LENGTH_TO_WRITE_READ_IN_MMC_CARD 0x0000
//----->   //in case of change of the total length of words written previously in the buf_data_reg
//----->   //   
//----->   //      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 R1 of CMD16 : read response R1 bits 39<->8 to detect
//----->   //CARD_STATUS_IS_IN_TRANSFER_STATE
//----->   RES_Set(0xCD16);//detection of CMD 
//----->   MMC_SetMmcCommand(least_significants_bits_data_block_length_to_write_read_in_mmcsd_card, MMCSD_ADP_ARG1_REG_ADDR,
//----->                   most_significants_bits_data_block_length_to_write_read_in_mmcsd_card, MMCSD_ADP_ARG2_REG_ADDR,
//----->                   CMD16, MMCSD_ADP_CMD_REG_ADDR);
//----->   
//----->   write_word16_at_address16(IN_MMCSD_ADP_BLEN_REG_BLOCK_LENGTH_EQUAL_10, MMCSD_ADP_BLEN_REG_ADDR);
//----->   //CMD16
//----->   /////////////////////////////////////////////////////
//----->   
//----->    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_cmd16 != CARD_STATUS_IS_IN_TRANSFER_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_cmd16 != CARD_STATUS_IS_IN_TRANSFER_STATE)
//----->     //  RES_Set(RES_BAD);
//----->     //  else RES_Set(RES_OK);
//----->  
//----->  /////////////////////////////CMD16/////////////////////////
//----->  
//----->}
//----->
//----->
//----->//-------------------------------------------------------------------------
//----->// NAME        : Cmd24        
//----->// DESCRIPTION : set mmcsd command 24 with its arguments, WRITE_BLOCK,
//----->//               writes a block of the size selected by the SET_BLOCKLEN
//----->//               command. 
//----->//
//----->// PARAMETERS  :  
//----->//		
//----->//		                                                       
//----->// RETURN VALUE: 
//----->// LIMITATIONS : None                                                         
//----->//-------------------------------------------------------------------------
//----->void Cmd24(void)
//----->{
//-----> 
//-----> UWORD8 Counter_time_out;
//-----> UWORD8 loop_counter_wait_after_CMD24;
//-----> 
//----->  /////////////////////////////CMD24/////////////////////////
//----->  
//----->  //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;
//----->    Card_Busy_State_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_CARD_BUSY_BIT_EQUAL_DATA_LINE_BUSY;
//----->    Block_Received_Sent_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_BLOCK_RS_BIT_EQUAL_BLOCK_SENT_RECEIVED;
//----->    EOF_Busy_State_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_EOF_BUSY_BIT_EQUAL_DATA_LINE_RELEASED;
//----->    Data_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_DATA_CRC_ERROR_BIT_EQUAL_NO_CRC_ERROR;
//----->    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;
//----->    //    Buffer_Almost_Empty_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_A_EMPTY_BIT_EQUAL_BUFFER_ALMOST_EMPTY;
//----->    Card_Err_Bit_of_MMCSD_Adp_Stat_Reg = NEGATION_OF_MMCSD_ADP_STAT_REG_CARD_ERR_BIT_EQUAL_NO_ERROR;
//----->    
//----->    
//----->   ////////////////////////////////////////////////////
//----->   //CMD24:WRITE_BLOCK, arguments:on procede a une ecriture par bloc,
//----->   //mettre l adresse de base physique (0x00000000) de la MMC card.
//----->   //mmc_arg_reg_1 <-- 0x0000, mmc_arg_reg_2 <-- 0x0000 
//----->   //
//----->   //         Bits of mmc_adp_st_reg concerned:
//----->   //---------------bit 0  : End_of_Cmd_Bit_of_MMCSD_Adp_Stat_Reg at 1 it's OK---------------------------------
//----->   //---------------bit 2  : Card_Busy_State_Bit_of_MMCSD_Adp_Stat_Reg at 1 it's OK----------------
//----->   //---------------bit 3  : Block_Received_Sent_Bit_of_MMCSD_Adp_Stat_Reg at 1 it's OK------------------------
//----->   //---------------bit 4  : EOF_Busy_State_Bit_of_MMCSD_Adp_Stat_Reg at 1 it's OK------------------
//----->   //---------------bit 6  : Data_Crc_Error_Bit_of_MMCSD_Adp_Stat_Reg at 0 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--------------------------------
//----->   //---------------bit 11 : 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -