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

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

?? dataflash.h

?? 基于AT91SAM7SE512cpu的flash訪問例子
?? H
字號:
//  ----------------------------------------------------------------------------
//          ATMEL Microcontroller Software Support  -  ROUSSET  -
//  ----------------------------------------------------------------------------
//  DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
//  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
//  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
//  DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
//  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
//  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
//  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
//  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
//  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//  ----------------------------------------------------------------------------

#ifndef _DATAFLASH_H
#define _DATAFLASH_H

#define true	(1==1)
#define false	(1!=1)

// SPI CLOCK
#define AT91C_SPI_CLK 				8000000         // 8 Mbits
// AC characteristics
// DLYBS = tCSS= 250ns min and DLYBCT = tCSH = 250ns
#define DATAFLASH_TCSS				(25 << 16)	    // 250ns min (tCSS) <=> 12/100 000 000 = 250ns
#define DATAFLASH_TCHS				(0x1 << 24)	    // 250ns min (tCSH) <=> (64*1+SCBR)/(2*100000000)

// Chip Select 0 : NPCS0 %1110
#define AT91C_SPI_PCS0_DATAFLASH	0xE
// Chip Select 1 : NPCS1 %1101
#define AT91C_SPI_PCS1_DATAFLASH	0xD

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Command Definition
/////////////////////////////////////////////////////////////////////////////////////////////////////

/* READ COMMANDS */
#define DB_CONTINUOUS_ARRAY_READ   	0xE8		/* Continuous array read */
#define DB_BURST_ARRAY_READ        	0xE8		/* Burst array read */
#define DB_PAGE_READ               	0xD2		/* Main memory page read */
#define DB_BUF1_READ               	0xD4		/* Buffer 1 read */
#define DB_BUF2_READ               	0xD6		/* Buffer 2 read */
#define DB_STATUS                  	0xD7		/* Status Register */

/* PROGRAM and ERASE COMMANDS */
#define DB_BUF1_WRITE              	0x84		/* Buffer 1 write */
#define DB_BUF2_WRITE              	0x87		/* Buffer 2 write */
#define DB_BUF1_PAGE_ERASE_PGM     	0x83		/* Buffer 1 to main memory page program with built-In erase */
#define DB_BUF1_PAGE_ERASE_FASTPGM 	0x93		/* Buffer 1 to main memory page program with built-In erase, Fast program */
#define DB_BUF2_PAGE_ERASE_PGM     	0x86		/* Buffer 2 to main memory page program with built-In erase */
#define DB_BUF2_PAGE_ERASE_FASTPGM 	0x96		/* Buffer 1 to main memory page program with built-In erase, Fast program */
#define DB_BUF1_PAGE_PGM           	0x88		/* Buffer 1 to main memory page program without built-In erase */
#define DB_BUF1_PAGE_FASTPGM       	0x98		/* Buffer 1 to main memory page program without built-In erase, Fast program*/
#define DB_BUF2_PAGE_PGM           	0x89		/* Buffer 2 to main memory page program without built-In erase */
#define DB_BUF2_PAGE_FASTPGM       	0x99		/* Buffer 1 to main memory page program without built-In erase, Fast program*/
#define DB_PAGE_ERASE              	0x81		/* Page Erase */
#define DB_BLOCK_ERASE             	0x50		/* Block Erase */
#define DB_PAGE_PGM_BUF1           	0x82		/* Main memory page through buffer 1 */
#define DB_PAGE_FASTPGM_BUF1       	0x92		/* Main memory page through buffer 1, Fast program */
#define DB_PAGE_PGM_BUF2           	0x85		/* Main memory page through buffer 2 */
#define DB_PAGE_FastPGM_BUF2       	0x95		/* Main memory page through buffer 2, Fast program */

/* ADDITIONAL COMMANDS */
#define DB_PAGE_2_BUF1_TRF         	0x53		/* Main memory page to buffer 1 transfert */
#define DB_PAGE_2_BUF2_TRF         	0x55		/* Main memory page to buffer 2 transfert */
#define DB_PAGE_2_BUF1_CMP         	0x60		/* Main memory page to buffer 1 compare */
#define DB_PAGE_2_BUF2_CMP          0x61		/* Main memory page to buffer 2 compare */
#define DB_AUTO_PAGE_PGM_BUF1      	0x58		/* Auto page rewrite throught buffer 1 */
#define DB_AUTO_PAGE_PGM_BUF2      	0x59		/* Auto page rewrite throught buffer 2 */

/////////////////////////////////////////////////////////////////////////////////////////////////////
// ATMEL Dataflash description
/////////////////////////////////////////////////////////////////////////////////////////////////////
#define AT45DB011B		0x0C
#define AT45DB021B		0x14
#define AT45DB041B		0x1C
#define AT45DB081B		0x24
#define AT45DB161B		0x2C
#define AT45DB321B		0x34
#define AT45DB642		0x3C
#define AT45DB1282		0x10
#define AT45DB2562		0x18
#define AT45DB5122		0x20

#define AT91C_DF_TIMEOUT			10000000

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Dataflash Interface Definition
/////////////////////////////////////////////////////////////////////////////////////////////////////
typedef enum  _AT91S_DF_SEM {
    UNLOCKED,
    LOCKED
} AT91S_DF_SEM;

typedef enum  _AT91S_DF_STATE {
	START_COMMAND,
	WAIT_FOR_BUSY,
	ERASE,
	END_OF_ERASE,

	START_WRITE,
	END_OF_WRITE,

	START_READ,
	END_OF_READ,
	READ_GET_STATUS,
	WAIT_FOR_READ_STATUS

} AT91S_DF_STATE;


// Dataflash Description Structure
typedef struct _AT91S_DF_DESC {
	int		pages_number;    //* dataflash page number
	int		pages_size;      //* dataflash page size
	int		page_offset;     //* page offset in command
	int             block_size;      //* nb page per block
	int		byte_mask;       //* byte mask in command
} AT91S_DF_DESC, *AT91PS_DF_DESC;

// Dataflash Descriptor Structure
typedef struct _AT91S_DF
{
	AT91PS_SPI      pSpi;
	unsigned char   bCs;
	AT91S_DF_SEM    bSemaphore;    //* SPI semaphore
	unsigned int    command[2];
 	AT91S_DF_DESC   dfDescription;
}AT91S_DF, *AT91PS_DF;

#define AT91C_DF_NB_BLOCS(pDf)  (pDf->dfDescription.pages_number / pDf->dfDescription.block_size)
#define AT91C_DF_BLOC_SIZE(pDf) (pDf->dfDescription.block_size * pDf->dfDescription.pages_size)
#define AT91C_DF_NB_PAGE(pDf)   (pDf->dfDescription.pages_number)
#define AT91C_PAGE_SIZE(pDf)    (pDf->dfDescription.pages_size)
#define AT91C_PAGE_OFFSET(pDf)    (pDf->dfDescription.page_offset)



/* ============ READ COMMANDS =============== */
#define AT91F_DF_continuous_read(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_CONTINUOUS_ARRAY_READ, 8, pData, dDataSize, dAddress)
#define AT91F_DF_page_read(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_PAGE_READ, 8, pData, dDataSize, dAddress)
#define AT91F_DF_read_buf1(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_BUF1_READ, 5, pData, dDataSize, dAddress)
#define AT91F_DF_read_buf2(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_BUF2_READ, 5, pData, dDataSize, dAddress)
#define AT91F_DF_get_status(pDf) \
    AT91F_DF_send_command(pDf, DB_STATUS, 2, (char *) 0, 0, 0)

/* ============ WRITE COMMANDS =============== */
#define AT91F_DF_write_buf1(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_BUF1_WRITE, 4, pData, dDataSize, dAddress)
#define AT91F_DF_write_buf2(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_BUF2_WRITE, 4, pData, dDataSize, dAddress)

#define AT91F_DF_pgm_erase_buf1(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_BUF1_PAGE_ERASE_PGM, 4, pData, dDataSize, dAddress)
#define AT91F_DF_pgm_erase_buf2(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_BUF2_PAGE_ERASE_PGM, 4, pData, dDataSize, dAddress)

#define AT91F_DF_pgm_buf1(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_BUF1_PAGE_PGM, 4, pData, dDataSize, dAddress)
#define AT91F_DF_pgm_buf2(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_BUF2_PAGE_PGM, 4, pData, dDataSize, dAddress)

#define AT91F_DF_page_write(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_PAGE_PGM_BUF1, 4, pData, dDataSize, dAddress)

/* ============ ERASE COMMANDS =============== */
#define AT91F_DF_page_erase(pDf, dAddress) \
    AT91F_DF_send_command(pDf, DB_PAGE_ERASE, 4, (char *) 0, 0, dAddress)
#define AT91F_DF_block_erase(pDf, dAddress) \
    AT91F_DF_send_command(pDf, DB_BLOCK_ERASE, 4, (char *) 0, 0, dAddress)

/* ============ ADDITIONAL COMMANDS =============== */
#define AT91F_DF_trf_buf1(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_PAGE_2_BUF1_TRF, 4, (char *) 0, 0, dAddress)
#define AT91F_DF_trf_buf2(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_PAGE_2_BUF1_TRF, 4, (char *) 0, 0, dAddress)

#define AT91F_DF_cmp_buf1(pDf, dAddress) \
    AT91F_DF_send_command(pDf, DB_PAGE_2_BUF1_CMP, 4, (char *) 0, 0, dAddress)
#define AT91F_DF_cmp_buf2(pDf, dAddress) \
    AT91F_DF_send_command(pDf, DB_PAGE_2_BUF2_CMP, 4, (char *) 0, 0, dAddress)

#define AT91F_DF_rwr_buf1(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_AUTO_PAGE_PGM_BUF1, 4, (char *) 0, 0, dAddress)
#define AT91F_DF_rwr_buf2(pDf, pData, dDataSize, dAddress) \
    AT91F_DF_send_command(pDf, DB_AUTO_PAGE_PGM_BUF2, 4, (char *) 0, 0, dAddress)
/* ============ Status Register Fields =============== */
#define AT91F_DF_is_ready(pDf) \
    ((pDf)->command[0] & 0x8000)
#define AT91F_DF_is_different(pDf) \
    ((pDf)->command[0] & 0x4000)

/* ============  prototypes  =============== */
extern AT91S_DF_SEM AT91F_DF_is_busy(AT91PS_DF pDataFlash);
extern char AT91F_DF_wait_ready(AT91PS_DF pDataFlash);
extern int AT91F_Test_SPI_DataFlash(unsigned int uPCS);
extern int AT91F_SPI_DataFlash_init(unsigned int uPCS);
extern char AT91F_DF_send_command ( AT91PS_DF pDataFlash,
                                    unsigned char bCmd,      // Command value
                                    unsigned char bCmdSize,  // Command Size
                                    char          *pData,    // Data to be sent
                                    unsigned int  dDataSize, // Data Size
                                    unsigned int  dAddress); // Dataflash Address
void AT91F_SPI_DataFlash_Erase_ALL(void);
int AT91F_SPI_DataFlash_Erase_test(void);
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
图片区小说区区亚洲影院| 麻豆精品国产传媒mv男同| 天天综合色天天| 国产精品亚洲а∨天堂免在线| 色狠狠桃花综合| 久久日韩精品一区二区五区| 亚洲综合999| 99久久精品一区| 精品国产乱码久久久久久老虎| 亚洲免费在线看| 国产乱人伦偷精品视频不卡 | 成人爱爱电影网址| 欧美一区二区在线免费播放| 亚洲精品乱码久久久久久久久| 国产激情一区二区三区四区| 日韩一区二区三区精品视频| 国产成人超碰人人澡人人澡| 自拍视频在线观看一区二区| 欧美日韩不卡一区二区| 国产精品亚洲第一| 激情综合网av| 九色porny丨国产精品| 亚洲色图欧美在线| 欧美日本高清视频在线观看| 懂色av一区二区三区蜜臀 | 日韩视频免费观看高清完整版 | 久久综合网色—综合色88| 亚洲图片欧美色图| 91极品美女在线| 亚洲精品久久久久久国产精华液| 91在线观看视频| 最新日韩av在线| 在线观看亚洲精品| 亚洲三级视频在线观看| 懂色一区二区三区免费观看 | 一区二区三区蜜桃| 日本韩国欧美一区| 亚洲一区在线看| 欧美日本一道本| 日本视频在线一区| 26uuu久久综合| 粉嫩av一区二区三区在线播放| 国产精品久久一卡二卡| 91首页免费视频| 亚洲国产综合在线| 91.com在线观看| 国内国产精品久久| 国产精品情趣视频| 在线观看视频一区二区欧美日韩| 亚洲国产日日夜夜| 日韩美女天天操| 粉嫩一区二区三区在线看| 亚洲欧美日韩在线| 欧美精品777| 国产精品99久久久久久久vr| 中文字幕亚洲成人| 欧美日韩国产影片| 国产一区二区导航在线播放| 1024精品合集| 欧美一区二区三区的| 国产一区二区精品久久91| 亚洲猫色日本管| 日韩一区二区免费视频| 成人夜色视频网站在线观看| 在线免费视频一区二区| 欧美精品乱人伦久久久久久| 亚洲一区二区四区蜜桃| 国内国产精品久久| 欧美绝品在线观看成人午夜影视| 国产视频911| 韩国av一区二区三区四区| 成人丝袜高跟foot| 欧美一区二区三区公司| 亚洲黄色av一区| 欧美少妇性性性| 欧美一区二区在线免费观看| 亚洲国产精品人人做人人爽| 欧美精品一区男女天堂| 色综合网色综合| 国产一区二区视频在线| 亚洲综合另类小说| 中文一区二区完整视频在线观看| 欧美中文字幕一区二区三区 | 国产精品蜜臀av| 在线电影国产精品| 91浏览器在线视频| 国产一区二区三区免费| 日韩有码一区二区三区| 亚洲色图制服诱惑| 欧美国产日韩在线观看| 日韩欧美另类在线| 欧美丝袜丝交足nylons图片| eeuss鲁片一区二区三区在线看| 精品一区二区三区在线观看 | 91精品国产综合久久精品性色| jizzjizzjizz欧美| 国产精品夜夜嗨| 久久99精品国产麻豆婷婷| 五月天婷婷综合| 亚洲电影中文字幕在线观看| 亚洲精品日韩综合观看成人91| 国产欧美一区二区精品性色超碰| 日韩天堂在线观看| 日韩一区二区免费电影| 91麻豆精品国产自产在线观看一区| 日本精品一级二级| 91久久奴性调教| 色综合久久88色综合天天| 99久久综合精品| av激情成人网| 91麻豆产精品久久久久久| 不卡一卡二卡三乱码免费网站| 成人一区二区视频| youjizz国产精品| 卡一卡二国产精品| 中文字幕国产一区| 中文字幕av在线一区二区三区| 欧美日韩久久久| 国产精品资源网| 美国十次综合导航| 亚洲6080在线| 亚洲同性gay激情无套| 久久婷婷综合激情| 欧美一区二区高清| 欧美一区二区日韩一区二区| 日韩美女天天操| 亚洲一区二区精品久久av| 精品日韩av一区二区| 久久久久综合网| 国产精品人人做人人爽人人添| 国产精品久久久久久福利一牛影视| 国产精品日产欧美久久久久| 亚洲欧美激情一区二区| 一区二区三区在线免费播放| 亚洲3atv精品一区二区三区| 调教+趴+乳夹+国产+精品| 麻豆一区二区三区| 国产露脸91国语对白| av在线不卡网| 欧美剧情片在线观看| 久久久亚洲精华液精华液精华液 | 亚洲精品成人天堂一二三| 亚洲在线中文字幕| 精品无人码麻豆乱码1区2区 | 一区二区在线免费| 麻豆国产欧美日韩综合精品二区 | 精品视频999| 日韩欧美二区三区| 国产精品无码永久免费888| 亚洲日本在线天堂| 久久电影网站中文字幕 | 亚洲欧美一区二区三区极速播放| 亚洲小说春色综合另类电影| 色婷婷综合激情| 日韩一区二区三区免费观看| 国产欧美日本一区视频| 亚洲一区影音先锋| 国产精品一线二线三线| 欧美亚洲国产一区二区三区va | 欧美老年两性高潮| 国产亚洲一二三区| 亚洲永久精品国产| 青青草精品视频| 亚洲欧洲韩国日本视频| 久久精品国产在热久久| 91免费看片在线观看| 中文字幕欧美日本乱码一线二线| 亚洲一区在线免费观看| 色av成人天堂桃色av| 最新成人av在线| youjizz国产精品| 国产精品色在线| 成人免费的视频| 国产欧美日韩激情| 99re成人在线| 亚洲美女少妇撒尿| 国产成人精品aa毛片| 91精品国产综合久久福利| 亚洲女厕所小便bbb| 国产精品亚洲一区二区三区妖精| 欧美日韩卡一卡二| 亚洲综合色婷婷| 色婷婷综合久久久中文一区二区 | 久久精品欧美日韩精品 | 久久99精品国产.久久久久| 亚洲精品国产无天堂网2021| 日韩欧美国产一二三区| 亚洲日本免费电影| 成人av资源在线观看| 精品成人佐山爱一区二区| 天天影视网天天综合色在线播放| 成人中文字幕在线| 久久嫩草精品久久久精品一| 欧美aaaaa成人免费观看视频| 欧美这里有精品| 亚洲午夜日本在线观看| 91国内精品野花午夜精品| 亚洲视频在线一区| 色综合视频在线观看| 国产精品系列在线|