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

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

?? nand.c

?? s3c2440裸機程序源碼
?? C
字號:

#define GSTATUS1        (*(volatile unsigned int *)0x560000B0)
#define BUSY            1

typedef unsigned int S3C24X0_REG32;


/* NAND FLASH (see S3C2410 manual chapter 6) */
typedef struct {
    S3C24X0_REG32   NFCONF;
    S3C24X0_REG32   NFCMD;
    S3C24X0_REG32   NFADDR;
    S3C24X0_REG32   NFDATA;
    S3C24X0_REG32   NFSTAT;
    S3C24X0_REG32   NFECC;
} S3C2410_NAND;

/* NAND FLASH (see S3C2440 manual chapter 6, www.100ask.net) */
typedef struct {
    S3C24X0_REG32   NFCONF;
    S3C24X0_REG32   NFCONT;
    S3C24X0_REG32   NFCMD;
    S3C24X0_REG32   NFADDR;
    S3C24X0_REG32   NFDATA;
    S3C24X0_REG32   NFMECCD0;
    S3C24X0_REG32   NFMECCD1;
    S3C24X0_REG32   NFSECCD;
    S3C24X0_REG32   NFSTAT;
    S3C24X0_REG32   NFESTAT0;
    S3C24X0_REG32   NFESTAT1;
    S3C24X0_REG32   NFMECC0;
    S3C24X0_REG32   NFMECC1;
    S3C24X0_REG32   NFSECC;
    S3C24X0_REG32   NFSBLK;
    S3C24X0_REG32   NFEBLK;
} S3C2440_NAND;


typedef struct {
    void (*nand_reset)(void);
    void (*wait_idle)(void);
    void (*nand_select_chip)(void);
    void (*nand_deselect_chip)(void);
    void (*write_cmd)(int cmd);
    void (*write_addr)(unsigned int addr);
    unsigned char (*read_data)(void);
}t_nand_chip;

static S3C2410_NAND * s3c2410nand = (S3C2410_NAND *)0x4e000000;
static S3C2440_NAND * s3c2440nand = (S3C2440_NAND *)0x4e000000;

static t_nand_chip nand_chip;

/* 供外部調用的函數 */
void nand_init(void);
void nand_read(unsigned char *buf, unsigned long start_addr, int size);

/* NAND Flash操作的總入口, 它們將調用S3C2410或S3C2440的相應函數 */
static void nand_reset(void);
static void wait_idle(void);
static void nand_select_chip(void);
static void nand_deselect_chip(void);
static void write_cmd(int cmd);
static void write_addr(unsigned int addr);
static unsigned char read_data(void);

/* S3C2410的NAND Flash處理函數 */
static void s3c2410_nand_reset(void);
static void s3c2410_wait_idle(void);
static void s3c2410_nand_select_chip(void);
static void s3c2410_nand_deselect_chip(void);
static void s3c2410_write_cmd(int cmd);
static void s3c2410_write_addr(unsigned int addr);
static unsigned char s3c2410_read_data();

/* S3C2440的NAND Flash處理函數 */
static void s3c2440_nand_reset(void);
static void s3c2440_wait_idle(void);
static void s3c2440_nand_select_chip(void);
static void s3c2440_nand_deselect_chip(void);
static void s3c2440_write_cmd(int cmd);
static void s3c2440_write_addr(unsigned int addr);
static unsigned char s3c2440_read_data(void);

/* S3C2410的NAND Flash操作函數 */

/* 復位 */
static void s3c2410_nand_reset(void)
{
    s3c2410_nand_select_chip();
    s3c2410_write_cmd(0xff);  // 復位命令
    s3c2410_wait_idle();
    s3c2410_nand_deselect_chip();
}

/* 等待NAND Flash就緒 */
static void s3c2410_wait_idle(void)
{
    int i;
    volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFSTAT;
    while(!(*p & BUSY))
        for(i=0; i<10; i++);
}

/* 發出片選信號 */
static void s3c2410_nand_select_chip(void)
{
    int i;
    s3c2410nand->NFCONF &= ~(1<<11);
    for(i=0; i<10; i++);    
}

/* 取消片選信號 */
static void s3c2410_nand_deselect_chip(void)
{
    s3c2410nand->NFCONF |= (1<<11);
}

/* 發出命令 */
static void s3c2410_write_cmd(int cmd)
{
    volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFCMD;
    *p = cmd;
}

/* 發出地址 */
static void s3c2410_write_addr(unsigned int addr)
{
    int i;
    volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFADDR;
    
    *p = addr & 0xff;
    for(i=0; i<10; i++);
    *p = (addr >> 9) & 0xff;
    for(i=0; i<10; i++);
    *p = (addr >> 17) & 0xff;
    for(i=0; i<10; i++);
    *p = (addr >> 25) & 0xff;
    for(i=0; i<10; i++);
}

/* 讀取數據 */
static unsigned char s3c2410_read_data(void)
{
    volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFDATA;
    return *p;
}

/* S3C2440的NAND Flash操作函數 */

/* 復位 */
static void s3c2440_nand_reset(void)
{
    s3c2440_nand_select_chip();
    s3c2440_write_cmd(0xff);  // 復位命令
    s3c2440_wait_idle();
    s3c2440_nand_deselect_chip();
}

/* 等待NAND Flash就緒 */
static void s3c2440_wait_idle(void)
{
    int i;
    volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand->NFSTAT;
    while(!(*p & BUSY))
        for(i=0; i<10; i++);
}

/* 發出片選信號 */
static void s3c2440_nand_select_chip(void)
{
    int i;
    s3c2440nand->NFCONT &= ~(1<<1);
    for(i=0; i<10; i++);    
}

/* 取消片選信號 */
static void s3c2440_nand_deselect_chip(void)
{
    s3c2440nand->NFCONT |= (1<<1);
}

/* 發出命令 */
static void s3c2440_write_cmd(int cmd)
{
    volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand->NFCMD;
    *p = cmd;
}

/* 發出地址 */
static void s3c2440_write_addr(unsigned int addr)
{
    int i;
    volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand->NFADDR;
    
    *p = addr & 0xff;
    for(i=0; i<10; i++);
    *p = (addr >> 9) & 0xff;
    for(i=0; i<10; i++);
    *p = (addr >> 17) & 0xff;
    for(i=0; i<10; i++);
    *p = (addr >> 25) & 0xff;
    for(i=0; i<10; i++);
}

/* 讀取數據 */
static unsigned char s3c2440_read_data(void)
{
    volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand->NFDATA;
    return *p;
}


/* 在第一次使用NAND Flash前,復位一下NAND Flash */
static void nand_reset(void)
{
    nand_chip.nand_reset();
}

static void wait_idle(void)
{
    nand_chip.wait_idle();
}

static void nand_select_chip(void)
{
    int i;
    nand_chip.nand_select_chip();
    for(i=0; i<10; i++);
}

static void nand_deselect_chip(void)
{
    nand_chip.nand_deselect_chip();
}

static void write_cmd(int cmd)
{
    nand_chip.write_cmd(cmd);
}
static void write_addr(unsigned int addr)
{
    nand_chip.write_addr(addr);
}

static unsigned char read_data(void)
{
    return nand_chip.read_data();
}


/* 初始化NAND Flash */
void nand_init(void)
{
#define TACLS   0
#define TWRPH0  3
#define TWRPH1  0

    /* 判斷是S3C2410還是S3C2440 */
    if ((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002))
    {
        nand_chip.nand_reset         = s3c2410_nand_reset;
        nand_chip.wait_idle          = s3c2410_wait_idle;
        nand_chip.nand_select_chip   = s3c2410_nand_select_chip;
        nand_chip.nand_deselect_chip = s3c2410_nand_deselect_chip;
        nand_chip.write_cmd          = s3c2410_write_cmd;
        nand_chip.write_addr         = s3c2410_write_addr;
        nand_chip.read_data          = s3c2410_read_data;

		/* 使能NAND Flash控制器, 初始化ECC, 禁止片選, 設置時序 */
        s3c2410nand->NFCONF = (1<<15)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0);
    }
    else
    {
        nand_chip.nand_reset         = s3c2440_nand_reset;
        nand_chip.wait_idle          = s3c2440_wait_idle;
        nand_chip.nand_select_chip   = s3c2440_nand_select_chip;
        nand_chip.nand_deselect_chip = s3c2440_nand_deselect_chip;
        nand_chip.write_cmd          = s3c2440_write_cmd;
        nand_chip.write_addr         = s3c2440_write_addr;
        nand_chip.read_data          = s3c2440_read_data;

		/* 設置時序 */
        s3c2440nand->NFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4);
        /* 使能NAND Flash控制器, 初始化ECC, 禁止片選 */
        s3c2440nand->NFCONT = (1<<4)|(1<<1)|(1<<0);
    }
    
    /* 復位NAND Flash */
    nand_reset();
}


#define NAND_SECTOR_SIZE    512
#define NAND_BLOCK_MASK     (NAND_SECTOR_SIZE - 1)

/* 讀函數 */
void nand_read(unsigned char *buf, unsigned long start_addr, int size)
{
    int i, j;
    
    if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
        return ;    /* 地址或長度不對齊 */
    }

    /* 選中芯片 */
    nand_select_chip();

    for(i=start_addr; i < (start_addr + size);) {
      /* 發出READ0命令 */
      write_cmd(0);

      /* Write Address */
      write_addr(i);
      wait_idle();

      for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
          *buf = read_data();
          buf++;
      }
    }

    /* 取消片選信號 */
    nand_deselect_chip();
    
    return ;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人福利视频网站| 精东粉嫩av免费一区二区三区| 久久综合五月天婷婷伊人| 欧美日韩一二三区| 在线播放一区二区三区| 欧美精品丝袜中出| 精品捆绑美女sm三区| 日韩精品一区二区三区在线| 日韩一区二区免费高清| 精品区一区二区| 久久久蜜臀国产一区二区| 中文一区在线播放| 一区二区三区高清在线| 亚洲3atv精品一区二区三区| 日韩电影网1区2区| 激情小说欧美图片| 不卡在线观看av| 欧美午夜精品理论片a级按摩| 亚洲精品少妇30p| 国产三级精品三级| 亚洲美女免费在线| 五月激情综合色| 国产一区二区三区综合| 丁香六月综合激情| 色诱亚洲精品久久久久久| 欧美日韩精品系列| 精品国产一区二区三区忘忧草 | 一二三四区精品视频| 亚洲蜜桃精久久久久久久| 香蕉成人啪国产精品视频综合网| 另类小说欧美激情| 97超碰欧美中文字幕| 日韩一区二区三区视频在线| 中文幕一区二区三区久久蜜桃| 亚洲色欲色欲www在线观看| 五月天中文字幕一区二区| 国产九九视频一区二区三区| 欧美中文字幕一区二区三区亚洲| 欧美一级高清片| 亚洲精品ww久久久久久p站| 日韩av成人高清| av一区二区三区在线| 91精品黄色片免费大全| 国产精品黄色在线观看 | 欧美一区二区三区免费大片| 中文欧美字幕免费| 久久电影网站中文字幕| 91福利社在线观看| 日本一区二区成人| 久久成人羞羞网站| 欧美日韩一区二区三区在线看| 久久久亚洲高清| 日韩和欧美一区二区| 成人涩涩免费视频| www一区二区| 日韩主播视频在线| 欧美无砖专区一中文字| 日韩主播视频在线| 91久久一区二区| 亚洲欧洲性图库| 国产精品亚洲一区二区三区妖精| 欧美精品三级日韩久久| 亚洲影院理伦片| 色综合久久久久网| 中文字幕一区二区三| 国产高清亚洲一区| 久久综合色一综合色88| 蜜臀91精品一区二区三区| 欧美视频你懂的| 亚洲一区二区三区四区五区黄| 99久久久精品| 自拍视频在线观看一区二区| av电影天堂一区二区在线观看| 精品国内片67194| 久热成人在线视频| 2021中文字幕一区亚洲| 久久不见久久见免费视频1| 日韩亚洲欧美一区| 久久精品二区亚洲w码| 日韩女优电影在线观看| 欧美a级理论片| 日韩欧美国产麻豆| 免费成人av资源网| 欧美精品一区二区三区久久久| 久久99精品国产.久久久久久| 91精品欧美久久久久久动漫 | 91久久一区二区| 性欧美疯狂xxxxbbbb| 制服丝袜中文字幕一区| 男男视频亚洲欧美| 欧美mv和日韩mv国产网站| 国产一区二三区| 欧美高清在线视频| 91麻豆国产在线观看| 婷婷激情综合网| 久久久99免费| 91在线你懂得| 香蕉乱码成人久久天堂爱免费| 91精品国产综合久久小美女| 美国一区二区三区在线播放| 久久久高清一区二区三区| 91浏览器打开| 日韩成人精品在线观看| 国产精品美女久久久久高潮| 色婷婷av一区二区| 精品在线免费视频| 亚洲精品第1页| 精品91自产拍在线观看一区| 成人综合在线网站| 日本欧美在线观看| 国产精品久久久久一区| 欧美日韩一级片网站| 国产ts人妖一区二区| 亚洲超丰满肉感bbw| 国产精品无圣光一区二区| 欧美日韩电影一区| 成人av影院在线| 美女在线观看视频一区二区| 亚洲欧美日韩电影| 久久久久久一级片| 成人免费黄色在线| 精品一区二区影视| 污片在线观看一区二区| 国产精品久久久久影院| 欧美成人video| 欧美日韩免费电影| 一本色道久久综合精品竹菊| 国产精品一区在线| 日本麻豆一区二区三区视频| 亚洲欧洲综合另类| 国产精品久久久久久久蜜臀| 日韩免费一区二区三区在线播放| 日本韩国一区二区| 不卡的电影网站| 国产成人在线观看| 国产麻豆精品一区二区| 麻豆91免费观看| 日韩国产欧美在线观看| 亚洲制服丝袜av| 亚洲免费观看高清| 亚洲免费观看高清完整版在线观看熊 | 91污片在线观看| 成人h精品动漫一区二区三区| 国产专区综合网| 久久国产日韩欧美精品| 日韩成人一区二区三区在线观看| 亚洲国产成人精品视频| 亚洲欧美成人一区二区三区| 一区在线播放视频| 最新热久久免费视频| 国产精品免费丝袜| 18涩涩午夜精品.www| 最新国产精品久久精品| 亚洲人123区| 亚洲黄色av一区| 午夜欧美在线一二页| 日韩影院精彩在线| 看片网站欧美日韩| 国产精品123区| 99久久精品一区| 欧美在线三级电影| 欧美电影在线免费观看| 欧美一区二区三区播放老司机| 欧美一区二区三区白人| 久久亚洲捆绑美女| 国产精品嫩草久久久久| 亚洲精品自拍动漫在线| 午夜影院久久久| 蜜臀av国产精品久久久久| 国产自产v一区二区三区c| 国产69精品久久久久毛片| 成人在线综合网站| 色噜噜狠狠色综合中国| 欧美精品久久久久久久久老牛影院| 欧美一区二区三区男人的天堂| 久久网这里都是精品| 中文字幕亚洲欧美在线不卡| 一区二区在线免费观看| 免费看精品久久片| 国产69精品一区二区亚洲孕妇| 91老师国产黑色丝袜在线| 欧美蜜桃一区二区三区| 国产亚洲综合av| 亚洲成av人片在线| 国产激情视频一区二区在线观看 | 精品福利二区三区| 国产精品国产自产拍高清av | 亚洲一区在线观看免费| 激情伊人五月天久久综合| 色偷偷一区二区三区| 欧美高清www午色夜在线视频| 国产女同互慰高潮91漫画| 午夜精品一区二区三区电影天堂| 国产一区二区美女| 欧美亚洲国产bt| 国产精品二三区| 国产综合久久久久久鬼色| 欧美中文字幕一区二区三区 | 色综合av在线| 国产亚洲精品7777|