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

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

?? mmc.c

?? SD卡讀寫源程序 環境為IAR 硬件平臺MEGA16
?? C
字號:
#include "mmc.h"
/******************************************************************************
                    FileName: mmc.c
                  
                    Description: MMC/SD卡驅動   

          Author:WangWeimin       Version : V1.0         Date: 2009/01/31
所引用的與硬件有關的函數如下:

                            void SPI_MasterInit(void)
                
                            U08 mmc_read_byte (void)
                
                            void mmc_write_byte (U08 _Byte_)
                
                            void uart_puthex(U8 hex)
                
                            void uart_putchar (U8 c)
                
                            void uart_putstring(U8 *s)
                    宏定義:
                                            
                            nop()
                
                            uart_innit()
                
                            MMC_Disable() 
                
                            MMC_Enable()
*******************************************************************************/
/*******************************************************************************/
/************************以下宏定義與硬件有關***********************************/
/*****************************移植須注意****************************************/
/*******************************************************************************/
/******************************************************************************/
//############################################################################
void SPI_MasterInit(void)
//############################################################################
{
spi_init();
}
//############################################################################
U08 mmc_read_byte (void)
//############################################################################
{
return (spi_read());
}
//############################################################################
void mmc_write_byte (U08 _Byte_)
//############################################################################
{
spi_write(_Byte_);
}

//############################################################################
//############################################################################
void uart_putchar (U8 c)
//############################################################################
{
while ( !( UCSRA & (1<<UDRE)) );
UDR = c;
}
//############################################################################
void uart_puthex(U8 hex)
//############################################################################
{
U8 data[16]={"0123456789ABCDEF"};
uart_putchar('0');
uart_putchar('X');
uart_putchar(data[hex/16]);
uart_putchar(data[hex%16]);
}
//############################################################################
void uart_putstring(U8 *s)
//############################################################################
{
while(*s)
uart_putchar(*s++);
}
/******************************************************************************/
/************************以下與硬件無關***************************************/
/******************************************************************************/
//############################################################################
U08 mmc_init ()
//############################################################################
{
U08 Timeout = 0,a;
U08 CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};

MMC_Disable();

for(a=0;a<200;a++){ nop(); };

for (a = 0;a<20;a++)
{ 
mmc_read_byte();		
}

MMC_Enable();

for(a=0;a<200;a++){ nop(); };

while( mmc_write_command (CMD)!=1)
{
if (Timeout++ > 254)
{
 return(1);
}
}

Timeout = 0;
CMD[0] = 0x41;
//CMD[5]=0XFF;
while( mmc_write_command (CMD) !=0)
{
if (Timeout++ > 200)
{
return(2);
}
}

return(0);
}
//############################################################################
void mmc_goidel()
//############################################################################
{
U08 Timeout = 0;
U08 CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};
while( mmc_write_command (CMD)!=1)
{
if (Timeout++ > 200)
{
 return;//(1);
}
}

}
//############################################################################
U08 mmc_write_command ( U08 *cmd )
//############################################################################
{
U08 tmp=0xff;
U08 a;
for(a=0;a<16;a++) mmc_read_byte();
for(a=0;a<6;a++)  mmc_write_byte(cmd[a]);
for(a=0;a< 100;a++) 
{
tmp=mmc_read_byte();
if (tmp!=0xff)    break;
}
return(tmp);
}

//############################################################################
U08 mmc_write_sector (U32 addr,U08 *Buffer)
//############################################################################
{
U08 tmp;
U08 cmd[] = {0x58,0x00,0x00,0x00,0x00,0xFF}; 
U16 a;
addr = addr << 9; //addr = addr * 512
cmd[1] = ((addr & 0xFF000000) >>24 );
cmd[2] = ((addr & 0x00FF0000) >>16 );
cmd[3] = ((addr & 0x0000FF00) >>8 );
tmp = mmc_write_command (cmd);
if (tmp != 0)
{
return(tmp);
}
for (a=0;a<100;a++)
{
mmc_read_byte();
}
mmc_write_byte(0xFE);	
for (a=0;a<512;a++)
{
mmc_write_byte(*Buffer++);
}
mmc_write_byte(0xFF); //Schreibt Dummy CRC
mmc_write_byte(0xFF); //CRC Code wird nicht benutzt
while (mmc_read_byte() != 0xff){};
return(0);
}
//############################################################################
void mmc_set_blocklen(U32 BLOCKLENTH,U8 RW)//1:read   0:write
//############################################################################
{
U08 cmd[] = {0x50,0x00,0x00,0x00,0x00,0xFF};
BLOCKLENTH = BLOCKLENTH << 1; //addr = addr * 512
cmd[1] = ((BLOCKLENTH & 0xFF000000) >>24 );
cmd[2] = ((BLOCKLENTH & 0x00FF0000) >>16 );
cmd[3] = ((BLOCKLENTH & 0x0000FF00) >>8 );
cmd[3] = BLOCKLENTH+(RW&0x01);
if (mmc_write_command (cmd) != 0)
{
  uart_putchar('*');
return;
}
mmc_read_byte();//CRC - Byte wird nicht ausgewertet
mmc_read_byte();//CRC - Byte wird nicht ausgewertet
}
//############################################################################
void mmc_read_block(U08 *cmd,U08 *Buffer,U16 Bytes)
//############################################################################
{	
U16 a;
if (mmc_write_command (cmd) != 0)
{
return;
}
while (mmc_read_byte() != 0xfe){};
for (a=0;a<Bytes;a++)
{
*Buffer++ = mmc_read_byte();
}
mmc_read_byte();//CRC - Byte wird nicht ausgewertet
mmc_read_byte();//CRC - Byte wird nicht ausgewertet
}
//############################################################################
void mmc_print_block(U32 addr,U16 Bytes)
//############################################################################
{	
U16 a;
U08 cmd[] = {0x51,0x00,0x00,0x00,0x00,0xFF};
cmd[1] = ((addr & 0xFF000000) >>24 );
cmd[2] = ((addr & 0x00FF0000) >>16 );
cmd[3] = ((addr & 0x0000FF00) >>8 );
cmd[4] =   addr&0xff;
if (mmc_write_command (cmd) != 0)
{
return;
}
while (mmc_read_byte() != 0xfe){};
for (a=0;a<Bytes;a++)
{
uart_puthex(mmc_read_byte());
if((a+1)%16==0)uart_putchar('\r');
}
mmc_read_byte();//CRC - Byte wird nicht ausgewertet
mmc_read_byte();//CRC - Byte wird nicht ausgewertet
}
//############################################################################
void mmc_write_block(U32 addr,U16 Bytes)////////////////////////////////////////////////////////////
//############################################################################
{	
U16 a;
U08 cmd[] = {0x58,0x00,0x00,0x00,0x00,0xFF};
cmd[1] = ((addr & 0xFF000000) >>24 );
cmd[2] = ((addr & 0x00FF0000) >>16 );
cmd[3] = ((addr & 0x0000FF00) >>8 );
cmd[4] =   addr&0xff;
if (mmc_write_command (cmd) != 0)
{
return;
}
for (a=0;a<100;a++)
{
mmc_read_byte();
}
mmc_write_byte(0xFE);	
for (a=0;a<Bytes;a++)
{
mmc_write_byte(a);
}
//if(Bytes<512){
//for(a=0;a<(512-Bytes);a++)
//mmc_read_byte();
//}

mmc_write_byte(0xFF); //Schreibt Dummy CRC
mmc_write_byte(0xFF); //CRC Code wird nicht benutzt
while (mmc_read_byte() != 0xff);
}
//############################################################################
void mmc_read_sector (U32 addr,U08 *Buffer)
//############################################################################
{	
U08 cmd[] = {0x51,0x00,0x00,0x00,0x00,0xFF}; 
addr = addr << 9; //addr = addr * 512
cmd[1] = ((addr & 0xFF000000) >>24 );
cmd[2] = ((addr & 0x00FF0000) >>16 );
cmd[3] = ((addr & 0x0000FF00) >>8 );
mmc_read_block(cmd,Buffer,512);
}
//############################################################################
void mmc_read_cid (U08 *Buffer)
//############################################################################
{
U08 cmd[] = {0x4A,0x00,0x00,0x00,0x00,0xFF}; 
mmc_read_block(cmd,Buffer,16);
}
//############################################################################
void mmc_read_csd (U08 *Buffer)
//############################################################################
{	
U08 cmd[] = {0x49,0x00,0x00,0x00,0x00,0xFF};
mmc_read_block(cmd,Buffer,16);
}
/******************************************************************************/
/************************以下僅做測試用****************************************/
/******************************************************************************/
/*************************************************

  Function:       // 將一個八位的二進制數 hex 放入一個扇區

  Description:    // 僅用于測試MMC卡

  Input:          //addr:第幾個扇區  hex:八位的二進制數

*************************************************/
//############################################################################
U08 write_section(U32 addr,U8 hex)
//############################################################################
{
U08 tmp;
U08 cmd[] = {0x58,0x00,0x00,0x00,0x00,0xFF}; 
U16 a;
addr = addr << 9; //addr = addr * 512
cmd[1] = ((addr & 0xFF000000) >>24 );
cmd[2] = ((addr & 0x00FF0000) >>16 );
cmd[3] = ((addr & 0x0000FF00) >>8 );
tmp = mmc_write_command (cmd);
if (tmp != 0)
{
return(tmp);
}
for (a=0;a<100;a++)
{
mmc_read_byte();
}
mmc_write_byte(0xFE);	
for (a=0;a<512;a++)
{
mmc_write_byte(hex);
}
mmc_write_byte(0xFF); //Schreibt Dummy CRC
mmc_write_byte(0xFF); //CRC Code wird nicht benutzt
while (mmc_read_byte() != 0xff){};
return(0);
}
/*************************************************

  Function:       // 打印一個扇區的內容,以HEX形式用串口顯示

  Description:    // 僅用于測試MMC卡

  Input:          //addr:第幾個扇區

*************************************************/
//############################################################################
void print_section(U32 addr)
//############################################################################
{
U08 cmd[] = {0x51,0x00,0x00,0x00,0x00,0xFF}; 
U32 a;
addr = addr << 9; //addr = addr * 512
cmd[1] =addr >>24;
cmd[2] =addr>>16;
cmd[3] =addr>>8;//&0xfe;
//cmd[4] =addr;
if (mmc_write_command (cmd) != 0)
{
return;
}
while (mmc_read_byte() != 0xfe);
a=0;
while(a<512)
{
uart_puthex(mmc_read_byte());
a++;
if((a%16)==0) uart_putchar('\r');
}
mmc_read_byte();//CRC - Byte wird nicht ausgewertet
mmc_read_byte();//CRC - Byte wird nicht ausgewertet
}
/*************************************************

  Function:       // 打印csd數據

  Description:    // 僅用于測試MMC卡

  Input:          //Buffer:一個16*1字節的數組

*************************************************/
//############################################################################
void print_csd(U08 *Buffer)
//############################################################################
{
U08 tmp;
mmc_read_csd(Buffer);
for (tmp = 0;tmp<16;tmp++)
{
uart_puthex(Buffer[tmp]);
}
}
/*************************************************

  Function:       // 打印cid數據

  Description:    // 僅用于測試MMC卡

  Input:          //Buffer:一個16*1字節的數組

*************************************************/
//############################################################################
void print_cid(U08 *Buffer)
//############################################################################
{
U08 tmp;
mmc_read_cid(Buffer);
for (tmp = 0;tmp<16;tmp++)
{
uart_putchar(Buffer[tmp]);
}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
波多野结衣亚洲一区| 国产精品1区2区| 粗大黑人巨茎大战欧美成人| 91在线精品一区二区三区| 日韩欧美中文字幕制服| 亚洲免费观看高清完整版在线观看| 免费成人在线网站| 欧美伊人精品成人久久综合97| 国产情人综合久久777777| 在线区一区二视频| 中文字幕一区二区三区av| 国模娜娜一区二区三区| 在线电影欧美成精品| 一区二区三区在线看| 亚洲精品中文字幕乱码三区| 日本欧美韩国一区三区| 欧美视频你懂的| 亚洲色欲色欲www| 高清在线成人网| 久久无码av三级| 韩日av一区二区| 精品国产自在久精品国产| 日本午夜一区二区| 欧美疯狂做受xxxx富婆| 亚洲国产精品视频| 色狠狠色狠狠综合| 伊人色综合久久天天人手人婷| 成人动漫一区二区在线| 国产精品美女一区二区| kk眼镜猥琐国模调教系列一区二区| 国产色婷婷亚洲99精品小说| 寂寞少妇一区二区三区| 久久久精品一品道一区| 国产精品66部| 中文字幕 久热精品 视频在线| 久久日韩精品一区二区五区| 国产乱理伦片在线观看夜一区| 26uuu精品一区二区在线观看| 蜜臀精品一区二区三区在线观看 | 99精品视频免费在线观看| 亚洲精品在线电影| 国产精品一区三区| 亚洲日本在线观看| 欧美丝袜自拍制服另类| 日本sm残虐另类| 国产区在线观看成人精品| 99久久婷婷国产精品综合| 亚洲与欧洲av电影| 欧美一区二区三区系列电影| 精品制服美女丁香| 国产精品高潮呻吟久久| 欧美午夜精品一区| 久久er99热精品一区二区| 欧美日韩视频在线第一区 | 日一区二区三区| 日本不卡不码高清免费观看| 久久久亚洲精品石原莉奈| 91在线云播放| 久久国产人妖系列| 国产精品私人自拍| 欧美性猛片aaaaaaa做受| 国产在线精品免费| 亚洲激情图片qvod| 精品久久一区二区三区| 欧美日韩激情一区二区| 蜜臀精品一区二区三区在线观看 | 亚洲成va人在线观看| 日韩精品一区国产麻豆| 99麻豆久久久国产精品免费优播| 亚洲线精品一区二区三区八戒| 精品国产免费一区二区三区香蕉 | 精品一区二区在线播放| 亚洲视频免费观看| 337p日本欧洲亚洲大胆色噜噜| 色妹子一区二区| 激情五月激情综合网| 亚洲精品国产一区二区精华液 | 色呦呦网站一区| 精品一区二区三区不卡| 亚洲香蕉伊在人在线观| 欧美国产丝袜视频| 欧美一区二区福利视频| 99re成人精品视频| 国产麻豆视频精品| 韩国在线一区二区| 欧美一级午夜免费电影| 精品日韩一区二区三区| 国产一区视频网站| 奇米一区二区三区| 夜夜嗨av一区二区三区四季av | 视频在线在亚洲| 一区二区三区欧美亚洲| 中文乱码免费一区二区| 久久久99精品久久| 日韩女同互慰一区二区| 7777精品伊人久久久大香线蕉最新版| 91香蕉视频污| 成人va在线观看| 处破女av一区二区| 国产精品一品视频| 国产在线精品免费| 日韩欧美国产一区二区在线播放| 欧美色男人天堂| 在线亚洲人成电影网站色www| 成人avav在线| 97精品久久久午夜一区二区三区| 国产 日韩 欧美大片| 国产69精品久久久久毛片| 久久99热这里只有精品| 美女一区二区视频| 免费三级欧美电影| 91视频在线观看| 丝袜美腿一区二区三区| 亚洲高清一区二区三区| 一区二区视频免费在线观看| 伊人婷婷欧美激情| 天堂久久一区二区三区| 日韩电影网1区2区| 久久成人免费电影| 国产精品综合一区二区| 国产成人免费在线视频| www.欧美.com| 欧美私模裸体表演在线观看| 欧美日韩1区2区| 日韩欧美美女一区二区三区| 欧美v亚洲v综合ⅴ国产v| 26uuu精品一区二区| 国产日产欧美一区二区三区| 国产欧美日韩在线视频| 久久99久久99小草精品免视看| 欧美本精品男人aⅴ天堂| 久久久噜噜噜久久中文字幕色伊伊| 国产美女久久久久| 99久久免费国产| 欧美日韩国产中文| 精品国产区一区| 亚洲女同女同女同女同女同69| 亚洲午夜影视影院在线观看| 久久99国产精品久久| av激情综合网| 制服丝袜一区二区三区| 中文字幕精品—区二区四季| 亚洲精品国产精品乱码不99| 欧美日韩一区二区三区免费看| 国产麻豆一精品一av一免费| 色狠狠色狠狠综合| 日韩视频免费观看高清完整版| 久久精品一区二区| 亚洲第四色夜色| 国产麻豆9l精品三级站| 91国偷自产一区二区三区成为亚洲经典| 欧美精品日韩精品| 中文字幕国产一区| 美女在线观看视频一区二区| 99久久久国产精品免费蜜臀| 欧美一卡二卡在线| 亚洲人成网站在线| 九色|91porny| 欧美午夜一区二区三区免费大片| 欧美videossexotv100| 樱桃视频在线观看一区| 国产成人免费在线视频| 欧美一级xxx| 亚洲制服丝袜在线| 99久久久久久99| 国产亚洲成av人在线观看导航| 视频一区视频二区中文字幕| bt欧美亚洲午夜电影天堂| 国产一区在线视频| 欧美精品一二三区| 一区二区三区中文在线| 国产suv精品一区二区883| 日韩欧美中文字幕精品| 亚洲婷婷综合色高清在线| 国产精品一卡二卡| xnxx国产精品| 美女视频第一区二区三区免费观看网站| 色系网站成人免费| 亚洲综合色成人| 一区二区在线电影| 欧美丝袜第三区| 国产精品日韩精品欧美在线| 麻豆精品视频在线观看| 欧美绝品在线观看成人午夜影视| 成人免费小视频| 91丨九色丨蝌蚪富婆spa| 国产精品久久三| 国产成人精品亚洲777人妖| 久久国产精品无码网站| 亚洲综合免费观看高清在线观看| 国产精品一区不卡| 精品国一区二区三区| 久久精品久久99精品久久| 91精品欧美久久久久久动漫| 视频一区二区欧美| 51精品国自产在线| 美腿丝袜亚洲一区| 久久久久9999亚洲精品| 国产高清精品在线| 精品一区二区三区久久|