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

📄 mmumacro.s

📁 wince底层驱动开发代码 ARM作为一种嵌入式系统处理器
💻 S
📖 第 1 页 / 共 3 页
字号:
 IF FORCE_TGTCPU = "SA110"
	CHECK_UNIFIED_110	$reg
 ENDIF
	MEND

	MACRO
	CHECK_CPUID	$reg, $ret
	NO_CHECK_CPUID	$reg, $ret
 IF FORCE_TGTCPU = "ARM7"
	CHECK_CPUID_7T	$reg, $ret
 ENDIF
 IF FORCE_TGTCPU = "ARM720"
	CHECK_CPUID_720T	$reg, $ret
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	CHECK_CPUID_740T	$reg, $ret
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	CHECK_CPUID_920T	$reg, $ret
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	CHECK_CPUID_940T	$reg, $ret
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	CHECK_CPUID_110	$reg, $ret
 ENDIF
	MEND

	MACRO
	CHECK_VENDOR	$reg, $ret
	NO_CHECK_VENDOR	$reg, $ret
 IF FORCE_TGTCPU = "ARM7"
	CHECK_VENDOR_7T	$reg, $ret
 ENDIF
 IF FORCE_TGTCPU = "ARM720"
	CHECK_VENDOR_720T	$reg, $ret
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	CHECK_VENDOR_740T	$reg, $ret
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	CHECK_VENDOR_920T	$reg, $ret
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	CHECK_VENDOR_940T	$reg, $ret
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	CHECK_VENDOR_110	$reg, $ret
 ENDIF
	MEND

;------------------------------------------------------------------
; Macros to hide internals of each processor's cache implementation
;
; Never set coprocessor bits directly, use the macros. To use:
;	RDMMU_STATE	$reg	; read the flags
;	CLEAR_IDC	$reg	; disable I & D caches
;	SET_MMU		$reg	; enable MMU
;	WRMMU_STATE	$reg	; update the coprocessor
;
; CLEAR_IDC	Clear Instruction & Data Cache Bits (& Write Buffer)
; CLEAR_ICACHE	Clear (at least) Instruction Cache Bits
; CLEAR_DCACHE	Clear (at least) Data Cache Bits
; CLEAR_WBUFFER	Clear Write Buffer Bits
; CLEAR_MMU	Clear MMU Enable Bits
; CLEAR_BIGEND	Clear Big Endian Enable Bits
; SET_IDC	As above, but Set each mode
; SET_ICACHE
; SET_DCACHE
; SET_WBUFFER
; SET_MMU
; SET_BIGEND
; TEST_MMU	Simple tests to see if bits are already set
; TEST_BIGEND

	MACRO
	CLEAR_IDC	$state
	NO_CLEAR_IDC	$state
 IF FORCE_TGTCPU = "ARM720"
	CLEAR_IDC_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	CLEAR_IDC_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	CLEAR_IDC_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	CLEAR_IDC_940T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	CLEAR_IDC_110	$state
 ENDIF
	MEND

	MACRO
	CLEAR_ICACHE	$state
	NO_CLEAR_ICACHE	$state
 IF FORCE_TGTCPU = "ARM720"
	CLEAR_ICACHE_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	CLEAR_ICACHE_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	CLEAR_ICACHE_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	CLEAR_ICACHE_940T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	CLEAR_ICACHE_110	$state
 ENDIF
	MEND

	MACRO
	CLEAR_DCACHE	$state
	NO_CLEAR_DCACHE	$state
 IF FORCE_TGTCPU = "ARM720"
	CLEAR_DCACHE_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	CLEAR_DCACHE_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	CLEAR_DCACHE_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	CLEAR_DCACHE_940T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	CLEAR_DCACHE_110	$state
 ENDIF
	MEND

	MACRO
	CLEAR_WBUFFER	$state
	NO_CLEAR_WBUFFER	$state
 IF FORCE_TGTCPU = "ARM720"
	CLEAR_WBUFFER_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	CLEAR_WBUFFER_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	CLEAR_WBUFFER_110	$state
 ENDIF
	MEND

	MACRO
	CLEAR_MMU	$state
	NO_CLEAR_MMU	$state
 IF FORCE_TGTCPU = "ARM720"
	CLEAR_MMU_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	CLEAR_MMU_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	CLEAR_MMU_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	CLEAR_MMU_940T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	CLEAR_MMU_110	$state
 ENDIF
	MEND

	MACRO
	CLEAR_BIGEND	$state
	NO_CLEAR_BIGEND	$state
 IF FORCE_TGTCPU = "ARM720"
	CLEAR_BIGEND_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	CLEAR_BIGEND_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	CLEAR_BIGEND_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	CLEAR_BIGEND_940T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	CLEAR_BIGEND_110	$state
 ENDIF
	MEND

	MACRO
	SET_IDC	$state
	NO_SET_IDC	$state
 IF FORCE_TGTCPU = "ARM720"
	SET_IDC_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	SET_IDC_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	SET_IDC_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	SET_IDC_940T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	SET_IDC_110	$state
 ENDIF
	MEND

	MACRO
	SET_ICACHE	$state
	NO_SET_ICACHE	$state
 IF FORCE_TGTCPU = "ARM720"
	SET_ICACHE_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	SET_ICACHE_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	SET_ICACHE_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	SET_ICACHE_940T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	SET_ICACHE_110	$state
 ENDIF
	MEND

	MACRO
	SET_DCACHE	$state
	NO_SET_DCACHE	$state
 IF FORCE_TGTCPU = "ARM720"
	SET_DCACHE_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	SET_DCACHE_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	SET_DCACHE_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	SET_DCACHE_940T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	SET_DCACHE_110	$state
 ENDIF
	MEND

	MACRO
	SET_WBUFFER	$state
	NO_SET_WBUFFER	$state
 IF FORCE_TGTCPU = "ARM720"
	SET_WBUFFER_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	SET_WBUFFER_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	SET_WBUFFER_110	$state
 ENDIF
	MEND

	MACRO
	SET_MMU	$state
	NO_SET_MMU	$state
 IF FORCE_TGTCPU = "ARM720"
	SET_MMU_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	SET_MMU_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	SET_MMU_110	$state
 ENDIF
	MEND

	MACRO
	SET_BIGEND	$state
	NO_SET_BIGEND	$state
 IF FORCE_TGTCPU = "ARM720"
	SET_BIGEND_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	SET_BIGEND_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	SET_BIGEND_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	SET_BIGEND_940T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	SET_BIGEND_110	$state
 ENDIF
	MEND


	MACRO
	TEST_MMU	$state
	NO_TEST_MMU	$state
 IF FORCE_TGTCPU = "ARM720"
	TEST_MMU_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	TEST_MMU_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	TEST_MMU_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	TEST_MMU_940T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	TEST_MMU_110	$state
 ENDIF
	MEND

	MACRO
	TEST_BIGEND	$state
	NO_TEST_BIGEND	$state
 IF FORCE_TGTCPU = "ARM720"
	TEST_BIGEND_720T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	TEST_BIGEND_740T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	TEST_BIGEND_920T	$state
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	TEST_BIGEND_940T	$state
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	TEST_BIGEND_110	$state
 ENDIF
	MEND

;------------------------------------------------------------------
;Read CPU Code (ID, Vendor revision etc.) register 
;
	MACRO
	REALLY_RDCPU_CODE	$val
	MRC p15, 0, $val, c0, c0 ,0
	MEND

	MACRO
	RDCPU_CODE	$val
	NO_RDCPU_CODE	$val
 IF FORCE_TGTCPU = "ARM720"
	RDCPU_CODE_720T	$val
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	RDCPU_CODE_740T	$val
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	RDCPU_CODE_920T	$val
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	RDCPU_CODE_940T	$val
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	RDCPU_CODE_940T	$val
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	RDCPU_CODE_110	$val
 ENDIF
	MEND

;Extract CPU ID from CPU Code register
;
	MACRO
	RDCPU_ID	$w1, $val
	NO_RDCPU_ID	$w1, $val
 IF FORCE_TGTCPU = "ARM720"
	RDCPU_ID_720T	$w1, $val
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	RDCPU_ID_740T	$w1, $val
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	RDCPU_ID_920T	$w1, $val
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	RDCPU_ID_940T	$w1, $val
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	RDCPU_ID_110	$w1, $val
 ENDIF
	MEND

;Extract CPU Vendor from CPU Code register
;
	MACRO
	RDCPU_VENDOR	$w1, $val
	NO_RDCPU_VENDOR	$w1, $val
 IF FORCE_TGTCPU = "ARM720"
	RDCPU_VENDOR_720T	$w1, $val
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	RDCPU_VENDOR_740T	$w1, $val
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	RDCPU_VENDOR_920T	$w1, $val
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	RDCPU_VENDOR_940T	$w1, $val
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	RDCPU_VENDOR_110	$w1, $val
 ENDIF
	MEND

;Coprocessor read of ID register (cache line sizes)
;
	MACRO
	RDCACHE_SIZES	$reg_number
	NO_RDCACHE_SIZES	$reg_number
 IF FORCE_TGTCPU = "ARM920"
	RDCACHE_SIZES_920T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	RDCACHE_SIZES_940T	$reg_number
 ENDIF
	MEND

;Coprocessor read of Control register 
;
	MACRO
	RDMMU_STATE	$reg_number
	NO_RDMMU_STATE	$reg_number
 IF FORCE_TGTCPU = "ARM720"
	RDMMU_STATE_720T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	RDMMU_STATE_740T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	RDMMU_STATE_920T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	RDMMU_STATE_940T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	RDMMU_STATE_110	$reg_number
 ENDIF
	MEND

;Coprocessor write of Control register 
;
	MACRO 
	WRMMU_STATE	$reg_number
	NO_WRMMU_STATE	$reg_number
 IF FORCE_TGTCPU = "ARM720"
	WRMMU_STATE_720T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "ARM740"
	WRMMU_STATE_740T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	WRMMU_STATE_920T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "ARM940"
	WRMMU_STATE_940T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	WRMMU_STATE_110	$reg_number
 ENDIF
	MEND

;------------------------------------------------------------------
;Coprocessor read of Translation Table Base reg. 
;
	MACRO
	RDMMU_TTBase	$reg_number
	NO_RDMMU_TTBase	$reg_number
 IF FORCE_TGTCPU = "ARM720"
	RDMMU_TTBase_720T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	RDMMU_TTBase_920T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	RDMMU_TTBase_110	$reg_number
 ENDIF
	MEND

;Coprocessor write of Translation Table Base reg. 
;
	MACRO 
	WRMMU_TTBase	$reg_number
	NO_WRMMU_TTBase	$reg_number
 IF FORCE_TGTCPU = "ARM720"
	WRMMU_TTBase_720T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "ARM920"
	WRMMU_TTBase_920T	$reg_number
 ENDIF
 IF FORCE_TGTCPU = "SA110"
	WRMMU_TTBase_110	$reg_number

⌨️ 快捷键说明

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