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

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

?? spi_sd.c

?? WAV 數字輸出播放器
?? C
字號:
#include <p33FJ64GP306.h>
#include "delay.h"
#include "SPI_SD.h"

// This source handles SPI, and SD Card Command level.
// File structure is managed by upper layer.

BYTE temp;

void init_SPI(void)
{
	PORTGbits.RG9 = 1;
	TRISGbits.TRISG9 = 0;
	
	// setup the SPI peripheral
	SPI2STAT = 0x0;  // disable the SPI module (just in case)
	SPI2CON1 = 0x013E;
	// bit 12 DISSCK = 0. SCK enabled.
	
	// bit 11 DISSDO = 0. SDO enabled.
	// bit 10 MODE16 = 0. Byte(8bit) Mode.
	// bit 9  SMP = 0.    input sampled at middle of data output time.
	// bit 8  CKE = 1.    SPI Clock Edge is active to idle.
	
	// bit 7  SSEN = 0.   slave select is disabled.(master mode)
	// bit 6  CKP = 0.    Clock Polarity is, High/Active, Low/Idle.
	// bit 5  MSTEN = 1.  Master Mode.
	// bit 4-2  SPRE=111. Second Prescale bit = 1:1.
	// bit 1-0  PPRE=10.  Primary Prescale = 4:1.
	// SCK = Fcy 33.864MHz / 4 / 1 = 8.47MHz
	SPI2STAT = 0x8000; // enable the SPI module

	//Wait SD Card
	Delay_Us(10);
	SD_CLK();
	Delay_Us(10);
	
}

//send CLOCK for SD card, let it sample clock
void SD_CLK(void)
{
	int i;
	BYTE ret;
	
	PORTGbits.RG9 = 1;
	Delay8Tcy();
	for (i = 0; i < 100; i++)
	{
		ret = SPI_read(0);
	}
	PORTGbits.RG9 = 1;
}	

BYTE SD_InitializeCard(void)
{
	BYTE stat;
	DWORD Count;
	
	Count = 0;
	PORTGbits.RG9 = 0;
	Delay8Tcy();
	// index 0: GO_IDLE_STATE command
	stat = SD_CardCommand(0, 0);
	// repeat until get 0x01 (In Idle State) answer.
	while( (stat != 1) && (stat != 0xFF) )
	{
		stat = SD_CardCommand(0, 0);
		Count++;
		if ( Count > 8000)
		{
			return 1;	//failed
		}
	}
	
	// index 1: SEND_OP_COMMAND, card initializing
	// repeat until get 0x00 (In Idle State bit cleared).
	while ( stat == 1 )
	{
		Delay_Us(1);
		stat = SD_CardCommand(1, 0);
	}
	PORTGbits.RG9 = 1;
	
	return 0;
}	


BYTE SD_Read_Single_Block(LONG Address, BYTE * Buffer)
{
	BYTE stat;
	BYTE ret;
	int i;

	stat = 0;
	ret = 0;
	
	PORTGbits.RG9 = 0;
	
	//Send command (single read) and wait response
	stat = SD_Read_Single_Block_Phase1(Address);
	
	if (stat == 0)
	{
		//store return value to buffer
		for(i = 0; i < 512; i++)
		{
			*Buffer = SPI_read(0);
			Buffer++;	
		}
		ret = 0;

		stat = SPI_read(0);
		stat = SPI_read(0);
		
		//Check transaction finished
		for (i = 0; i < 800; i++)
		{
			stat = SPI_read(0);
			if (stat == 0xFF) break;
		}
	}
	else
	{ ret = 1; }

	return ret;			
}	

BYTE SD_Read_Single_Block_Phase1(LONG Address)
{
	int RetryCount;
	BYTE ret;
	int i;
	
	ret = 0;

	for (RetryCount = 0; RetryCount < 100; RetryCount++)
	{
		ret = SD_CardCommand(17,Address);
		if (ret == 0)
		{
			//Not ready. wait for Data token.
			for (i = 0; i < 5000; i++)
			{
				ret = SPI_read(0);
				
				if (ret == 0xFE) return 0;	//got token
			}	
		}
		else if (ret == 0xFE)
		{
			//Got Token.
			return 0;
		}
	}
		
	return 1; // can not opened.
}	


// Initialize SD Card to SPI Mode
BYTE SD_CardCommand(BYTE cmd, LONG Argument)
{
	BYTE ret;
	int i;

	//Confirm card nop, before send command
	// if no command sent, should return 0xFF.
	for (i = 0; i < 800; i++)
	{
		ret = SPI_read(0);
		if (ret == 0xFF) 
		{
			break;
		}
	}

	// failed. upper layer will handle.
	if (ret != 0xFF) return 1;

	// SD Card Command	
	SPI_write(0x40 | cmd,0);	//command, 0x40 + index
	SPI_write((Argument >> 24) & 0xFF,0);	//Argument 0
	SPI_write((Argument >> 16) & 0xFF,0);	//Argument 1
	SPI_write((Argument >>  8) & 0xFF,0);	//Argument 2
	SPI_write((Argument      ) & 0xFF,0);		//Argument 3
	SPI_write(0x95,0);	//CRC for GO_STATE_IDLE only. others, don't care

	// Some command take long time to answer.
	for (i = 0; i < 512; i++)
	{
		ret = SPI_read(0);
		if (ret == 0xFE) 
		{
			break;	//data token
		}
		if ( (ret & 0x80) == 0x00 )
		{
			break; 	//got response
		}
	}
		
	return ret;	
}	


void SPI_write(BYTE data, BYTE flag)
// data: to send. flag(SS): not used.
{
	
	temp = SPI2BUF;			// dummy read of the SPI1BUF register
							// to clear the SPIRBF flag
	SPI2BUF = data;			// write the data out to the SPI peripheral
	
	while(!SPI2STATbits.SPIRBF)
	{
		Nop(); 
	}
}

BYTE SPI_read(BYTE flag)
// retrun: read value. flag(SS): not used.
{
		
	temp = SPI2BUF;			// dummy read of the SPI1BUF register
							// to clear the SPIRBF flag
	SPI2BUF = 0xFF;			// write the data out to the SPI peripheral
		
	while(!SPI2STATbits.SPIRBF)
	{
		Nop(); 
	}
	
	temp = 0xFF & SPI2BUF;			// read result

	return temp;	
}	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品黄色片免费大全| 亚洲激情图片qvod| 91精品国产91热久久久做人人| 色综合一区二区| 91久色porny | 免费在线视频一区| 亚洲国产精品久久久男人的天堂| 亚洲女人小视频在线观看| 亚洲欧洲av在线| 国产三级久久久| 中文字幕精品一区二区精品绿巨人 | 国产剧情一区在线| 免费不卡在线视频| 美女视频一区二区| 精品一二三四区| 国内精品久久久久影院薰衣草 | 成人毛片老司机大片| 顶级嫩模精品视频在线看| 不卡视频在线看| 色综合久久综合| 欧美日韩在线直播| 日韩三级视频在线观看| 精品理论电影在线| 亚洲成人7777| 奇米色一区二区三区四区| 美国精品在线观看| 国产精品一二三四| 99精品国产热久久91蜜凸| 欧美在线观看视频一区二区三区| 欧美视频日韩视频| 日韩欧美第一区| 国产精品视频你懂的| 亚洲综合色视频| 免费欧美在线视频| 国产成人精品免费视频网站| 9i在线看片成人免费| 欧美无砖砖区免费| 欧美va亚洲va在线观看蝴蝶网| 欧美国产日产图区| 亚洲大片在线观看| 国产精品一区二区在线播放| 91污在线观看| 欧美一区二视频| 国产日韩欧美高清在线| 亚洲精品国久久99热| 久久精品国产在热久久| 成人av手机在线观看| 欧美日韩国产bt| 日本一区二区三区在线不卡 | 国产99精品视频| 欧美日韩另类国产亚洲欧美一级| 精品久久久久99| 亚洲码国产岛国毛片在线| 日本三级亚洲精品| www.日韩精品| 日韩亚洲欧美中文三级| 中文字幕制服丝袜成人av| 亚欧色一区w666天堂| 大尺度一区二区| 欧美一区二区在线免费观看| 中文字幕一区二区三区在线观看| 免费在线一区观看| 91传媒视频在线播放| 久久久久久一二三区| 亚洲成人高清在线| 国产成人综合亚洲网站| 欧美人成免费网站| 国产精品久久久久9999吃药| 美女看a上一区| 欧美吻胸吃奶大尺度电影| 国产欧美精品在线观看| 日韩精品视频网站| 91色婷婷久久久久合中文| www激情久久| 日韩av网站免费在线| 色噜噜狠狠一区二区三区果冻| 久久久无码精品亚洲日韩按摩| 成人午夜电影久久影院| 欧美老肥妇做.爰bbww视频| 最新欧美精品一区二区三区| 国产精品主播直播| 日韩精品一区二区三区三区免费| 亚洲在线免费播放| 99久久精品免费看| 国产午夜精品久久久久久免费视| 日本女优在线视频一区二区| 欧美性色黄大片| 亚洲欧美一区二区三区极速播放 | 久久久久国产精品免费免费搜索| 五月天亚洲婷婷| 欧美中文字幕一区二区三区 | 亚洲欧美国产77777| 国产·精品毛片| 久久先锋资源网| 免费观看久久久4p| 91麻豆精品国产91久久久资源速度 | 国产一区二区三区在线看麻豆| 欧美精品99久久久**| 亚洲.国产.中文慕字在线| 欧美日韩精品一区二区天天拍小说 | 日韩专区一卡二卡| 在线观看免费视频综合| 亚洲精品一卡二卡| 色婷婷激情综合| 一区二区三区日韩欧美| 色菇凉天天综合网| 亚洲影视在线播放| 欧美视频你懂的| 五月天久久比比资源色| 欧美片网站yy| 日产欧产美韩系列久久99| 欧美一区二区二区| 久久成人免费电影| 久久众筹精品私拍模特| 国产电影一区在线| 国产精品污网站| 91免费在线看| 亚洲影院免费观看| 91精品国产综合久久福利| 蜜臀av一区二区在线免费观看 | 日韩美女主播在线视频一区二区三区| 日本在线播放一区二区三区| 日韩欧美一级二级| 国产高清成人在线| 亚洲欧美日韩在线| 欧美日韩视频在线观看一区二区三区| 午夜精品影院在线观看| 欧美一级欧美三级| 国产成人午夜高潮毛片| 国产精品久线观看视频| 91久久久免费一区二区| 日韩激情视频在线观看| 欧美大片在线观看一区二区| 国产精品一卡二卡| 一区二区三区四区蜜桃| 91麻豆精品91久久久久久清纯| 久久精品久久99精品久久| 国产精品少妇自拍| 欧美在线免费视屏| 久久国产欧美日韩精品| 国产精品每日更新| 欧美男男青年gay1069videost| 国内精品国产成人| 亚洲精品日韩专区silk| 日韩免费一区二区| 99久久综合国产精品| 日韩中文欧美在线| 国产精品亲子伦对白| 国产午夜久久久久| 色婷婷综合久久久久中文| 日韩av电影免费观看高清完整版在线观看| 久久蜜桃香蕉精品一区二区三区| 91九色最新地址| 国产一区二区三区香蕉| 亚洲靠逼com| 久久综合精品国产一区二区三区 | 最新不卡av在线| 欧美一区二区视频在线观看2020| 国产成人精品亚洲日本在线桃色| 亚洲不卡av一区二区三区| 国产亚洲综合在线| 欧美日韩国产精品自在自线| 国产高清视频一区| 日韩精品亚洲一区| 亚洲特黄一级片| 久久女同精品一区二区| 欧美日韩精品欧美日韩精品一综合| 国产夫妻精品视频| 美腿丝袜亚洲色图| 亚洲一卡二卡三卡四卡无卡久久| 久久久久久日产精品| 欧美老肥妇做.爰bbww视频| 99九九99九九九视频精品| 久久91精品国产91久久小草| 一区二区三区视频在线看| 国产欧美va欧美不卡在线| 日韩欧美三级在线| 欧美最新大片在线看| www.色精品| 国产伦精一区二区三区| 日本不卡在线视频| 亚洲激情成人在线| 国产精品你懂的| www国产成人免费观看视频 深夜成人网| 91成人看片片| 91在线国内视频| 国产精品白丝jk白祙喷水网站 | 欧美一区二区三区在| 欧美综合在线视频| 91女厕偷拍女厕偷拍高清| 成人综合在线观看| 国产精品538一区二区在线| 久久精品国产成人一区二区三区 | 欧美亚洲综合久久| 99re6这里只有精品视频在线观看| 国产成人在线色| 国产一区不卡在线| 久久精品久久99精品久久| 免费观看一级特黄欧美大片| 丝袜美腿亚洲综合|