正在加载图片...
void SYs PortOut(uint32 reg, uint16 data) 使用16位总线 OS ENTER CRITICALO /关中断* IO2DIR=IO2DIR ATA DATA 设置数据总线为输出* IoICLR= Addr cs at P1 地址与片选信号都为低电平制 lOISEL=reg: /地址高电平位输出完成地址的设置 IO2CLR=ATA DATA /数据总线上输出全为低电平 IO2SET= data<<16 /输出数据高位* LOOCLR= IDE WR. *写信号为低电平保持大于165nS* IOOSET= IDE WR *写信号脚置高[与低>162nsy* IOISET= Addr CS at P1; 输出控制信号置高* IO2DIR & MASK DATA. 使数据线为输入,降低功耗 OS EXIT CRITICALO: /开中断 #endif 开中断及关中断函数如程序清单14所示。 程序清单14开、关总中断函数 #ifndef UCOSll *关中断 nline OS ENTER CRITICAL( void) asm CPSR RO. RO. #NoInt MSR CPSR C RO /*开中断 inline OS EXIT CRITICAL(void) MRS RO CPSR RORO. #NoInt MSR CPSR C RO#else void SYS_PortOut(uint32 reg, uint16 data) /*使用 16 位总线*/ { OS_ENTER_CRITICAL(); /*关中断*/ IO2DIR = IO2DIR | ATA_DATA; /*设置数据总线为输出*/ IO1CLR = Addr_CS_at_P1; /*地址与片选信号都为低电平*/ IO1SET = reg; /*地址高电平位输出,完成地址的设置*/ IO2CLR = ATA_DATA; /*数据总线上输出全为低电平*/ IO2SET = data<<16; /*输出数据高位*/ IO0CLR = IDE_WR; /*写信号为低电平,保持大于 165nS*/ IO0SET = IDE_WR; /*写信号脚置高[与低>162ns]*/ IO1SET = Addr_CS_at_P1; /*输出控制信号置高*/ IO2DIR &= MASK_DATA; /*使数据线为输入,降低功耗*/ OS_EXIT_CRITICAL(); /*开中断*/ } #endif 开中断及关中断函数如程序清单 1.4 所示。 程序清单 1.4 开、关总中断函数 #ifndef UCOSII (1) #define NoInt 0x80 /* 关中断 */ __inline OS_ENTER_CRITICAL(void) { __asm { MRS R0, CPSR ORR R0, R0, #NoInt MSR CPSR_c, R0 } } /* 开中断 */ __inline OS_EXIT_CRITICAL(void) { __asm { MRS R0, CPSR BIC R0, R0, #NoInt MSR CPSR_c, R0 }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有