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