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

📄 l2_mmc.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
*/

void L2_MMCRspBufState(UCHAR* Status) USING_0
{
//	PRINT_L2("        L2_MMCRspBufState: Enter L2_MMCRspBufState\n");
    *Status = (XBYTE[0x2453]&0x02)>>1;
//    PRINT_L2("        L2_MMCRspBufState: Exit L2_MMCRspBufState\n");		
}


//-----------------------------------------------------------------------------
//L2_MMCDataBufState
//-----------------------------------------------------------------------------
/* 
routine description:
  Get MMC data buffer status
arguments:
  Status 0: data buffer is not full nor empty
         1: data buffer is empty
		 2: data buffer is full
return value:
  None
*/

void L2_MMCDataBufState(UCHAR* Status) USING_0
{
//	PRINT_L2("        L2_MMCDataBufState: Enter L2_MMCDataBufState\n");
    *Status = (XBYTE[0x2453]&0x0C)>>2;
//    PRINT_L2("        L2_MMCDataBufState: Exit L2_MMCDataBufState\n");		
}




//-----------------------------------------------------------------------------
//L2_MMCReadCRC7
//-----------------------------------------------------------------------------
/* 
routine description:
  Read the MMC CRC7 value
arguments:
  Value  : nth response buffer value (n is the given Number)
return value:
  None
*/

void L2_MMCReadCRC7(UCHAR* Value) USING_0
{
//	PRINT_L2("        L2_MMCReadCRC7: Enter L2_MMCReadCRC7\n");
    *Value = XBYTE[0x2466];
//    PRINT_L2("        L2_MMCReadCRC7: Exit L2_MMCReadCRC7\n");		
}


//-----------------------------------------------------------------------------
//L2_MMCCheckCRC16
//-----------------------------------------------------------------------------
/* 
routine description:
  Check CRC16 is correct or not
arguments:
  Status: 0: error
          1: correct
return value:
  None
*/

void L2_MMCCheckCRC16(UCHAR* Status) USING_0
{
//	PRINT_L2("        L2_MMCCheckCRC16: Enter L2_MMCCheckCRC16\n");
    *Status = XBYTE[0x246F];
//    PRINT_L2("        L2_MMCCheckCRC16: Exit L2_MMCCheckCRC16\n");		
}


//-----------------------------------------------------------------------------
//L2_MMCCardCRCStat
//-----------------------------------------------------------------------------
/* 
routine description:
  The CRC check result of the MMC card
arguments:
  Status: 0: error
          1: correct
return value:
  None
*/

void L2_MMCCardCRCStat(UCHAR* Status) USING_0
{
     UCHAR tmp;
//	PRINT_L2("        L2_MMCCardCRCStat: Enter L2_MMCCardCRCStat\n");
     tmp = (XBYTE[0x2454] & 0xf0) >> 4;

     if (tmp == 0x02)
     {
          *Status = 1;
     }
	else
     {
          *Status = 0;
     }
//    PRINT_L2("        L2_MMCCardCRCStat: Exit L2_MMCCardCRCStat\n");		
}


//-----------------------------------------------------------------------------
//L2_MMCTimeOut
//-----------------------------------------------------------------------------
/* 
routine description:
  Check MMC response time out and MMC CRC time out
arguments:
  Status:  0: correct
          bit[0]=1: Response time out
		  bit[1]=1: CRC time out
return value:
  None
*/

void L2_MMCTimeOut(UCHAR* Status) USING_0
{
//	PRINT_L2("        L2_MMCTimeOut: Enter L2_MMCTimeOut\n");
    *Status = (UCHAR)(XBYTE[0x2453] >> 6);
//    PRINT_L2("        L2_MMCTimeOut: Exit L2_MMCTimeOut\n");		
}


//-----------------------------------------------------------------------------
//L2_MMCTxData
//-----------------------------------------------------------------------------
/* 
routine description:
  Trigger hardware to transmit one block data to MMC card
arguments:
  None
return value:
  None
*/

void L2_MMCTxData(void) USING_0
{
//	PRINT_L2("        L2_MMCTxData: Enter L2_MMCTxData\n");
    XBYTE[0x2452] = 0x04;
//    PRINT_L2("        L2_MMCTxData: Exit L2_MMCTxData\n");		
}


//-----------------------------------------------------------------------------
//L2_MMCRxData
//-----------------------------------------------------------------------------
/* 
routine description:
  Trigger hardware to receive one block data to MMC card
arguments:
  None
return value:
  None
*/

void L2_MMCRxData(void) USING_0
{
//	PRINT_L2("        L2_MMCRxData: Enter L2_MMCRxData\n");
    XBYTE[0x2452] = 0x04;
//    PRINT_L2("        L2_MMCRxData: Exit L2_MMCRxData\n");		
}


//-----------------------------------------------------------------------------
//L2_MMCRxCRC
//-----------------------------------------------------------------------------
/* 
routine description:
  Trigger hardware to receive the CRC check result of the card
arguments:
  None
return value:
  None
*/

void L2_MMCRxCRC(void) USING_0
{
//	PRINT_L2("        L2_MMCRxCRC: Enter L2_MMCRxCRC\n");
    XBYTE[0x2452] = 0x10;
//    PRINT_L2("        L2_MMCRxCRC: Exit L2_MMCRxCRC\n");		
}


//-----------------------------------------------------------------------------
//L2_MMCTxDummy
//-----------------------------------------------------------------------------
/* 
routine description:
  Trigger hardware to transmit 8 dummy clock cycles
arguments:
  None
return value:
  None
*/

void L2_MMCTxDummy(void) USING_0
{
//	PRINT_L2("        L2_MMCTxDummy: Enter L2_MMCTxDummy\n");
    XBYTE[0x2452] = 0x20;
//    PRINT_L2("        L2_MMCTxDummy: Exit L2_MMCTxDummy\n");		
}


//-----------------------------------------------------------------------------
//L2_MMCWaitIdle
//-----------------------------------------------------------------------------
/* 
routine description:
  Wait SPCA533 MMC interface to idle state
arguments:
  None
return value:
  None
*/
//patch4.5@ada@Add timeout count begin
UCHAR L2_MMCWaitIdle(void) USING_0
//void L2_MMCWaitIdle(void) USING_0
{
	USHORT timeout_count = 0xffff;

//	PRINT_L2("        L2_MMCWaitIdle: Enter L2_MMCWaitIdle\n");
    	while ((XBYTE[0x2454] & 0x0F) != 0x00)
	{
		if (timeout_count > 0)
		{
			timeout_count--;
		}
		else
		{
			return L2K_ERROR_GENERAL;
		}
	}

	return L2K_SUCCESS;
//    PRINT_L2("        L2_MMCWaitIdle: Exit L2_MMCWaitIdle\n");		
}
//patch4.5@ada@Add timeout count end

//-----------------------------------------------------------------------------
//L2_MMCCheckDat0
//-----------------------------------------------------------------------------
/* 
routine description:
  Check the status of pin "dat0"
arguments:
  Status : 0: dat0 is low
           1: dat0 is high
return value:
  None
*/

void L2_MMCCheckDat0(UCHAR* Status) USING_0
{
//	PRINT_L2("        L2_MMCCheckDat0: Enter L2_MMCCheckDat0\n");
    *Status = (XBYTE[0x2453] & 0x20) >> 5;
//    PRINT_L2("        L2_MMCCheckDat0: Exit L2_MMCCheckDat0\n");		
}


//-----------------------------------------------------------------------------
//L2_MMCReadPort
//-----------------------------------------------------------------------------
/* 
routine description:
  Read the MMC card data port
arguments:
  PortData : read data
return value:
  None

*/

void L2_MMCReadPort(UCHAR* PortData) USING_0
{
    UCHAR tmp0;
//	PRINT_L2("        L2_MMCReadPort: Enter L2_MMCReadPort\n");
    tmp0 = XBYTE[0x245A];
    *PortData = tmp0;
//	PRINT_FM("            L2_MMCReadPort: PortData = 8'h%x \n",(USHORT)tmp0);
//    PRINT_L2("        L2_MMCReadPort: Exit L2_MMCReadPort\n");		
}


//-----------------------------------------------------------------------------
//L2_MMCWritePort
//-----------------------------------------------------------------------------
/* 
routine description:
  Write the MMC card data port
arguments:
  PortData : write data
return value:
  None
*/

void L2_MMCWritePort(UCHAR PortData) USING_0
{
//	PRINT_L2("        L2_MMCWritePort: Enter L2_MMCWritePort(PortData=8'h%x)\n",(USHORT)PortData);
    XBYTE[0x2459] = PortData;	
//    PRINT_L2("        L2_MMCWritePort: Exit L2_MMCWritePort\n");
}

#endif



⌨️ 快捷键说明

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