cfio.c

来自「嵌入式操作系统T-Kernel 完整代码」· C语言 代码 · 共 78 行

C
78
字号
/* *---------------------------------------------------------------------- *    T-Kernel * *    Copyright (C) 2004 by Ken Sakamura. All rights reserved. *    T-Kernel is distributed under the T-License. *---------------------------------------------------------------------- * *    Version:   1.01.00 *    Released by T-Engine Forum(http://www.t-engine.org) at 2004/6/28. * *---------------------------------------------------------------------- *//* *      @(#)cfio.c (libtk/M32104) * *      I/O port access (for CF card use) * *	Can also perform normal I/O access, although in_[bwh]() *	or similar will need to be used  */#include <basic.h>#include <tk/syslib.h>EXPORT void cf_out_h( INT port, UH data ){	if ( ((UINT)port & 0xffff8000) == 0x03010000 ) {		if ( port & 1 ) {			port -= (0x08000 - 0x7ff);			/* 0x7ff -> port |= (1 << 11); port &= ~1; */		} else {			port -= 0x10000;		}	}	Asm("sth %0, @%1":: "r"(data), "r"(port));}EXPORT UH cf_in_h( INT port ){	UH	data;	if ( ((UINT)port & 0xffff8000) == 0x03010000 ) {		if ( port & 1 ) {			port -= (0x08000 - 0x7ff);			/* 0x7ff ->  port |= (1 << 11); port &= ~1; */		} else {			port -= 0x10000;		}	}	Asm("lduh %0, @%1": "=r"(data): "r"(port));	return data;}EXPORT void cf_out_b( INT port, UB data ){	if ( ((UINT)port & 0xffff8000) == 0x03010000 && (port & 1) ) {		port += 0x7ff;	/* port |= (1 << 11); port &= ~1; */	}	Asm("stb %0, @%1":: "r"(data), "r"(port));}EXPORT UB cf_in_b( INT port ){	UB	data;	if ( ((UINT)port & 0xffff8000) == 0x03010000 && (port & 1) ) {		port += 0x7ff;	/* port |= (1 << 11); port &= ~1; */	}	Asm("ldub %0, @%1": "=r"(data) : "r"(port));	return data;}

⌨️ 快捷键说明

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