给NandFlash整得有些头大,大家看看下面这段代码问题何在

[复制链接]
2505|3
 楼主| 古道热肠 发表于 2008-10-22 12:51 | 显示全部楼层 |阅读模式
下面这段代码是读NANDFlash的ID,用AT91SAM7S64模块8位并行总线接口,三块板子都不成功,估计是软件问题.<br /><br />/*<br />void&nbsp;KEY_ISR&nbsp;(void)&nbsp;__irq<br />{<br />&nbsp;&nbsp;&nbsp;INT8U&nbsp;i;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_AIC_IDCR&nbsp;=&nbsp;(1&nbsp;&lt&lt&nbsp;AT91C_ID_PIOA);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//禁止PIOA外围中断功能<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;*AT91C_PIOA_ISR;<br />&nbsp;&nbsp;&nbsp;*AT91C_AIC_ICCR&nbsp;=&nbsp;(1&lt&ltAT91C_ID_PIOA);<br />&nbsp;&nbsp;&nbsp;DBGU_Print(&quot;Interrupt
&quot;);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_AIC_IECR&nbsp;=&nbsp;(1&lt&ltAT91C_ID_PIOA);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能PIOA外围中断<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_AIC_EOICR&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;End&nbsp;of&nbsp;Interrupt&nbsp;<br />}<br />*/<br /><br />//----------------------------------------------------------------------<br />void&nbsp;port_Delay(INT16U&nbsp;time)<br />{<br />&nbsp;&nbsp;INT16U&nbsp;i;<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lttime;&nbsp;i++);<br />&nbsp;&nbsp;}<br />}<br /><br /><br />//----------------------------------------------------------------------<br />void&nbsp;port_ClkOpen(void)<br />{<br />&nbsp;&nbsp;&nbsp;*AT91C_PMC_SCER&nbsp;=&nbsp;AT91C_CKGR_MOSCEN;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能系统时钟寄存器的处理器时钟&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PMC_PCER&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;AT91C_ID_PIOA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />////////////////////////////////////////////////////////////////<br />void&nbsp;port_8BitInit(void)<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_PER&nbsp;|=&nbsp;PORT_CTRL_MASK;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_OER&nbsp;|=&nbsp;(PORT_CTRL_MASK&nbsp;|&nbsp;PORT_8BIT);<br />&nbsp;&nbsp;&nbsp;//*AT91C_PIOA_ODR&nbsp;|=&nbsp;(NUSB_INT&nbsp;|&nbsp;HDD_INTRQ);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_PPUER&nbsp;|=&nbsp;(PORT_CTRL_MASK&nbsp;|&nbsp;PORT_8BIT&nbsp;);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_OWER&nbsp;=&nbsp;PORT_8BIT;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_OWDR&nbsp;=&nbsp;~PORT_8BIT;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NWRITE_HIGH();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//拉高写信号线<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NREAD_HIGH();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//拉高读信号线<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NLEBA_HIGH();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//总线器件片选切换到非选中状态<br />&nbsp;//&nbsp;&nbsp;NLEAB_HIGH();<br />&nbsp;//&nbsp;&nbsp;NOEBA_HIGH();<br />&nbsp;//&nbsp;&nbsp;NOEAB_HIGH();<br />}<br /><br /><br />//------------------------------------------------------------------------<br />void&nbsp;port_IntInit(void)<br />{<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;/*<br />&nbsp;&nbsp;&nbsp;*AT91C_AIC_IDCR&nbsp;=&nbsp;(1&nbsp;&lt&lt&nbsp;AT91C_ID_PIOA);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//禁止PIOA外围中断功能<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;AT91C_BASE_AIC-&gtAIC_SMR[AT91C_ID_PIOA]&nbsp;=&nbsp;(AT91C_AIC_PRIOR_HIGHEST&nbsp;|&nbsp;AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//中断模式(中断级别和触发模式)<br />&nbsp;&nbsp;&nbsp;*AT91C_AIC_ICCR&nbsp;=&nbsp;(1&lt&ltAT91C_ID_PIOA);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//中断清除&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_IDR&nbsp;=&nbsp;0xffffffff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//禁止所有PIOA中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;AT91C_BASE_AIC-&gtAIC_SVR[AT91C_ID_PIOA]&nbsp;=&nbsp;(unsigned&nbsp;long)KEY_ISR;<br />&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;*AT91C_PIOA_IER&nbsp;=&nbsp;(SW3_MASK&nbsp;|&nbsp;SW4_MASK);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//允许SW3,4中断<br />&nbsp;&nbsp;&nbsp;*AT91C_AIC_IECR&nbsp;=&nbsp;(1&lt&ltAT91C_ID_PIOA);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能PIOA外围中断<br />&nbsp;&nbsp;&nbsp;*AT91C_AIC_FFDR&nbsp;=&nbsp;0xffffffff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//禁止FIQ&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*/<br />}<br /><br /><br />//----------------------------------------------------------------------<br />/*<br />INT8U&nbsp;port_GetINT(INT8U&nbsp;u8Device)<br />{<br />&nbsp;&nbsp;&nbsp;if(CH375_INTRQ&nbsp;==&nbsp;u8Device)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(*AT91C_PIOA_PDSR&nbsp;&&nbsp;NUSB_INT)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;else&nbsp;if(IDE_INTRQ&nbsp;==&nbsp;u8Device)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(*AT91C_PIOA_PDSR&nbsp;&&nbsp;HDD_INTRQ)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}&nbsp;<br />*/<br /><br />//----------------------------------------------------------------------<br />void&nbsp;port_SetAddress(INT8U&nbsp;u8Add)<br />{<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_ODSR&nbsp;=&nbsp;((INT32U)u8Add)&lt&ltADPort_Offset;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;ADD_LATCH_HIGH();<br />&nbsp;//&nbsp;&nbsp;port_Delay(1);<br />&nbsp;&nbsp;&nbsp;ADD_LATCH_LOW();<br />}<br /><br /><br />//----------------------------------------------------------------------<br />void&nbsp;port_WriteData(INT8U&nbsp;add,&nbsp;INT8U&nbsp;data)<br />{<br />&nbsp;&nbsp;&nbsp;port_SetAddress(add);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0111&nbsp;1110b<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_ODSR&nbsp;=&nbsp;((INT32U)data)&lt&ltADPort_Offset;<br /><br />&nbsp;&nbsp;&nbsp;NWRITE_LOW();<br />&nbsp;//&nbsp;&nbsp;port_Delay(1);<br />&nbsp;&nbsp;&nbsp;NWRITE_HIGH();&nbsp;&nbsp;<br />}<br /><br />void&nbsp;port_WriteDataNoAdd(INT8U&nbsp;data)<br />{<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_ODSR&nbsp;=&nbsp;((INT32U)data)&lt&ltADPort_Offset;<br /><br />&nbsp;&nbsp;&nbsp;NWRITE_LOW();<br />&nbsp;//&nbsp;&nbsp;port_Delay(1);<br />&nbsp;&nbsp;&nbsp;NWRITE_HIGH();&nbsp;&nbsp;<br />}<br /><br /><br />//----------------------------------------------------------------------<br />INT8U&nbsp;port_ReadData(INT8U&nbsp;add)<br />{<br />&nbsp;&nbsp;&nbsp;INT32U&nbsp;temp32;<br />&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;temp8;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;port_SetAddress(add);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0111&nbsp;1110b<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_ODR&nbsp;|=&nbsp;(PORT_8BIT);<br />&nbsp;&nbsp;&nbsp;NREAD_LOW();<br />&nbsp;&nbsp;//&nbsp;port_Delay(1);<br />&nbsp;&nbsp;&nbsp;temp32&nbsp;=&nbsp;*AT91C_PIOA_PDSR;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;NREAD_HIGH();<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_OER&nbsp;|=&nbsp;(PORT_8BIT);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;temp8&nbsp;=&nbsp;(INT8U)(temp32&gt&gtADPort_Offset);<br />&nbsp;&nbsp;&nbsp;return&nbsp;temp8;<br />}<br /><br /><br />//----------------------------------------------------------------------<br />INT8U&nbsp;port_ReadDataNoAdd(void)<br />{<br />&nbsp;&nbsp;&nbsp;INT32U&nbsp;temp32;<br />&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;temp8;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_ODR&nbsp;|=&nbsp;(PORT_8BIT);<br />&nbsp;&nbsp;&nbsp;NREAD_LOW();<br />&nbsp;//&nbsp;&nbsp;port_Delay(1);<br />&nbsp;&nbsp;&nbsp;temp32&nbsp;=&nbsp;*AT91C_PIOA_PDSR;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;NREAD_HIGH();<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_OER&nbsp;|=&nbsp;(PORT_8BIT);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;temp8&nbsp;=&nbsp;(INT8U)(temp32&gt&gtADPort_Offset);<br />&nbsp;&nbsp;&nbsp;return&nbsp;temp8;&nbsp;&nbsp;<br />}<br /><br /><br /><br />void&nbsp;TestADPort(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;port_8BitInit();<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_CMD_LATCH_HIGH();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_CMD_LATCH_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_ADDR_LATCH_HIGH();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_ADDR_LATCH_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NLEBA_HIGH();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NLEBA_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port_WriteDataNoAdd(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port_WriteDataNoAdd(0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port_WriteDataNoAdd(0x55);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port_WriteDataNoAdd(0xaa);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;COMMAND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;<br />#define&nbsp;&nbsp;&nbsp;&nbsp;ADDRESS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x05&nbsp;&nbsp;&nbsp;&nbsp;<br />#define&nbsp;&nbsp;&nbsp;&nbsp;D_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x01<br />#define&nbsp;&nbsp;&nbsp;&nbsp;INACTIVE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x09&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />void&nbsp;NandFlash_Reset(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//flash&nbsp;reset<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NLEBA_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_CMD_LATCH_HIGH();<br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_ADDR_LATCH_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;port_WriteDataNoAdd(0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;NLEBA_HIGH();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt3000;&nbsp;i++)&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//delay&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;NandFlash_ReadID(uchar&nbsp;*IDBuff)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucIDBuff[4];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NLEBA_LOW();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_CMD_LATCH_HIGH();<br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_ADDR_LATCH_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;port_WriteDataNoAdd(0x90);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_CMD_LATCH_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_ADDR_LATCH_HIGH();<br />&nbsp;&nbsp;&nbsp;&nbsp;port_WriteDataNoAdd(0x00);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_CMD_LATCH_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_ADDR_LATCH_LOW();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ucIDBuff[0]&nbsp;=&nbsp;port_ReadDataNoAdd();<br />&nbsp;&nbsp;&nbsp;&nbsp;ucIDBuff[1]&nbsp;=&nbsp;port_ReadDataNoAdd();<br />&nbsp;&nbsp;&nbsp;&nbsp;ucIDBuff[2]&nbsp;=&nbsp;port_ReadDataNoAdd();<br />&nbsp;&nbsp;&nbsp;&nbsp;ucIDBuff[3]&nbsp;=&nbsp;port_ReadDataNoAdd();<br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy(IDBuff,ucIDBuff,4);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NLEBA_HIGH();<br />}<br /><br /><br />void&nbsp;TestNandFlash(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucDataBuff[4];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NandFlash_Reset();<br />&nbsp;&nbsp;&nbsp;&nbsp;NandFlash_ReadID(ucDataBuff);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br />
 楼主| 古道热肠 发表于 2008-10-22 12:53 | 显示全部楼层

贴上底层定义

#ifdef&nbsp;&nbsp;PORT_GLOBAL<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PORT_EXN&nbsp;<br />#else<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;PORT_EXN&nbsp;extern<br />#endif<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///////////////////////////////////////////////////////////////////////<br />#define&nbsp;PORT_8BIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x01FE0000)<br />#define&nbsp;ADPort_Offset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据总线的偏移量<br />///////////////////////////////////////////////////////////////////////<br />#define&nbsp;NUSB_INT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;26)<br />///////////////////////////////////////////////////////////////////////<br />#define&nbsp;HDD_INTRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;30)<br /><br />///////////////////////////////////////////////////////////////////////<br />#define&nbsp;Nandflash_CMD_LATCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;15)&nbsp;&nbsp;//PA_15<br />#define&nbsp;Nandflash_CMD_LATCH_HIGH()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_SODR&nbsp;|=&nbsp;Nandflash_CMD_LATCH)&nbsp;<br />#define&nbsp;Nandflash_CMD_LATCH_LOW()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_CODR&nbsp;|=&nbsp;Nandflash_CMD_LATCH)<br />///////////////////////////////////////////////////////////////////////<br />#define&nbsp;Nandflash_ADDR_LATCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;2)&nbsp;&nbsp;//PA_2<br />#define&nbsp;Nandflash_ADDR_LATCH_HIGH()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_SODR&nbsp;|=&nbsp;Nandflash_ADDR_LATCH)&nbsp;<br />#define&nbsp;Nandflash_ADDR_LATCH_LOW()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_CODR&nbsp;|=&nbsp;Nandflash_ADDR_LATCH)<br /><br /><br />///////////////////////////////////////////////////////////////////////<br />#define&nbsp;ADD_LATCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;2)&nbsp;&nbsp;//PA_2<br />#define&nbsp;ADD_LATCH_HIGH()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_SODR&nbsp;|=&nbsp;ADD_LATCH)&nbsp;<br />#define&nbsp;ADD_LATCH_LOW()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_CODR&nbsp;|=&nbsp;ADD_LATCH)<br />///////////////////////////////////////////////////////////////////////<br />#define&nbsp;NWRITE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;26)&nbsp;//PA26<br />#define&nbsp;NWRITE_HIGH()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_SODR&nbsp;|=&nbsp;NWRITE)&nbsp;<br />#define&nbsp;NWRITE_LOW()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_CODR&nbsp;|=&nbsp;NWRITE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />///////////////////////////////////////////////////////////////////////<br />#define&nbsp;NREAD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;27)&nbsp;//PA27<br />#define&nbsp;NREAD_HIGH()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_SODR&nbsp;|=&nbsp;NREAD)<br />#define&nbsp;NREAD_LOW()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_CODR&nbsp;|=&nbsp;NREAD)<br />///////////////////////////////////////////////////////////////////////<br />///////////////////////////////////////////////////////////////////////<br />#define&nbsp;NLEBA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;28)&nbsp;//PA28<br />#define&nbsp;NLEBA_HIGH()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_SODR&nbsp;|=&nbsp;NLEBA)<br />#define&nbsp;NLEBA_LOW()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*AT91C_PIOA_CODR&nbsp;|=&nbsp;NLEBA)<br /><br />#define&nbsp;PORT_CTRL_MASK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Nandflash_CMD_LATCH|Nandflash_ADDR_LATCH|ADD_LATCH&nbsp;|&nbsp;NWRITE&nbsp;|&nbsp;NREAD&nbsp;|&nbsp;NLEBA&nbsp;)<br /><br />PORT_EXN&nbsp;&nbsp;INT8U&nbsp;port_GetINT(INT8U);<br />PORT_EXN&nbsp;&nbsp;void&nbsp;&nbsp;port_Delay(INT16U&nbsp;time);<br />PORT_EXN&nbsp;&nbsp;void&nbsp;&nbsp;port_WriteData(INT8U&nbsp;add,&nbsp;INT8U&nbsp;data);<br />PORT_EXN&nbsp;&nbsp;INT8U&nbsp;port_ReadData(INT8U&nbsp;add);<br />PORT_EXN&nbsp;&nbsp;void&nbsp;&nbsp;port_SetAddress(INT8U&nbsp;u8Add);<br />PORT_EXN&nbsp;&nbsp;void&nbsp;&nbsp;port_ClkOpen(void);<br />PORT_EXN&nbsp;&nbsp;void&nbsp;&nbsp;port_SpiInit(void);<br />PORT_EXN&nbsp;&nbsp;void&nbsp;&nbsp;port_8BitInit(void);<br />PORT_EXN&nbsp;&nbsp;void&nbsp;port_IntInit(void);<br />
alex74 发表于 2008-10-22 15:31 | 显示全部楼层

。。。

下面这个函数没发现错误。<br />查线吧。用示波器。<br /><br />void&nbsp;NandFlash_ReadID(uchar&nbsp;*IDBuff)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucIDBuff[4];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NLEBA_LOW();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_CMD_LATCH_HIGH();<br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_ADDR_LATCH_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;port_WriteDataNoAdd(0x90);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_CMD_LATCH_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_ADDR_LATCH_HIGH();<br />&nbsp;&nbsp;&nbsp;&nbsp;port_WriteDataNoAdd(0x00);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_CMD_LATCH_LOW();<br />&nbsp;&nbsp;&nbsp;&nbsp;Nandflash_ADDR_LATCH_LOW();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ucIDBuff[0]&nbsp;=&nbsp;port_ReadDataNoAdd();<br />&nbsp;&nbsp;&nbsp;&nbsp;ucIDBuff[1]&nbsp;=&nbsp;port_ReadDataNoAdd();<br />&nbsp;&nbsp;&nbsp;&nbsp;ucIDBuff[2]&nbsp;=&nbsp;port_ReadDataNoAdd();<br />&nbsp;&nbsp;&nbsp;&nbsp;ucIDBuff[3]&nbsp;=&nbsp;port_ReadDataNoAdd();<br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy(IDBuff,ucIDBuff,4);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NLEBA_HIGH();<br />}<br />
 楼主| 古道热肠 发表于 2008-10-25 10:09 | 显示全部楼层

熟悉AT-ARM的朋友多多指教.

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

284

主题

6411

帖子

16

粉丝
快速回复 在线客服 返回列表 返回顶部