把周工的程序仔细看了一下,进行了修改,目前用JTAG在片外SRAM中调试,读一个扇区速度可以达到842KBIT/S,速度还是很慢,周工的代码有几处我不大理解,还请指点。<br />/*********************************************************************************************************<br />** 函数名称: SYS_PortIn<br />** 功能描述: 从ATA设备指定的寄存器中读出一个字的数据,有些寄存器只有一个字节数有效。<br />** 输 入: reg 寄存器名称<br />** 输 出: 读出的数据<br />** 全局变量:<br />** 调用模块: <br />********************************************************************************************************/<br />uint16 SYS_PortIn(uint32 reg)<br />{<br /> uint16 res ;<br /><br /> *(uint16* )(ATA_EN|ATA_ALE|reg) = 0; //为何此处要写0?<br /> res = *(uint16* )(ATA_EN|ATA_RW) ;// 注意,这时不能对该BLANK进行操作<br /> *(uint16* )(ATA_EN|ATA_ALE|ATA_OUT|ATA_CS1|ATA_CS0) = 0;//为何此处要写0?<br /><br /> return res;<br />}<br /><br /><br />/*********************************************************************************************************<br />** 函数名称: SYS_PortOut<br />** 功能描述: 向ATA设备指定的寄存器中写入一个字的数据,有些寄存器只有一个字节数有效。<br />** 输 入: reg 寄存器名称<br />** 输 出: 无<br />** 全局变量:<br />** 调用模块: <br />********************************************************************************************************/<br />void SYS_PortOut(uint32 reg, uint16 data)<br />{ <br /><br /> *(uint16* )(ATA_EN|ATA_ALE|ATA_OUT|reg) =0;//为何此处要写0?<br /><br /> *(uint16* )(ATA_EN|ATA_RW) = data;<br /> *(uint16* )(ATA_EN|ATA_ALE|ATA_OUT|ATA_CS1|ATA_CS0) = 0;//为何此处要写0?<br /><br /><br />}<br />
|