DIY优盘与PC遥控器接收器NandFlash已基本调试成功,即将进行改

[复制链接]
3428|1
 楼主| 古道热肠 发表于 2008-11-6 14:59 | 显示全部楼层 |阅读模式
最近将NandFlash&nbsp;的驱动进行了修改并测试,三台样机,终于调试出一台可用的.驱动源代码如下:<br /><br /><br />#include&nbsp;&quot;AT91SAM7S64a.h&quot;<br />#include&nbsp;&quot;Board.h&quot;<br />#include&nbsp;&quot;type.h&quot;<br />#include&nbsp;&quot;AD_Port.h&quot;<br />//#include&nbsp;&quot;dbgu.h&quot;<br />#include&nbsp;&ltstring.h&gt<br /><br /><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|PORT_8BIT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选中GPIO控制输出<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_OER&nbsp;|=&nbsp;(PORT_CTRL_MASK&nbsp;|&nbsp;PORT_8BIT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//打开输出三态门<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 />/*<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 />&nbsp;&nbsp;<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 />void&nbsp;port_WriteDataNoAdd(INT8U&nbsp;data)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;long&nbsp;&nbsp;ulWriteData;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ulWriteData&nbsp;=&nbsp;(INT32U)data;<br />&nbsp;&nbsp;&nbsp;&nbsp;ulWriteData&nbsp;&lt&lt=&nbsp;ADPort_Offset;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_ODSR&nbsp;=&nbsp;ulWriteData;<br />&nbsp;<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 />/*<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;port_8BitInit();<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 /><br />
 楼主| 古道热肠 发表于 2008-11-6 15:05 | 显示全部楼层

原来的代码主要BUG如下

1.没有初始化硬件使其工作在模拟8位并行总线方式,加上了始下初始化操作:<br />&nbsp;port_8BitInit();<br /><br />2.以下写法存在问题,达不到应有的功能,不能将一个字节类型的入口参数强制转换成长整形后进行运算.<br />&nbsp;*AT91C_PIOA_ODSR&nbsp;=&nbsp;((INT32U)data)&lt&ltADPort_Offset;<br />修改为以下方式后运行良好<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;long&nbsp;&nbsp;ulWriteData;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ulWriteData&nbsp;=&nbsp;(INT32U)data;<br />&nbsp;&nbsp;&nbsp;&nbsp;ulWriteData&nbsp;&lt&lt=&nbsp;ADPort_Offset;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*AT91C_PIOA_ODSR&nbsp;=&nbsp;ulWriteData;<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

284

主题

6411

帖子

16

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