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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mmc.c

?? MMC卡SPI最簡(jiǎn)單操作例子 MMC卡SPI最簡(jiǎn)單操作例子
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/**************************************************************************************
//------------------ 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.

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情一区二区三区蜜桃视频| 日本一区二区三级电影在线观看| 精品一区二区免费看| 中文字幕中文字幕一区二区| 337p亚洲精品色噜噜噜| 成人免费视频免费观看| 免费国产亚洲视频| 一区二区三区四区不卡在线| 久久久欧美精品sm网站| 在线免费观看日韩欧美| 成人午夜电影久久影院| 日韩电影在线一区| 亚洲乱码一区二区三区在线观看| 久久综合久久综合久久综合| 欧美人妖巨大在线| 一本色道亚洲精品aⅴ| 国产精品996| 久久成人免费网| 日日噜噜夜夜狠狠视频欧美人| 国产精品麻豆99久久久久久| 欧美xxxx在线观看| 在线电影欧美成精品| 91黄色激情网站| 97精品久久久午夜一区二区三区 | 不卡一区二区三区四区| 精品一区二区三区在线观看国产| 夜夜爽夜夜爽精品视频| 中文字幕在线观看不卡| 久久影院午夜论| 精品日韩欧美在线| 日韩午夜电影在线观看| 欧美日韩激情一区二区| 在线区一区二视频| 在线观看亚洲专区| 91久久精品日日躁夜夜躁欧美| 成人午夜激情片| 成人免费高清在线| 成人h精品动漫一区二区三区| 国产高清无密码一区二区三区| 国产主播一区二区| 国产激情偷乱视频一区二区三区| 狠狠色综合播放一区二区| 精品一区免费av| 国产一区二区在线观看视频| 精品综合久久久久久8888| 麻豆国产91在线播放| 久久99国产精品久久99| 国产美女精品在线| 成人免费视频视频在线观看免费| 高清不卡一区二区在线| av亚洲精华国产精华精华| 一本大道久久a久久综合| 91国偷自产一区二区使用方法| 91国模大尺度私拍在线视频| 欧美在线免费播放| 91精品国产91综合久久蜜臀| 日韩欧美精品在线视频| 国产婷婷一区二区| 亚洲人成小说网站色在线| 一区二区三区中文免费| 亚洲gay无套男同| 免费成人小视频| 成人做爰69片免费看网站| 99re8在线精品视频免费播放| 91福利在线播放| 7799精品视频| 欧美白人最猛性xxxxx69交| 欧美经典一区二区三区| 91黄色激情网站| 在线亚洲高清视频| 337p亚洲精品色噜噜噜| 日本道色综合久久| 欧美色男人天堂| 精品久久久久一区二区国产| 久久久欧美精品sm网站| 精品国产乱码久久久久久夜甘婷婷| 欧美精品丝袜中出| 国产精品久久久久婷婷| 亚洲裸体xxx| 在线观看视频一区二区| 国产成人aaa| 亚洲天堂免费看| 日韩你懂的在线播放| 91麻豆免费观看| 国产一区二区三区免费| 性感美女极品91精品| 国产精品美女久久久久久久久久久 | 国产一区二区在线电影| 亚洲第一综合色| 最新成人av在线| 欧美精品一区二区三区蜜桃 | 精品区一区二区| 欧美日韩成人综合在线一区二区| 国产成人精品一区二| 日韩不卡一二三区| 一区二区高清免费观看影视大全 | 悠悠色在线精品| 国产精品人成在线观看免费| 久久久久久麻豆| 欧美日本不卡视频| 在线观看免费一区| 91亚洲精品久久久蜜桃| 国产大片一区二区| 国内外精品视频| 麻豆freexxxx性91精品| 天天综合天天综合色| 亚洲一区免费观看| 日韩理论电影院| 国产精品久久三| 中文字幕中文字幕一区二区| 亚洲国产岛国毛片在线| 国产欧美va欧美不卡在线| 久久综合中文字幕| 国产三级一区二区| 国产欧美日韩另类一区| 久久久精品综合| 欧美国产精品一区二区三区| 国产亚洲va综合人人澡精品| 久久青草国产手机看片福利盒子| 精品国产一区二区三区不卡| 精品福利一区二区三区| 精品福利二区三区| 亚洲国产精品ⅴa在线观看| 国产精品乱码人人做人人爱 | 久久先锋影音av鲁色资源| 久久亚洲综合色一区二区三区| 久久综合九色综合97婷婷| 久久无码av三级| 国产精品福利一区| 亚洲裸体xxx| 日韩高清在线观看| 国产精品一区在线| 91在线视频网址| 欧美日韩国产小视频在线观看| 欧美日韩一区二区三区不卡| 9191国产精品| 久久这里只精品最新地址| 成人免费在线播放视频| 一区二区高清免费观看影视大全 | 玉米视频成人免费看| 天堂蜜桃一区二区三区 | 欧美精品一区二区三区蜜桃 | 久久久不卡影院| 亚洲日本在线a| 日本在线不卡视频| 国产91丝袜在线18| 精品88久久久久88久久久| 国产精品国产三级国产| 亚洲高清三级视频| 国产精品亚洲人在线观看| 欧美影院一区二区三区| 欧美成人精精品一区二区频| 亚洲天堂av老司机| 美女视频免费一区| 91玉足脚交白嫩脚丫在线播放| 91精品国产欧美一区二区18| 亚洲国产精品精华液ab| 日本亚洲三级在线| www.日本不卡| 欧美成人乱码一区二区三区| 亚洲精品美腿丝袜| 久久91精品国产91久久小草| 日本乱码高清不卡字幕| 久久久青草青青国产亚洲免观| 亚洲一区二区高清| 懂色av中文一区二区三区| 欧美一区二区啪啪| 亚洲精品菠萝久久久久久久| 国产一区999| 91精品免费在线观看| 亚洲九九爱视频| 粉嫩av一区二区三区粉嫩| 日韩欧美资源站| 亚洲国产成人高清精品| 国产成人免费在线观看不卡| 欧美一区二区三区四区高清| 亚洲欧美日韩一区二区| 国产精品一二一区| 日韩视频免费观看高清完整版在线观看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲婷婷综合色高清在线| 激情五月婷婷综合| 91精品在线一区二区| 亚洲一区二区在线免费看| 国产老女人精品毛片久久| 日韩精品在线网站| 奇米777欧美一区二区| 欧美日韩国产大片| 亚洲免费在线看| 91丨porny丨户外露出| 国产精品福利av| www.综合网.com| 国产精品视频你懂的| 国产精品中文字幕欧美| 久久综合色鬼综合色| 国产剧情一区在线| 久久九九99视频| 成人黄色免费短视频| 国产精品国产三级国产a| www.亚洲国产|