⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ata_commands.asm

📁 ADI BF DSP的CF卡的读写源码
💻 ASM
字号:

/************************************************************************************************/
/*	The following routines check for status information from the Compact Flash such as CF		*/
/*	insertion, busy, ready, error, and data ready.												*/
/*															  Last Modified 02-26-03.  H. Desai */ 
/************************************************************************************************/


#include <def21535.h>
#define Mem_Mapped_Registers 0x24000800

.GLOBAL Check_CF_Inserted;
.GLOBAL Check_CF_Busy;
.GLOBAL Check_CF_RDY_Status;
.GLOBAL Check_CF_ERR_Status;
.GLOBAL Check_CF_DRQ_Status;

.EXTERN Save_IMASK;

.SECTION program;

/******************************************/
Check_CF_Inserted:
	P5.L = FIO_FLAG_S & 0xFFFF;
	P5.H = FIO_FLAG_S >> 16;

Wait_CF_Detected:
	R0 = W[P5];
	cc = bittst(R0,8);
	IF cc JUMP Wait_CF_Detected;	//Check if PF8 (/CD1) is asserted low
	RTS;


/******************************************/
Check_CF_Busy:
	P0.H = Mem_Mapped_Registers >> 16;
	P0.L = Mem_Mapped_Registers & 0xFFFF;

Wait_CF_Busy:
	R0 = W[P0+0xE];					//Alt Status Register in Common Memory (A11 = 0)
	cc = bittst(R0,7);
	IF cc JUMP Wait_CF_Busy;		//Check if CF is busy

	RTS;

/******************************************/
Check_CF_RDY_Status:
	P0.H = Mem_Mapped_Registers >> 16;
	P0.L = Mem_Mapped_Registers & 0xFFFF;

Wait_CF_RDY:
	R0 = W[P0+0xE];					//Alt Status Register in Common Memory (A11 = 0)
	cc = bittst(R0,6);
	IF !cc JUMP Wait_CF_RDY;		//Check if CF is RDY (i.e. set to 1)

	RTS;

/******************************************/
Check_CF_ERR_Status:
	P0.H = Mem_Mapped_Registers >> 16;
	P0.L = Mem_Mapped_Registers & 0xFFFF;

	R0 = W[P0+0xE];					//Alt Status Register in Common Memory (A11 = 0)
	cc = bittst(R0,0);
	IF cc JUMP CF_ERR_DETECTED;		//Check if CF detected an error (i.e. set to 1)
	RTS;
	
CF_ERR_DETECTED:
	R0 = W[P0+0xC];						//Read Error Register (bits 15:8 of R0)
	JUMP CF_ERR_DETECTED;
	
/******************************************/
Check_CF_DRQ_Status:
	P0.H = Mem_Mapped_Registers >> 16;
	P0.L = Mem_Mapped_Registers & 0xFFFF;
	
	I2.H = Save_IMASK;
	I2.L = Save_IMASK;
	CLI R0;
	[I2] = R0;

Wait_CF_DRQ:
		R0 = [I2];
		STI R0;
		NOP; NOP; NOP; NOP; NOP; NOP; NOP;
		NOP; NOP; NOP; NOP; NOP; NOP; NOP;
		CLI R0;
		[I2] = R0;
	
	R0 = W[P0+0xE];					//Alt Status Register in Common Memory (A11 = 0)
	cc = bittst(R0,3);
	IF !cc JUMP Wait_CF_DRQ;		//Check if CF has data ready to be transfered

	R0 = [I2];
	STI R0;
	
	RTS;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -