正在加载图片...
写ATA设备寄存器步骤如下: (1)关系统中断,预防在写寄存器操作中产生中断; (2)设置GPIO模拟ATA接口数据的引脚为输出状态,准备输出数据到设备数据线 (3)设置ATA设备寄存器的相应地址 (4)设置GPO模拟AIA接口数据的引脚的电平为要写到设备的值; (5)使写ATA设备寄存器信号引脚为低电平; (6)使写ATA设备寄存器信号引脚为高电平 (7)如果ATA设备(CF卡)是8位总线模式,并且操作的是数据寄存器(16位),则 需重复(3)、(4)、(5)步。 (8)取消ATA设备寄存器地址的选择。 (9)设置GPO模拟ATA接口的数据总线引脚为输入状态,释放总线。 (10)开系统中断。 LPC2210的GPIO引脚模拟写ATA设备寄存器的函数如程序清单1.3所示,ATA设备 各寄存器地址宏定义如程序清单1.5所示。 程序清单13写ATA设备寄存器函数 #ifdef ATA BUS aT &bit void SYS PortOut(uint32 reg, uint16 data) 使用8位数据总线 OS ENTER CRITICALO /关中断* IO2DIR=IO2DIR ATA DATA; 棒设置数据总线为输出* IoICLR= Addr Cs at PI 地址与片选信号都为低电平 IOISET=reg /地址高电平位输出,完成地址的设置* 章写低字节 IO2CLR=ATA DATA, /数据总线上输出全为低电平 IO2SET= data<<16 输出数据值为1的位* IO0CLR= IDE WR: /*写信号为低电平保持大于165nS*/ IOOSET= IDE WR: *写信号脚置高[与低>162ns]*/ if(reg==ATA REG DATA) /如果访问的寄存器为16位的数据寄存器* /*写高字节* IO2CLR= ATA DATA 数据线输出全为低电平 IOs SET= data<<8 输出高电平的数据位 IOOCLR= IDE WR /*写信号为低电平保持大于165nS* OOSET= IDE WR /*写信号脚置高[与低>162ns] IOiSET= Addr cs at Pl 输出控制信号置高 IO2DIR & MASK DATA. 使数据线为输入,降低功耗* OS EXIT CRITICALO: /开中断*/#endif 写 ATA 设备寄存器步骤如下: (1) 关系统中断,预防在写寄存器操作中产生中断; (2) 设置 GPIO 模拟 ATA 接口数据的引脚为输出状态,准备输出数据到设备数据线; (3) 设置 ATA 设备寄存器的相应地址; (4) 设置 GPIO 模拟 ATA 接口数据的引脚的电平为要写到设备的值; (5) 使写 ATA 设备寄存器信号引脚为低电平; (6) 使写 ATA 设备寄存器信号引脚为高电平; (7) 如果 ATA 设备(CF 卡)是 8 位总线模式,并且操作的是数据寄存器(16 位),则 需重复(3)、(4)、(5)步。 (8) 取消 ATA 设备寄存器地址的选择。 (9) 设置 GPIO 模拟 ATA 接口的数据总线引脚为输入状态,释放总线。 (10) 开系统中断。 LPC2210 的 GPIO 引脚模拟写 ATA 设备寄存器的函数如程序清单 1.3 所示,ATA 设备 各寄存器地址宏定义如程序清单 1.5 所示。 程序清单 1.3 写 ATA 设备寄存器函数 #ifdef ATA_BUS_AT_8bit void SYS_PortOut(uint32 reg, uint16 data) /*使用 8 位数据总线*/ { OS_ENTER_CRITICAL(); /*关中断*/ IO2DIR = IO2DIR | ATA_DATA; /*设置数据总线为输出*/ IO1CLR = Addr_CS_at_P1; /*地址与片选信号都为低电平*/ IO1SET = reg; /*地址高电平位输出,完成地址的设置*/ /*写低字节*/ IO2CLR = ATA_DATA; /*数据总线上输出全为低电平*/ IO2SET = data<<16; /*输出数据值为 1 的位*/ IO0CLR = IDE_WR; /*写信号为低电平,保持大于 165nS*/ IO0SET = IDE_WR; /*写信号脚置高[与低>162ns]*/ if(reg==ATA_REG_DATA) /*如果访问的寄存器为 16 位的数据寄存器*/ { /*写高字节*/ IO2CLR = ATA_DATA; /*数据线输出全为低电平*/ IO2SET = data<<8; /*输出高电平的数据位*/ IO0CLR = IDE_WR; /*写信号为低电平,保持大于 165nS*/ IO0SET = IDE_WR; /*写信号脚置高[与低>162ns]*/ } IO1SET = Addr_CS_at_P1; /*输出控制信号置高*/ IO2DIR &= MASK_DATA; /*使数据线为输入,降低功耗*/ OS_EXIT_CRITICAL(); /*开中断*/ }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有