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

📄 mmcsd.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 5 页
字号:
//----->  UWORD16 value = *(UWORD16*)(MMCSD_ADP_RSP6_REG_ADDR);
//-----> 
//----->  return value;
//----->}
//----->
//----->//
//----->//-------------------------------------------------------------------------
//----->//  read_mmcsd_adp_rsp7_reg         
//----->// DESCRIPTION : read MMCSD ADAPTER response register7
//----->//                                                          
//----->//-------------------------------------------------------------------------
//----->//
//----->UWORD16  read_mmcsd_adp_rsp7_reg(void)
//----->{
//----->//----->  
//----->  UWORD16 value = *(UWORD16*)(MMCSD_ADP_RSP7_REG_ADDR);
//-----> 
//----->  return value;
//----->}
//----->


////////////////////////////////////////////////////////////////////////////////////////


//------------------------------------------------------------------------
//  MMCSD_ReadWord16AtAddress16
//   
//  DESCRPTION : read a 16 bits word length
//------------------------------------------------------------------------
//
UWORD16 MMCSD_ReadWord16AtAddress16(UWORD16 address)
{

  //UWORD16 value = *(UWORD16*)(address);
  UWORD16 value = *(REGISTER_UWORD16*)(address);
  return value;

}

//
//-------------------------------------------------------------------------
// NAME        : MMC_SetMmcCommand        
// DESCRIPTION : set mmc command with its arguments
//                                                        
//-------------------------------------------------------------------------
//

void MMCSD_SetMmcsdCommand(UWORD16 value_in_mmcsd_arg1_reg,UWORD16 mmcsd_arg1_reg_address,
                       UWORD16 value_in_mmcsd_arg2_reg,UWORD16 mmcsd_arg2_reg_address,
                       UWORD16 CMD_number, UWORD16 mmcsd_adp_cmd_reg_addr)
{
  
  //////////////////////////////////////////////////////////////////
  //
  // RQE : 
  //  TO WRITE IN THE MMCSD_ADP_CMD_REG
  //  BIT(0) <-> BIT(5) NAME : COMMAND NUMBER, THE NUMBER OF THE COMMAND.
  //  
  //  BIT(6)  NAME : OPEN DRAIN MODE, AT 1 FOR COMMANDS 0, 1, 2, 3, 15 & 40
  //  BIT(7)  NAME : SEND INITIALIZATION STREAM, AT 1 FOR COMMANDS 0, 1
  //  BIT(8) <-> BIT(10) NAME : COMMAND RESPONSE
  //  BIT(11) NAME : COMMAND WITH BUSY RESPONSE
  //  BIT(12) <-> BIT(13) NAME : COMMAND TYPE
  //  BIT(14) NAME : STREAM COMMAND, ONLY FOR MMC CARD COMMANDS 11, 20
  //  BIT(15) NAME : DATA DIRECTION
  //
  //////////////////////////////////////////////////////////////////
  
  write_word16_at_address16( value_in_mmcsd_arg1_reg, mmcsd_arg1_reg_address);
  write_word16_at_address16( value_in_mmcsd_arg2_reg, mmcsd_arg2_reg_address);
  write_word16_at_address16( CMD_number, mmcsd_adp_cmd_reg_addr);    
}


///////////////////////////REMPLACER PAR LES NOUVELLES FONCTIONS Cmdxx ou ACmdxx
///////// CE QUI SUIT
///////
/////
///


//----->//-------------------------------------------------------------------------
//----->// NAME        : Cmd0        
//----->// DESCRIPTION : set mmcsd command 0 with its arguments, GO_IDLE_STATE,
//----->//               resets all cards to idle state. 
//----->// PARAMETERS  :  
//----->//		
//----->//		                                                       
//----->// RETURN VALUE: 
//----->// LIMITATIONS : None                                                         
//----->//-------------------------------------------------------------------------
//----->void Cmd0(void)
//----->{
//-----> 
//-----> UWORD8 Counter_time_out; 
//----->  //////////////////////CMD0///////////////////////////////
//----->  
//----->  //configure interrupt MMCSD_ADP_IE_REG RQUE :
//----->  //a bit of MMCSD_ADP_IE_REG at 1 <=> demask the interrupt,
//----->  //a bit of MMCSD_ADP_IE_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;
//----->    
//----->    //////////////////////////////////////////////////////
//----->    //CMD0, this command resets all cards to idle state : GO_IDLE_STATE.
//----->    //Bits of mmcsd_adp_stat_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' OK----------------      
//----->    RES_Set(0xCD00);//detection of CMD   
//----->    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,
//----->                    CMD0, MMCSD_ADP_CMD_REG_ADDR);
//----->    //CMD0
//----->    ///////////////////////////////////////////////
//----->    
//----->    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)
//----->        ) 
//----->        &&
//----->        (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);
//----->   
//----->   ////////////////CMD0/////////////////////////////
//----->}
//----->
//----->
//----->//-------------------------------------------------------------------------
//----->// NAME        : Cmd1
//----->// DESCRIPTION : set mmcsd command 1 with its arguments, SEND_OP_COND,
//----->//               asks all cards in idle state to send their operation
//----->//               conditions register content in the response on the CMD
//----->//               line.
//----->//   
//----->// PARAMETERS  :  
//----->//		
//----->//		                                                       
//----->// RETURN VALUE: 
//----->// LIMITATIONS : None                                                         
//----->//-------------------------------------------------------------------------
//----->UWORD16 Cmd1(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; 
//----->   
//----->   ////////////////CMD1/////////////////////////////
//----->  
//----->   //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 = 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;
//----->    ( 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
//----->    );
//----->    
//----->    //////////////////////////////////////////////
//----->    //CMD1:SEND_OP_COND, allowing to fix alimentation voltage range of MMC card.register concerned OCR register.
//----->    //puts in arg_reg_1 and arg_reg_2 the alimentation voltage range.if no voltage range imposed,
//----->    //set all the bits available (i-e bits no reserved) at 1. 
//----->    //Currently with MMC model, CMD1 must be set 2 times.
//----->    //At the first time Ocr_Busy_Bit_of_MMCSD_Adp_Stat_Reg is set at 1 and 
//----->    //at the second time this Ocr_Busy_Bit_of_MMCSD_Adp_Stat_Reg is set at 0,
//----->    //it is the reason why we wait the Ocr_Busy_Bit_of_MMCSD_Adp_Stat_Reg to be set at 0
//----->    //and the Testing Adp_St_Reg is in do{...}while(...) loop in order to reset its content.
//----->    //
//----->    //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---------------
//----->    //---------------bit 12 : Ocr_Busy_Bit_of_MMCSD_Adp_Stat_Reg at 0 it's OK------------------
//----->    //   
//----->    //Bits of OCR register concerned:
//----->    //---------------bit 31 : Bit_39_Response_R3_ie_Bit15_MMCSD_adp_rsp7_reg_after_CMD1_OR_ACMD41 at 1 it's OK-----------------
//----->    RES_Set(0xCD01);//detection of CMD
//----->    MMC_SetMmcCommand(MMC_OCR_REG_VOLTAGE_RANGE_LEAST_SIGNIFICANTS_BITS, MMCSD_ADP_ARG1_REG_ADDR,
//----->                    MMC_OCR_REG_VOLTAGE_RANGE_MOST_SIGNIFICANTS_BITS, MMCSD_ADP_ARG2_REG_ADDR,
//----->                    CMD1, MMCSD_ADP_CMD_REG_ADDR);
//----->    //CMD1
//----->    //////////////////////////////////////////////
//----->    
//----->    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)
//----->         ||
//----->         ( 
//----->           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)
//----->       );
//----->   
//----->     //  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(Ocr_Busy_Bit_of_MMCSD_Adp_Stat_Reg != MMCSD_ADP_STAT_REG_OCR_BUSY_AFTER_CMD1_OR_ACMD41_BIT_EQUAL_NO_OCR_BUSY)
//----->     //  RES_Set(RES_BAD);

⌨️ 快捷键说明

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