| 照着测试程序写的函数怎么都不能读,求前辈指点: #include"s3c2440.h"
 
 static void NF_Reset()                //复位芯片
 {
 NFCONT &= ~(1<<1);                                //片选
 NFSTAT |= (1<<2);                                //
 NFCMD  = (0xff);                                //reset 芯片
 while(!(NFSTAT&(1<<2)));                //检测RNB传输
 NFCONT |= (1<<1);                                //禁止片选
 }
 
 void NF_Init(void)
 {
 NFCONF = (1<<12)|(4<<8)|(0<<4)|(0<<0);
 NFCONT =(0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0);
 NFSTAT = 0;
 NF_Reset();
 }
 
 char NF_ReadID()
 {
 char        pMID;
 char        pDID;
 char        nBuff;
 char        n4thcycle;
 int        i;
 
 
 NFCONT &= ~(1<<1);                        //发出片选
 NFSTAT |= (1<<2);                        //开启RnB传输检测
 NFCMD  = 0x90;                        // read id command
 NFADDR = 0x0;
 for ( i = 0; i < 100; i++ );
 
 pMID = NFDATA8;
 pDID = NFDATA8;
 
 nBuff     = NFDATA8;                  //Internal Chip Number, Cell Type, Number of Simultaneously Programmed Pages, Etc
 n4thcycle = NFDATA8;                 //Page Size, Block Size,Redundant Area Size, Organization, Serial Access Minimum
 NFCONT |= (1<<1);                         //禁止片选
 
 
 return (pDID);
 }
 //-------------------------------------------------------------------------------------------------------------------
 
 
 
 /**************** nand flash 页读取函数 *******************************************************/
 /********************** 2048B PAGE ************************************************************/
 void NF_ReadPage_2KB(U32 block_number,U32 page_number, U8 * to)                //读2048B ,页地址为0x00000~0x1ffff
 {
 U32 i;
 U32 addr = (block_number << 6) + page_number;
 //NF_Reset();
 NFCONT &= ~(1<<1);                                //发出片选
 NFSTAT |= (1<<2);                            //开启RnB传输检测
 
 
 NFCMD  = 0x00;                        //发出读命令1
 
 NFADDR = 0x00;                        //发出地址,读页
 NFADDR = 0x00;
 NFADDR = (addr) & 0xff;
 NFADDR = (addr >> 8) & 0xff;
 NFADDR = (addr >> 16) & 0xff;
 
 NFCMD  = 0x30;                   //发出读命令2
 
 
 while(!(NFSTAT&(1<<2)));        //查询是否就绪
 
 for (i = 0; i < 2048; i++)
 {
 to[i] =  NFDATA8;
 }
 
 
 NFCONT |= (1<<1);                                //关闭片选
 
 }
 
 
 /****************************** nand flash 页随机字节读取函数 ****************************************/
 unsigned char  NF_ReadByte(unsigned int ByteAddr)
 {
 U32 Temp1;
 
 NFCONT &= ~(1<<1);                                                  //发出片选
 NFSTAT |= (1<<2);                                                  //开启RnB传输检测
 
 
 NFCMD  = 0x05;                                                     //发出 随机读 命令1
 
 NFADDR = ByteAddr& 0xff;                     //Column Address A0~A7
 NFADDR = (ByteAddr >> 8) & 0xff;         //Column Address A8~A11
 NFADDR = (ByteAddr >> 16) & 0xff;         //Row Address    A12~A19
 //NFADDR = (ByteAddr >> 24) & 0xff;    //Row Address    A20~A27
 //NFADDR = (ByteAddr >> 32) & 0xff;         //                            A28
 
 NFCMD = 0xe0;                                             //发出 随机读 命令2
 
 while(!(NFSTAT&(1<<2)));                 //查询是否就绪
 
 Temp1 =  NFDATA8;
 
 
 NFCONT |= (1<<1);                                                 //关闭片选
 
 return Temp1;
 
 }
 //------------------------------------------------------------------------------------------------------//
 
 
 
 /********************************** 读取NAND FLASH TO SDRAM ************************************/
 /****************   从NAND Flash的0地址处开始读count大小的数据到SDRAM中 ************************/
 
 void NF_TO_SDRAM()
 {
 
 U32 block_number = 0;
 U32 page_number = 0;
 U8 * to = (U8 *) 0x30000000;
 U32 size = 0x100000;
 NF_Init();                                                                //NAND FLASH初始化
 
 while( size > 0 )
 {
 NF_ReadPage_2KB(block_number,page_number, to);
 size -= 2048;
 to += 2048;
 page_number ++;
 if(page_number == 64)
 {
 page_number = 0;
 block_number ++;
 }
 }
 
 }
 //---------------------------------------------------------------------------------------------------------
 
 
 
 
 /**********************   nand flash 2048B 页    写函数 ****************************************************/
 /********************* block_number = 0~2047,page_number = 0~63  ********************************************/
 void NF_WritePage_2KB(U32 block_number,U32 page_number,U8 * from)
 {
 U32 i;
 U32 addr;
 addr = (block_number << 6) + page_number;
 NF_Reset();
 NFCONT &= ~(1<<1);                                //发出片选
 NFSTAT |= (1<<2);                            //开启RnB传输检测
 
 
 NFCMD  = 0x80;                                        //发出写命令1
 
 NFADDR = 0x00;                            //Column Address A0~A7
 NFADDR = 0x00;                                        //Column Address A8~A11
 NFADDR = addr & 0xff;                    //Row Address    A12~A19
 NFADDR = (addr >> 8) & 0xff;    //Row Address    A20~A27
 NFADDR = (addr >> 16) & 0xff;   //Row Address    A28
 
 for (i = 0; i < 2048; i++)     //write flash
 {
 NFDATA8 = from[i];
 }
 
 NFCMD = 0x10;                                        //发出写命令2
 
 for (i = 0; i < 1000; i++);     //延时、write flash
 
 while(!(NFSTAT&(1<<2)));        //查询是否就绪
 NFCONT |= (1<<1);                                //关闭片选
 }
 
 
 /****************************** nand flash 页随机字节 写函数 ****************************************/
 /************************* ByteAddr 为写入的地址,dat为写入的字节数据  ******************************/
 void  NF_WriteByte(U32 ByteAddr,U8 dat)
 {
 
 NFCONT &= ~(1<<1);                                                  //发出片选
 NFSTAT |= (1<<2);                                                  //开启RnB传输检测志
 
 
 NFCMD  = 0x85;                                                     //发出 随机写 命令
 
 NFADDR = ByteAddr& 0xff;                     //Column Address A0~A7
 NFADDR = (ByteAddr >> 8) & 0xff;;         //Column Address A8~A11
 
 
 while(!(NFSTAT&(1<<2)));                 //查询是否就绪
 
 NFDATA8 = dat;
 
 
 NFCONT |= (1<<1);                                                 //关闭片选
 
 }
 
 /********************************** nand flash块擦除函数 ********************************************/
 /************************* 输入参数?block_number 块地址 *****************************************/
 void NF_Block_Erase(U32 block_number)                         //block_number = 0~2047
 {
 U32 i;
 U32 addr;
 addr = (block_number << 6);                        //由块地址获得完整的页地址 A12~A28,其中每块的64页选择地址线A12~A17为0
 //假如 要擦除第6块,则 应该给的地址 addr 是 0 0000 0000 1100 0000
 NF_Reset();           //复位
 
 NFCONT &= ~(1<<1);                                //发出片选
 NFSTAT |= (1<<2);                                //开启RnB传输检测
 
 
 NFCMD = 0x60;
 
 NFADDR = (addr) & 0xC0;                   //Row Address    A12~A19,(A18~A28共11条地址线寻址2048个BLOCK)
 NFADDR = (addr >> 8) & 0xff;   //Row Address    A20~A27
 NFADDR = (addr >> 16) & 0xff;  //Row Address    A28
 
 NFCMD = 0xd0;
 
 
 for (i = 0; i < 1000; i++);   //等待
 
 while(!(NFSTAT&(1<<2)));         //查询是否就绪
 NFCONT |= (1<<1);                                //关闭片选
 }
 
 
 //-----------------------------------------------------------------------------------------------
 |