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

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

?? mmc.c

?? MMC卡SPI最簡單操作例子 MMC卡SPI最簡單操作例子
?? 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 "mmc.h"

#if USE_MMC
//****************************************************************************
// Port Init
void MMC_Port_Init(void)
//****************************************************************************
{
   //Config ports 
   MMC_Direction_REG.SPI_DI=0;          //Set Pin MMC_DI as Input
   MMC_Direction_REG.SPI_Clock=1;       //Set Pin MMC_Clock as Output
   MMC_Direction_REG.SPI_DO=1;          //Set Pin MMC_DO as Output
   MMC_Direction_REG.MMC_Chip_Select=1; //Set Pin MMC_Chip_Select as Output
   //busy led port init
   MMC_Direction_REG.SPI_BUSY=1;        //Set spi busy led port output
   MMC_BUSY_LED=1;                      //busy led off
   
   MMC_CS_PIN=1;                        //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;

   MMC_BUSY_LED=0;
   //Software SPI
   for (i=0; i<8; i++) //MSB First
   {
      MMC_CLK_PIN=0; //Clock Impuls (Low)
      if(Init_Flag) delay_us(8);
      temp = (temp << 1) + MMC_DO_PIN; //read mmc data out pin 
      MMC_CLK_PIN=1; //set Clock Impuls High
      if(Init_Flag) delay_us(8);	
   }
   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; 
   
   MMC_BUSY_LED=0; 
   //Software SPI
   for (i=0; i<8; i++) 
   {  //write a byte
      if (((value >> (7-i)) & 0x01)==0x01) MMC_DI_PIN=1; //Send bit by bit(MSB First)
      else MMC_DI_PIN=0;
      MMC_CLK_PIN=0; //set Clock Impuls low
      if(Init_Flag) delay_us(8); 
      MMC_CLK_PIN=1; //set Clock Impuls High
      if(Init_Flag) delay_us(8);     
   }//write a byte
   MMC_DI_PIN=1;	//set Output High 
   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;
   //Command 24 is a writing blocks command for MMC/SD-Card.
   unsigned char CMD[] = {0x58,0x00,0x00,0x00,0x00,0xFF}; 
   
   #asm("cli"); //clear all interrupt.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲欧美一区在线观看| 亚洲国产精品av| 久久网站最新地址| 国产精品久久久久久久久久免费看| 亚洲免费观看视频| 国产成人综合亚洲91猫咪| 在线观看av一区| 亚洲国产成人午夜在线一区| 日韩精品一二三区| 日本乱人伦aⅴ精品| 日本一区二区三区视频视频| 日本女人一区二区三区| 日本黄色一区二区| 欧美韩国一区二区| 精品一区二区免费| 欧美色涩在线第一页| 日本一区二区电影| 国产夫妻精品视频| 精品91自产拍在线观看一区| 午夜精品久久久久久不卡8050| 97精品超碰一区二区三区| 久久视频一区二区| 美女精品自拍一二三四| 91.xcao| 亚洲一区二区在线视频| 一本久久精品一区二区| 亚洲裸体在线观看| 91亚洲国产成人精品一区二区三| 国产午夜亚洲精品午夜鲁丝片 | 久久久久九九视频| 日本视频一区二区三区| 欧美精品一二三四| 日韩—二三区免费观看av| 精品视频一区二区不卡| 亚洲午夜成aⅴ人片| 欧美色精品在线视频| 亚洲一区二区欧美激情| 欧美中文一区二区三区| 香蕉久久一区二区不卡无毒影院| 欧美视频一区二区三区| 天堂午夜影视日韩欧美一区二区| 9191成人精品久久| 青草国产精品久久久久久| 日韩欧美不卡在线观看视频| 久久草av在线| 国产欧美日韩麻豆91| 色欧美片视频在线观看| 亚洲一二三四在线| 制服丝袜日韩国产| 国内成人自拍视频| 国产精品久久久久影院亚瑟| 色妹子一区二区| 日本中文在线一区| 国产亚洲美州欧州综合国| 91一区二区在线观看| 五月综合激情网| 欧美不卡123| 成人18视频在线播放| 丝袜国产日韩另类美女| 69堂成人精品免费视频| 久久99国产精品久久| 欧美激情一区二区在线| 在线免费观看一区| 久久精品国产网站| 亚洲天堂成人在线观看| 欧美高清性hdvideosex| 国产成人精品免费看| 亚洲午夜激情网页| 久久久国产精华| 欧洲人成人精品| 精品一区二区在线视频| 亚洲精品中文在线| xfplay精品久久| 色婷婷精品大在线视频| 韩国欧美国产一区| 亚洲一区二区三区四区不卡| 国产亚洲va综合人人澡精品 | 91网上在线视频| 蜜臀av在线播放一区二区三区 | 粉嫩嫩av羞羞动漫久久久| 亚洲成av人**亚洲成av**| 国产欧美日韩另类视频免费观看| 欧美日韩午夜影院| 成人av免费在线| 久久国产精品无码网站| 亚洲自拍偷拍av| 国产精品女主播av| 欧美精品一区二区三区蜜桃| 欧美日韩小视频| 91麻豆高清视频| 国产成人啪午夜精品网站男同| 天堂久久一区二区三区| 亚洲另类春色校园小说| 国产婷婷色一区二区三区四区| 5月丁香婷婷综合| 欧美日韩精品高清| 色婷婷综合中文久久一本| 国产凹凸在线观看一区二区| 久久国产精品色婷婷| 日韩专区欧美专区| 亚洲资源中文字幕| 亚洲欧美激情一区二区| 国产精品国产三级国产aⅴ入口 | 色哟哟一区二区三区| 91小视频免费看| 国内精品视频666| 韩国视频一区二区| 久久99国产精品免费| 日本美女一区二区三区| 天天影视涩香欲综合网| 亚洲国产va精品久久久不卡综合| 亚洲男同性恋视频| 亚洲另类春色校园小说| 亚洲女人****多毛耸耸8| 亚洲天堂成人网| 一区二区欧美在线观看| 亚洲精品自拍动漫在线| 亚洲一区二区三区免费视频| 亚洲午夜免费电影| 丝袜亚洲另类丝袜在线| 丝袜美腿高跟呻吟高潮一区| 日韩电影在线一区| 乱一区二区av| 国产一区二区三区蝌蚪| 成人激情小说乱人伦| 91丝袜高跟美女视频| 91国在线观看| 欧美日韩性生活| 精品国产人成亚洲区| 国产日韩亚洲欧美综合| 成人欧美一区二区三区黑人麻豆| 亚洲欧美日韩国产中文在线| 玉足女爽爽91| 日本免费新一区视频| 国产成人免费网站| 一本色道久久综合亚洲91| 91精品国产一区二区三区蜜臀 | 欧美精品在线视频| 欧美xxxxx裸体时装秀| 国产日韩综合av| 亚洲网友自拍偷拍| 精品一二线国产| 色综合天天综合网天天狠天天| 69堂亚洲精品首页| 国产精品美女www爽爽爽| 亚洲综合色丁香婷婷六月图片| 免费成人在线网站| 成人激情黄色小说| 欧美日韩免费观看一区三区| 精品久久五月天| 亚洲视频免费观看| 久久国产视频网| 色综合天天综合在线视频| 日韩精品一区二区三区中文不卡 | 天堂va蜜桃一区二区三区| 激情综合色播激情啊| 色呦呦国产精品| 久久精品亚洲国产奇米99| 亚洲综合一区在线| 国产一区91精品张津瑜| 欧美中文字幕不卡| 国产精品午夜免费| 蜜臀久久99精品久久久画质超高清| www.亚洲在线| 精品少妇一区二区三区在线播放 | 欧美精品久久一区二区三区| 国产欧美日韩三区| 成人免费看视频| 欧美日韩国产精品自在自线| 国产欧美一区二区精品婷婷| 午夜欧美视频在线观看| 不卡视频一二三四| 欧美电影免费观看高清完整版在线 | 日韩一区二区三区视频在线 | 国产精品另类一区| 免费成人在线影院| 欧美日韩国产中文| 亚洲蜜臀av乱码久久精品| 国产精品一区二区免费不卡| 欧美男人的天堂一二区| 亚洲美女屁股眼交3| 成人免费福利片| 久久久夜色精品亚洲| 麻豆91在线观看| 欧美日韩精品一区二区三区四区 | 亚洲愉拍自拍另类高清精品| 不卡的电影网站| 国产欧美一区二区精品性色| 美国三级日本三级久久99| 欧美日韩三级在线| 亚洲最大色网站| 色琪琪一区二区三区亚洲区| 国产精品成人一区二区三区夜夜夜| 国产一区在线观看视频| 欧美电视剧在线看免费| 日韩黄色免费电影| 51精品视频一区二区三区| 视频一区二区三区入口| 7777精品伊人久久久大香线蕉超级流畅 | 精品一区二区三区免费播放|