1.1.6移植笔记(初级篇)(8)

static void s3c2440_nand_select_chip(struct mtd_info *mtd, int chip) 

    S3C2440_NAND * const s3c2440nand = S3C2440_GetBase_NAND(); 

 

    if (chip == -1) { 

        s3c2440nand->NFCONT |= S3C2440_NFCONT_nFCE; 

    } else { 

        s3c2440nand->NFCONT &= ~S3C2440_NFCONT_nFCE; 

    } 

 

/* command and control functions */ 

static void s3c2440_nand_hwcontrol(struct mtd_info *mtd, int cmd) 

    S3C2440_NAND * const s3c2440nand = S3C2440_GetBase_NAND(); 

    struct nand_chip *chip = mtd->priv; 

 

    switch (cmd) { 

    case NAND_CTL_SETNCE: 

    case NAND_CTL_CLRNCE: 

        printf("%s: called for NCE\n", __FUNCTION__); 

        break

 

    case NAND_CTL_SETCLE: 

        chip->IO_ADDR_W = (void *)&s3c2440nand->NFCMD; 

        break

 

    case NAND_CTL_SETALE: 

        chip->IO_ADDR_W = (void *)&s3c2440nand->NFADDR; 

        break

 

        /* NAND_CTL_CLRCLE: */ 

        /* NAND_CTL_CLRALE: */ 

    default

        chip->IO_ADDR_W = (void *)&s3c2440nand->NFDATA; 

        break

    } 

 

/* s3c2440_nand_devready() 

 * 

 * returns 0 if the nand is busy, 1 if it is ready 

 */ 

static int s3c2440_nand_devready(struct mtd_info *mtd) 

    S3C2440_NAND * const s3c2440nand = S3C2440_GetBase_NAND(); 

 

    return (s3c2440nand->NFSTAT & S3C2440_NFSTAT_READY); 

 

/* 

 * Nand flash hardware initialization: 

 * Set the timing, enable NAND flash controller 

 */ 

static void s3c24x0_nand_inithw(void

    S3C2410_NAND * const s3c2410nand = S3C2410_GetBase_NAND(); 

    S3C2440_NAND * const s3c2440nand = S3C2440_GetBase_NAND(); 

 

#define TACLS   0 

#define TWRPH0  4 

#define TWRPH1  2 

 

    if (0) 

    { 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5192f09a4a43c65b3eaf648136b55d4c.html