亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mmc.c

?? under Gcc compiler
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**************************************************************************************
//------------------ MMC/SD-Card Reading and Writing implementation -------------------
//FileName     : mmc.c
//Function     : Connect AVR to MMC/SD 
//Created by   : ZhengYanbo
//Created date : 15/08/2005
//Version      : V1.2
//Last Modified: 19/08/2005
//Filesystem   : Read or Write MMC without any filesystem

//CopyRight (c) 2005 ZhengYanbo
//Email: Datazyb_007@163.com
****************************************************************************************/
#include <avr/io.h>
#include "mmc.h"

#if USE_MMC
//****************************************************************************
// Port Init
void MMC_Port_Init(void)
//****************************************************************************
{
   //Config ports 
   cbi(MMC_Direction_REG,SPI_DI);          //Set Pin MMC_DI as Input
   sbi(MMC_Direction_REG,SPI_Clock);       //Set Pin MMC_Clock as Output
   sbi(MMC_Direction_REG,SPI_DO);          //Set Pin MMC_DO as Output
   sbi(MMC_Direction_REG,MMC_Chip_Select); //Set Pin MMC_Chip_Select as Output
   //busy led port init
   sbi(MMC_Direction_REG,SPI_BUSY);        //Set spi busy led port output
   sbi(MMC_Write,SPI_BUSY);                      //busy led off
   
   sbi(MMC_Write,MMC_Chip_Select);                        //Set MMC_Chip_Select to High,MMC/SD Invalid.
}

//****************************************************************************
//Routine for Init MMC/SD card(SPI-MODE)
unsigned char MMC_Init(void)
//****************************************************************************
{  
   unsigned char retry,temp;
   unsigned char i;
   unsigned char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};
   
   //MMC_Port_Init(); //Init SPI port  

   for(i=0;i<200;i++) //Wait MMC/SD ready...
   {
      asm("nop");
   }
   
   Init_Flag=1; //Set the init flag

   for (i=0;i<0x0f;i++) 
   {
      Write_Byte_MMC(0xff); //send 74 clock at least!!!
   }
	
   //Send Command CMD0 to MMC/SD Card
   retry=0;
   do
   { //retry 200 times to send CMD0 command 
     temp=Write_Command_MMC(CMD);
     retry++;
     if(retry==200) 
     { //time out
       return(INIT_CMD0_ERROR);//CMD0 Error!
     }
   } 
   while(temp!=1);
   
   //Send Command CMD1 to MMC/SD-Card
   CMD[0] = 0x41; //Command 1
   CMD[5] = 0xFF;
   retry=0;
   do
   { //retry 100 times to send CMD1 command 
     temp=Write_Command_MMC(CMD);
     retry++;
     if(retry==100) 
     { //time out
       return(INIT_CMD1_ERROR);//CMD1 Error!
     }
   } 
   while(temp!=0);
   
   Init_Flag=0; //Init is completed,clear the flag 
   
   MMC_Disable();  //set MMC_Chip_Select to high 
   return(0); //All commands have been taken.
} 

//****************************************************************************
//returns the :
// 	size of the card in MB ( ret * 1024^2) == bytes
// 	sector count and multiplier MB are in u08 == C_SIZE / (2^(9-C_SIZE_MULT))
// 	name of the media 
void MMC_get_volume_info(void)
//****************************************************************************
{   
	//unsigned char i;
    VOLUME_INFO_TYPE MMC_volume_Info,*vinf;
    
    vinf=&MMC_volume_Info; //Init the pointoer;
	// read the CSD register
    Read_CSD_MMC(sectorBuffer.data);
	// get the C_SIZE value. bits [73:62] of data
	// [73:72] == sectorBuffer.data[6] && 0x03
	// [71:64] == sectorBuffer.data[7]
	// [63:62] == sectorBuffer.data[8] && 0xc0
	vinf->sector_count = sectorBuffer.data[6] & 0x03;
	vinf->sector_count <<= 8;
	vinf->sector_count += sectorBuffer.data[7];
	vinf->sector_count <<= 2;
	vinf->sector_count += (sectorBuffer.data[8] & 0xc0) >> 6;
		
	// get the val for C_SIZE_MULT. bits [49:47] of sectorBuffer.data
	// [49:48] == sectorBuffer.data[5] && 0x03
	// [47]    == sectorBuffer.data[4] && 0x80
	vinf->sector_multiply = sectorBuffer.data[9] & 0x03;
	vinf->sector_multiply <<= 1;
	vinf->sector_multiply += (sectorBuffer.data[10] & 0x80) >> 7;

	// work out the MBs
	// mega bytes in u08 == C_SIZE / (2^(9-C_SIZE_MULT))
	vinf->size_MB = vinf->sector_count >> (9-vinf->sector_multiply);
	// get the name of the card
	Read_CID_MMC(sectorBuffer.data);
	vinf->name[0] = sectorBuffer.data[3];
	vinf->name[1] = sectorBuffer.data[4];
	vinf->name[2] = sectorBuffer.data[5];
	vinf->name[3] = sectorBuffer.data[6];
	vinf->name[4] = sectorBuffer.data[7];
	vinf->name[5] = 0x00; //end flag
	/*----------------------------------------------------------
    LCDclrscr();
    //Print Product name on lcd
    i=0;
    writestring("Product:");
    while((vinf->name[i]!=0x00)&&(i<16)) writechar(vinf->name[i++]);
    //Print Card Size(eg:128MB)
    gotoxy(1,0);
    writestring("Tot:"); 
    writeNumber(vinf->size_MB); writestring("MB ");
    //gotoxy(2,0);
    //writestring("sector_mult:"); writeNumber(vinf->sector_multiply);
    //gotoxy(3,0);
    //writestring("sect_cnt:"); writeNumber(vinf->sector_count);*/
	
}

//****************************************************************************
//Send a Command to MMC/SD-Card
//Return: the second byte of response register of MMC/SD-Card
unsigned char Write_Command_MMC(unsigned char *CMD)
//****************************************************************************
{
   unsigned char tmp;
   unsigned char retry=0;
   unsigned char i;

   //set MMC_Chip_Select to high (MMC/SD-Card disable) 
   MMC_Disable();
   //send 8 Clock Impulse
   Write_Byte_MMC(0xFF);
   //set MMC_Chip_Select to low (MMC/SD-Card active)
   MMC_Enable();

   //send 6 Byte Command to MMC/SD-Card
   for (i=0;i<0x06;i++) 
   { 
      Write_Byte_MMC(*CMD++);
   }
   
   //get 16 bit response
   Read_Byte_MMC(); //read the first byte,ignore it. 
   do 
   {  //Only last 8 bit is used here.Read it out. 
      tmp = Read_Byte_MMC();
      retry++;
   }
   while((tmp==0xff)&&(retry<100)); 
   return(tmp);
}

//****************************************************************************
//Routine for reading a byte from MMC/SD-Card
unsigned char Read_Byte_MMC(void)
//****************************************************************************
{ 
   unsigned char temp=0;
   unsigned char i;

   cbi(MMC_Write,SPI_BUSY); //MMC_BUSY_LED=0;
   //Software SPI
   for (i=0; i<8; i++) //MSB First
   {
      cbi(MMC_Write,SPI_Clock); //Clock Impuls (Low)
      if(Init_Flag) delay_us_8_;
	  //read mmc data out pin
	  if((MMC_Read&(1<<SPI_DI))!=0)
		  temp = (temp << 1) + 1; 
	  else
		  temp = (temp << 1) + 0;
      sbi(MMC_Write,SPI_Clock); //set Clock Impuls High
      if(Init_Flag) delay_us_8_;	
   }
   sbi(MMC_Write,SPI_BUSY); //MMC_BUSY_LED=1;
   return (temp);
}

//****************************************************************************
//Routine for sending a byte to MMC/SD-Card
void Write_Byte_MMC(unsigned char value)
//****************************************************************************
{ 
   unsigned char i; 
   
   cbi(MMC_Write,SPI_BUSY); //MMC_BUSY_LED=0; 
   //Software SPI
   for (i=0; i<8; i++) 
   {  //write a byte
      if (((value >> (7-i)) & 0x01)==0x01)
		  sbi(MMC_Write,SPI_DO); //Send bit by bit(MSB First)
      else
		  cbi(MMC_Write,SPI_DO);
      cbi(MMC_Write,SPI_Clock); //set Clock Impuls low
      if(Init_Flag) delay_us_8_; 
      sbi(MMC_Write,SPI_Clock); //set Clock Impuls High
      if(Init_Flag) delay_us_8_;     
   }//write a byte
   sbi(MMC_Write,SPI_DO);	//set Output High 
   sbi(MMC_Write,SPI_BUSY); //MMC_BUSY_LED=1;
}

//****************************************************************************
//Routine for writing a Block(512Byte) to MMC/SD-Card
//Return 0 if sector writing is completed.
unsigned char MMC_write_sector(unsigned long addr,unsigned char *Buffer)
//****************************************************************************
{  
   unsigned char tmp,retry;
   unsigned int i;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩免费视频| 色成人在线视频| 天天影视涩香欲综合网| 亚洲另类中文字| 亚洲欧美日韩久久| 亚洲色图视频网站| 亚洲一区二区三区小说| 亚洲一区二区三区四区在线免费观看 | 日韩精品在线一区| 91精品婷婷国产综合久久竹菊| 欧美高清一级片在线| 欧美一区二区在线免费观看| 欧美成人高清电影在线| 欧美精品一区二区三区高清aⅴ| 久久众筹精品私拍模特| 国产精品久久99| 亚洲一二三区在线观看| 美腿丝袜亚洲一区| 国产精品18久久久久久久久| av影院午夜一区| 欧美午夜一区二区| 日韩亚洲国产中文字幕欧美| 国产三级欧美三级日产三级99| 国产精品三级视频| 亚洲一二三区视频在线观看| 极品少妇xxxx精品少妇偷拍| 成人国产精品免费网站| 欧美日韩一区二区在线观看视频| 91精品国产综合久久婷婷香蕉 | 欧美激情在线一区二区三区| 中文字幕亚洲一区二区av在线| 亚洲最大的成人av| 激情综合五月天| 色婷婷综合久久久久中文| 欧美日韩成人一区二区| 欧美国产国产综合| 国产一区二区日韩精品| 99视频热这里只有精品免费| 欧美一区二区人人喊爽| 国产精品热久久久久夜色精品三区| 亚洲高清免费观看| 成人黄色小视频| 日韩欧美国产三级| 一区二区三区在线不卡| 国产精品123| 欧美精品自拍偷拍动漫精品| 亚洲手机成人高清视频| 国产精品资源网| 91精品在线麻豆| 亚洲线精品一区二区三区八戒| 国产99久久久国产精品免费看| 欧美麻豆精品久久久久久| 国产精品国产成人国产三级| 国产中文一区二区三区| 91精品欧美久久久久久动漫 | 激情文学综合网| 欧美高清视频不卡网| 亚洲人一二三区| 粉嫩绯色av一区二区在线观看| 欧美一级欧美一级在线播放| 伊人婷婷欧美激情| av在线不卡网| 国产精品久久久久久久久免费樱桃| 成人a区在线观看| 久久久国产午夜精品| 久久精品国产亚洲aⅴ| 欧美日韩高清一区二区三区| 有码一区二区三区| av成人动漫在线观看| 国产精品视频在线看| 成人夜色视频网站在线观看| 精品成人在线观看| 九九精品一区二区| 久久午夜国产精品| 国产在线一区观看| 国产人成亚洲第一网站在线播放| 国产综合成人久久大片91| 欧美成人bangbros| 国产精品99久久久久久久女警| 久久久综合九色合综国产精品| 国产在线观看免费一区| 国产欧美日韩三区| 成人av电影免费观看| 亚洲视频免费在线观看| 久久精品一区二区三区四区| 国产一区二区三区在线观看免费| 色欧美88888久久久久久影院| 久久九九久精品国产免费直播| 国产激情视频一区二区三区欧美| 日本一区二区三区国色天香| 色综合久久中文字幕综合网 | 久久精品国产99久久6| 精品日韩99亚洲| 国产成人h网站| 自拍偷自拍亚洲精品播放| 欧美亚洲综合一区| 美国欧美日韩国产在线播放| 久久久精品免费网站| 91久久国产最好的精华液| 婷婷丁香久久五月婷婷| 欧美精品一区二区在线观看| 99久久婷婷国产综合精品电影| 亚洲高清不卡在线观看| 精品久久久三级丝袜| 97久久精品人人做人人爽| 午夜精品在线看| 国产三区在线成人av| 欧美日本一区二区在线观看| 国产精品99久久久久久似苏梦涵| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲激情成人在线| 久久久久久久久伊人| 欧美午夜精品理论片a级按摩| 久久97超碰国产精品超碰| 亚洲免费观看高清完整| 精品国产成人在线影院| 在线精品视频小说1| 极品美女销魂一区二区三区| 一区二区三区四区不卡在线| 久久久久久久综合色一本| 欧美精品一二三区| 99热国产精品| 国产裸体歌舞团一区二区| 午夜视频在线观看一区二区三区| 中文字幕精品一区二区精品绿巨人 | 国产日本一区二区| 日韩欧美一区在线观看| 日本福利一区二区| 不卡视频在线看| 国产综合成人久久大片91| 日韩主播视频在线| 亚洲精品乱码久久久久久久久| 久久精品无码一区二区三区| 日韩一区二区免费视频| 欧美午夜宅男影院| 日本韩国视频一区二区| 成人高清av在线| 国产.欧美.日韩| 韩国女主播成人在线| 久久av资源网| 青青草国产精品97视觉盛宴| 五月天中文字幕一区二区| 亚洲综合久久av| 一级精品视频在线观看宜春院| 国产精品福利影院| 日本一区二区三区四区| 久久久国产精品麻豆| 久久久噜噜噜久久人人看| 久久久国产精华| 亚洲国产精品黑人久久久| 欧美国产一区在线| 国产精品成人一区二区艾草 | 国产亚洲人成网站| 欧美精品一区男女天堂| 久久精品夜色噜噜亚洲aⅴ| 国产欧美日韩亚州综合| 国产精品丝袜一区| 亚洲三级电影全部在线观看高清| 亚洲精品你懂的| 日韩在线a电影| 男男视频亚洲欧美| 国产美女娇喘av呻吟久久| 国产成人高清视频| 色哟哟精品一区| 欧美日韩国产中文| 精品少妇一区二区| 亚洲国产精华液网站w| 国产精品久久久久久久久免费桃花| 亚洲视频在线一区二区| 亚洲国产综合视频在线观看| 婷婷开心久久网| 国产精品一区久久久久| gogogo免费视频观看亚洲一| 欧美专区亚洲专区| 日韩一区二区免费在线观看| 欧美激情一区二区三区蜜桃视频| 亚洲欧美国产毛片在线| 日韩中文字幕一区二区三区| 国产一区二区网址| 色狠狠一区二区| 精品国产髙清在线看国产毛片| 国产精品久久久久久亚洲伦| 日韩专区在线视频| 99九九99九九九视频精品| 欧美日韩国产一级二级| 国产婷婷色一区二区三区四区| 国产精品久久久久久久裸模| 青青草国产成人av片免费| 成人av电影在线| 欧美大片在线观看一区二区| 亚洲天天做日日做天天谢日日欢| 免费人成在线不卡| 色综合久久中文综合久久97| 精品国产亚洲一区二区三区在线观看| 亚洲日本va在线观看| 国产一区二区视频在线| 欧美区在线观看| 中文字幕在线不卡一区二区三区| 蜜臀久久99精品久久久画质超高清 | 亚洲一二三区视频在线观看|