正在加载图片...
义如程序清单1.5所示。 程序清单12读取ATA设备寄存器函数 #ifdef ATA BUS at &bit uint16 SYs PortIn(uint32 reg) /*8位总线的读寄存器函数* uint16 res OS ENTER CRITICALO /*关中断考 IO2DIR= IO2DiR MASK DATA. *定义输出口其它为输入( ATA DATA为输入)* IOICLR= CS at P1 地址与片选信号都为低电平 IOISET=re 地址高电平位输出,完成地址的设置 读低字节 IOOCLR= IDE RD /读信号脚置低 res=(uint8 ((O2PIN&ATA DATA)>>16) 读取数据* IOOSET= IDE RD 使读信号为高* 读高字节 f(reg=ATA REG DATA 如果读数据寄存器,读高字节制 IOOCLR= IDE RD /*读信号脚置低 +=m0 IN&ATA DAtar>8x读取数据 IOOSET= IDE RD /*使读信号为高 IO1SET= Addr cs at PI 输出控制信号置高 OS EXIT CRITICALO: /*开中断 return res 返回数值 uint16 sYs Portin(uint32 reg) /*8位总线的读寄存器函数* OS ENTER CRITICALO /*关中断 IO2DIR= IO2DIR MASK DATA /*定义输出口其它为输入( ATA DATA为输入)*/ IOICLR= Addr Cs at P1 *控所硬盘引脚信号输出(输出高电平)*/ IOISET=reg *控所硬盘引脚信号输出(输出低电平)* IOOCLR= IDE RD /*读信号脚置低 读取数据” IOOSET= IDE RD IOISET= Addr cs at Pi 输出控制信号置高 OS EXIT CRITICALO: /*开中断义如程序清单 1.5 所示。 程序清单 1.2 读取 ATA 设备寄存器函数 #ifdef ATA_BUS_AT_8bit uint16 SYS_PortIn(uint32 reg) /*8 位总线的读寄存器函数*/ { uint16 res ; OS_ENTER_CRITICAL(); /*关中断*/ IO2DIR = IO2DIR & MASK_DATA; /*定义输出口其它为输入(ATA_DATA 为输入)*/ IO1CLR = Addr_CS_at_P1; /*地址与片选信号都为低电平*/ IO1SET = reg; /*地址高电平位输出,完成地址的设置*/ /*读低字节*/ IO0CLR = IDE_RD; /*读信号脚置低*/ res = (uint8)((IO2PIN&ATA_DATA) >>16); /*读取数据*/ IO0SET = IDE_RD; /*使读信号为高*/ /*读高字节*/ if(reg==ATA_REG_DATA) /*如果读数据寄存器,读高字节*/ { IO0CLR = IDE_RD; /*读信号脚置低*/ res += (uint16)((IO2PIN&ATA_DATA)>>8); /*读取数据*/ IO0SET = IDE_RD; /*使读信号为高*/ } IO1SET = Addr_CS_at_P1; /*输出控制信号置高*/ OS_EXIT_CRITICAL(); /*开中断*/ return res; /*返回数值*/ } #else uint16 SYS_PortIn(uint32 reg) /*8 位总线的读寄存器函数*/ { uint16 res ; OS_ENTER_CRITICAL(); /*关中断*/ IO2DIR = IO2DIR & MASK_DATA; /*定义输出口其它为输入(ATA_DATA 为输入)*/ IO1CLR = Addr_CS_at_P1; /*控所硬盘引脚信号输出(输出高电平)*/ IO1SET = reg; /*控所硬盘引脚信号输出(输出低电平)*/ IO0CLR = IDE_RD; /*读信号脚置低*/ res = (uint16)(IO2PIN >>16); /*读取数据*/ IO0SET = IDE_RD; IO1SET = Addr_CS_at_P1; /*输出控制信号置高*/ OS_EXIT_CRITICAL(); /*开中断*/ return res; }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有