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

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

?? sst25vf020.c

?? EP9315的wince下載程序。download.exe
?? C
?? 第 1 頁 / 共 2 頁
字號:
//****************************************************************************
//
// sst25vf020.c - Routines for erasing and programing the sst25vf020
//               eeprom.
//
// Copyright (c) 2006 Cirrus Logic, Inc.
//
//****************************************************************************


#include "ep93xx.h"
#include "timer.h" 
#include "spi.h"
#include "sst25vf020.h"

//-----------------------------------------------------------------------------
// sst25vf020_transaction do with the buffer for write&read
//-----------------------------------------------------------------------------
static void sst25vf020_transaction(unsigned char *tBuffer,unsigned char *rBuffer,int length)
{
    int i;
    i=0;
	
    SSP1->SSPCR1.Value = 0;
    //
    // send the bytes of data to eeprom
    //
    while(length>0)
    {
        SSP1->SSPDR.Value = tBuffer[i];
        length--;
        i++;
    }
     
    //
    // set SSPC1_SSE value
    //
    SSP1->SSPCR1.Value = 0x10;
    i=0;
	
	//
    // Wait for the Transmit FIFO to empty
    //
    while(!SSP1->SSPSR.Field.TFE);
    delay_usec(30);   
	 
    //
    // Get the bytes of data that are actually read back from eeprom
    //
    while(SSP1->SSPSR.Field.RNE)
    {
        rBuffer[i]=(unsigned char)SSP1->SSPDR.Value;
        i++;
        delay_usec(1);	    
    }
}


//-----------------------------------------------------------------------------
// sst25vf020_get_ready let the chip ready
//-----------------------------------------------------------------------------
static int sst25vf020_get_ready(void)
{
    unsigned char tBuffer[2];
    unsigned char rBuffer[2];
    
    //
    // Send the read command to status register
    //
    tBuffer[0] = SST25VF020_READ_STATUS_REGISTER;
    tBuffer[1] = 0;

    //
    // Get the status of eeprom 
    //
    sst25vf020_transaction( tBuffer, rBuffer, 2);
    
    //
    // Get  ready status of status register
    //
    if(rBuffer[1] & SST25VF020_STATUS_READY) return 0;
    
    return 1;
}


//-----------------------------------------------------------------------------
// init_sst25vf020 chip init
//-----------------------------------------------------------------------------
void init_sst25vf020(void)
{
    unsigned long ulChipID=0;	
    //
    // Disable the ssp, disable interrupts
    //
    SSP1->SSPCR1.Value = 0;
   
    //
    // Set GPIO pins 12 and 14 as outputs.
    //
    *((volatile unsigned int *)(PBDDR)) = (0x50);
           
    //
    // Set GPIO pins 12 and 14 high to disable the keyboard.
    //
    *((volatile unsigned int *)(PBDR)) = (0x50);
     
    //
    // Set GPIO pin 6 and 7 as an outputs.
    //
    *((volatile unsigned int *)(PADDR)) = (0xc0);
    
    //
    // Clear GPIO pin 7 to enable the frame line.
    // Set GPIO pin 6 to disable the CS4271.
    //
    *((volatile unsigned int *)(PADR)) = (0x00);
    *((volatile unsigned int *)(PADR)) = (0x40);

    //
    // Set FGPIO pin 0 as an output.
    //
    *((volatile unsigned int *)(PFDDR)) = (0x01);
    
    //
    // Set FGPIO pin 0 to disable the TLV2542.
    //
    *((volatile unsigned int *)(PFDR)) = (0x01);

    //
    // Set the enable bit(SSE) in SSP1CR1
    //
      SSP1->SSPCR1.Value = 0x10;

    //
    //program the SSP1CRO register
    //
    SSP1->SSPCR0.Value = 0x000001c7;
    
    //
    //Read the chip id
    //
    ulChipID = *((volatile unsigned int *)(CHIPID));
    
    //
    // Program the predivisor register.
    //
    //if(((ulChipID&0xf0000000)>>28)>=0x0111)
    if(((ulChipID&0xf0000000)>>28)>=0x7)
    {   
    	//
    	//if Chip REV >=E2,the diver =4;
    	//
    	SSP1->SSPCPSR.Value = 4;
    }
    else
    {
    	//
    	//if Chip REV <=E1,(E0)the diver =2;
    	//
    	SSP1->SSPCPSR.Value = 2;
    }

    //
    // Clear the enable bit(SSE) in SSP1CR1
    //
    SSP1->SSPCR1.Value = 0;

    //
    // Set the enable bit(SSE) in SSP1CR1
    //
    // 
    SSP1->SSPCR1.Value = 0x10;
}

//-----------------------------------------------------------------------------
// query_sst25vf020 chip query
//-----------------------------------------------------------------------------
int query_sst25vf020(unsigned int manu_id,unsigned int device_id)
{   
    unsigned char tBuffer[8];
    unsigned char rBuffer[8];
    
    //
    // Send the READ_ID command
    //
    tBuffer[0] = SST25VF020_READ_ID;
    tBuffer[1] = 0;
    tBuffer[2] = 0;
    tBuffer[3] = 0;
    tBuffer[4] = 0;
    tBuffer[5] = 0;
    
    //
    // Get the Manu_ID and Device_ID from eeprom
    //
    sst25vf020_transaction( tBuffer, rBuffer, 6);
    
    //
    // Compare the ID got from eeprom with sst25vf020's ID
    //
    if ((manu_id ==(unsigned int)rBuffer[4])&(device_id==(unsigned int)rBuffer[5]))
        return 1;
    else
        return 0;
  
 }

//-----------------------------------------------------------------------------
// query_sst25vf040B chip query
//-----------------------------------------------------------------------------
int query_sst25vf040(unsigned int manu_id,unsigned int device_id)
{   
    unsigned char tBuffer[8];
    unsigned char rBuffer[8];
    
    //
    // Send the READ_ID command
    //
    tBuffer[0] = SST25VF020_READ_ID;
    tBuffer[1] = 0;
    tBuffer[2] = 0;
    tBuffer[3] = 0;
    tBuffer[4] = 0;
    tBuffer[5] = 0;
    
    //
    // Get the Manu_ID and Device_ID from eeprom
    //
    sst25vf020_transaction( tBuffer, rBuffer, 6);
    
    //
    // Compare the ID got from eeprom with sst25vf020's ID
    //
    if ((manu_id ==(unsigned int)rBuffer[4])&(device_id==(unsigned int)rBuffer[5]))
        return 1;
    else
        return 0;
  
 }
//-----------------------------------------------------------------------------
// erase_sst25vf020 chip erase
//-----------------------------------------------------------------------------
int erase_sst25vf020(unsigned int addrOffset, int length)
{
    unsigned char tBuffer[4];
    unsigned char rBuffer[4];
    unsigned int addrBase,addr;
    
    if(addrOffset>2*1024*1024/8)
    	return 2;
    else if(addrOffset+length>2*1024*1024/8)
    	return 0;
    	
    for(addrBase=0; addrBase<length; addrBase+=0x1000)
    {
    addr =  addrBase+addrOffset;
 
    //
    // Send the enable_write command to status register
    //
    tBuffer[0] = SST25VF020_ENABLE_WRITE_STATUS_REGISTER; 
    
    //
    // Finish the phase of writing command
    //    
    sst25vf020_transaction( tBuffer, rBuffer, 1);

    //
    // Send the write command to status register
    //
    tBuffer[0] = SST25VF020_WRITE_STATUS_REGISTER; 
    tBuffer[1] = 0;
    
    //
    // Finish the phase of writing status register
    //  
    sst25vf020_transaction( tBuffer, rBuffer, 2);
 
    //
    // Send the write_enable command to status register
    //
    tBuffer[0] = SST25VF020_WRITE_ENABLE;  
    
    //
    // Finish the phase of writing enable command
    //  
    sst25vf020_transaction( tBuffer, rBuffer, 1);

    //
    // Send the sector_erase command and the address to eeprom 
    //
    tBuffer[0] = SST25VF020_SECTOR_ERASE;
    tBuffer[1] = addr >> 16;
    tBuffer[2] = addr >> 8;
    tBuffer[3] = addr;
    
    //
    // Finish the phase of writing sector_erase command
    //  
    sst25vf020_transaction( tBuffer, rBuffer, 4);

    //
    // Get the ready status of status register
    //
    while( !sst25vf020_get_ready() )
    {
        delay_usec(1);
    }
		
    } 
     
    return 1;

}

//-----------------------------------------------------------------------------
// erase_sst25vf040B chip erase
//-----------------------------------------------------------------------------
int erase_sst25vf040(unsigned int addrOffset, int length)
{
    unsigned char tBuffer[4];
    unsigned char rBuffer[4];
    unsigned int addrBase,addr;

    if(addrOffset>4*1024*1024/8)
    	return 2;    
    else if(addrOffset+length>4*1024*1024/8)
    	return 0;
    	
    for(addrBase=0; addrBase<length; addrBase+=0x1000)
    {
    addr =  addrBase+addrOffset;
 
    //
    // Send the enable_write command to status register
    //
    tBuffer[0] = SST25VF020_ENABLE_WRITE_STATUS_REGISTER; 
    
    //
    // Finish the phase of writing command

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩视频第一区| 亚洲精品视频一区二区| 亚洲成人动漫av| 制服丝袜激情欧洲亚洲| 日本系列欧美系列| 日韩欧美视频一区| 国产一区二区三区日韩| 久久精品人人爽人人爽| 国产91在线|亚洲| 依依成人精品视频| 在线电影一区二区三区| 久久精品国内一区二区三区| 久久久亚洲精华液精华液精华液| 国产suv精品一区二区6| 亚洲人亚洲人成电影网站色| 欧美午夜电影网| 久久精品二区亚洲w码| 国产精品萝li| 欧美放荡的少妇| 成人午夜免费电影| 午夜精品123| 国产精品卡一卡二卡三| 91精品国产综合久久久蜜臀粉嫩 | 国产欧美一区二区三区网站| 一本高清dvd不卡在线观看| 蜜桃传媒麻豆第一区在线观看| 亚洲国产精华液网站w| 欧美精品一二三四| 成人激情免费视频| 日韩黄色小视频| 亚洲精品一二三| 欧美极品美女视频| 欧美成人乱码一区二区三区| 欧美亚洲国产bt| 99国产精品久久久| 精品一区二区三区免费播放| 亚洲欧美日韩电影| 国产精品欧美久久久久一区二区| 欧美精品久久99| 欧美性猛交xxxxxxxx| 91丨九色丨尤物| 成人v精品蜜桃久久一区| 久久99国产精品久久99| 蜜桃av噜噜一区| 五月开心婷婷久久| 香蕉久久一区二区不卡无毒影院 | 亚洲综合在线免费观看| 中文字幕在线观看一区二区| 国产区在线观看成人精品| 久久久久久一级片| 国产亚洲一二三区| 天天影视网天天综合色在线播放| 亚洲亚洲精品在线观看| 亚洲一区二区三区四区不卡| 亚洲一区二区欧美激情| 日本系列欧美系列| 久久国产精品99久久人人澡| 国产精品一区二区在线观看不卡| 丁香激情综合国产| 91美女片黄在线观看91美女| 99re免费视频精品全部| 欧美福利视频一区| 国产欧美日韩视频一区二区| 亚洲视频在线观看一区| 免费观看成人av| 欧美伦理影视网| 中文字幕精品一区| 视频一区中文字幕| 国产精品性做久久久久久| 在线观看亚洲一区| 26uuu亚洲婷婷狠狠天堂| 亚洲图片欧美综合| 国产91综合网| 欧美精品一区二区三区四区| 中文字幕在线不卡一区二区三区| 婷婷开心激情综合| 色综合久久综合网| 久久久久久综合| 欧美96一区二区免费视频| 91蜜桃网址入口| 久久中文字幕电影| 亚洲va欧美va国产va天堂影院| 国产91丝袜在线18| 日韩精品一区二区三区在线| 亚洲午夜精品一区二区三区他趣| 99热在这里有精品免费| 久久久99久久| 国产乱码精品一区二区三区五月婷| 欧美日韩一区二区不卡| 亚洲综合偷拍欧美一区色| 成人爽a毛片一区二区免费| 欧美视频中文字幕| 国产成人在线观看| 精品国产乱码久久久久久浪潮 | 欧美日韩在线亚洲一区蜜芽| 国产日韩欧美高清| 国产91精品在线观看| 久久你懂得1024| 成人毛片在线观看| 中文乱码免费一区二区| 成人激情免费电影网址| 亚洲色图欧洲色图| 欧美日韩另类一区| 秋霞电影网一区二区| 久久伊人蜜桃av一区二区| 久久99在线观看| 国产婷婷色一区二区三区四区| 成人理论电影网| 亚洲第一成年网| 久久久久久免费| 日本丰满少妇一区二区三区| 亚洲曰韩产成在线| 26uuu亚洲综合色欧美| 波多野结衣中文字幕一区二区三区| 综合久久国产九一剧情麻豆| 欧美人xxxx| 国产91丝袜在线播放0| 亚洲制服丝袜一区| 久久久噜噜噜久久人人看 | 欧美性高清videossexo| 久久精品国产久精国产| 中文字幕一区二区三区乱码在线 | 午夜伦理一区二区| 国产女人18毛片水真多成人如厕| 色天使久久综合网天天| 韩国三级在线一区| 一区二区三区在线免费| 欧美国产视频在线| 欧美日本一道本| 91丝袜国产在线播放| 国精产品一区一区三区mba桃花 | 91在线国内视频| 亚洲精品午夜久久久| 亚洲色图丝袜美腿| 亚洲综合一区二区精品导航| 亚洲国产欧美日韩另类综合| 午夜视频在线观看一区二区| 日本欧美在线观看| 韩日精品视频一区| 日本韩国欧美国产| 欧美一区二区不卡视频| 国产日韩精品一区二区浪潮av| 中文字幕欧美一| 久久精品国内一区二区三区| 白白色亚洲国产精品| 7777女厕盗摄久久久| 国产三区在线成人av| 午夜成人免费视频| 色欧美88888久久久久久影院| 欧美一区二区三区男人的天堂| 国产精品美女久久久久久| 天天色天天爱天天射综合| av一区二区三区| 日韩三级免费观看| 亚洲国产日韩a在线播放性色| 韩国一区二区在线观看| 欧美在线999| 亚洲欧美日本韩国| www.欧美日韩| 久久综合999| 韩国视频一区二区| 欧美精品v国产精品v日韩精品 | 国产精品国产三级国产aⅴ原创| 日韩av高清在线观看| 欧美性受xxxx| 一区二区三区在线不卡| 91网站黄www| 亚洲综合成人在线视频| 色婷婷亚洲精品| 亚洲一二三级电影| 欧美优质美女网站| 亚洲国产成人91porn| aaa亚洲精品| 亚洲免费av观看| 日本高清免费不卡视频| 亚洲成人一区二区在线观看| 欧美日韩一级二级三级| 视频一区二区国产| 日韩欧美一级二级| 国产麻豆精品久久一二三| 欧美成人艳星乳罩| 高清免费成人av| 一区二区三区欧美| 精品1区2区3区| 国内精品久久久久影院一蜜桃| 日本一区二区三区电影| 一本一道久久a久久精品综合蜜臀| 一区二区三区中文免费| 欧美一区二区大片| 懂色av噜噜一区二区三区av| 亚洲色图一区二区三区| 日韩免费观看高清完整版在线观看| 韩国欧美国产1区| 亚洲精品高清在线| 久久综合久久综合久久综合| 91女人视频在线观看| 日本在线播放一区二区三区| 久久精品水蜜桃av综合天堂| 欧美日韩国产天堂| 国产一区二区不卡在线|