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

📄 variant.s

📁 eCos1.31版
💻 S
字号:
##=============================================================================####	variant.S####	MN10300 AM33 variant code####=============================================================================#####COPYRIGHTBEGIN#####                                                                          # -------------------------------------------                              # The contents of this file are subject to the Red Hat eCos Public License # Version 1.1 (the "License"); you may not use this file except in         # compliance with the License.  You may obtain a copy of the License at    # http://www.redhat.com/                                                   #                                                                          # Software distributed under the License is distributed on an "AS IS"      # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the # License for the specific language governing rights and limitations under # the License.                                                             #                                                                          # The Original Code is eCos - Embedded Configurable Operating System,      # released September 30, 1998.                                             #                                                                          # The Initial Developer of the Original Code is Red Hat.                   # Portions created by Red Hat are                                          # Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             # All Rights Reserved.                                                     # -------------------------------------------                              #                                                                          #####COPYRIGHTEND######=============================================================================#######DESCRIPTIONBEGIN######## Author(s): 	nickg## Contributors:	nickg## Date:	1997-10-16## Purpose:	MN10300 AM33 variant code## Description:	This file contains variant specific assembly code for the AM33.########DESCRIPTIONEND########=============================================================================#include <pkgconf/hal.h>#include <cyg/hal/arch.inc>	##-----------------------------------------------------------------------------## NMI trampoline VSRs. All NMI interrupts are routed here initially, where we## decode the NMICR and ISR register contents and vector to the## correct VSR later in the table.	.text	.extern hal_lsbit_table				.globl nmi_vsr_trampolinenmi_vsr_trampoline:	movhu	(NMICR),d0		# D0 = NMI control register	and	0x7,d0			# LS 3 bits only	mov	3,d1			# search from bit 3	bsch	d0,d1			# get ms bit in d1	bcs	2f			# jump if no bits there	add	9,d1			# D1 = offset into VSR table	jmp	3f			# go to rest of code	.globl nmi_sysef_trampolinenmi_sysef_trampoline:			movhu	(ISR),d0		# D0 = Interrupt Status Register	mov	d0,d1			# D1 = copy of D0	add	-1,d1			# D1 = D0-1	not	d1			# D1 = ~(D0-1) = -D0	and	d1,d0			# D0 = D0 & -D0 = ls bit only	mov	16,d1			# D1 = start of search bit	bsch	d0,d1			# search for 1 bit in d0	bcs	2f			# jump if failed	add	12,d1			# d1 = offset in VSR table3:		asl	2,d1			# D1 = word offset in vsr table	mov	_hal_vsr_table,a0	# A0 = VSR table base	add	d1,a0			# A0 = address of table entry we want	mov	(a0),a0			# A0 = VSR to call	jmp	(a0)			# Call it	2:		# no bits set in ISR or NMICR when we expected them.	# This should never happen, but if it does, use an otherwise	# unused VSR table entry to indicate this.		mov	27,d1			# use last VSR table entry.	jmp	3b		##-----------------------------------------------------------------------------#define HAL_CHCTR               0xC0000070#define HAL_DCACHE_PURGE_WAY0   0xC8400000#define HAL_CHCTR_DCEN          0x0002#define HAL_CHCTR_DCBUSY        0x0008	.text		.globl	_cyg_hal_dcache_store_cyg_hal_dcache_store:		movm	[d2,d3],(sp)	mov	HAL_CHCTR,a0			# A0 = control reg	mov	HAL_DCACHE_PURGE_WAY0,a1	# A1 = purge base address		# Disable DCACHE if it is enabled	movhu	(a0),d2				# D2 = old value of control reg	btst	HAL_CHCTR_DCEN,d2		# check for cache enabled	beq	1f				# if not, skip disable		mov	d2,d3				# make a copy of CHCTR	and	~HAL_CHCTR_DCEN,d3		# clear DCEN bit	movhu	d3,(a0)				# store in reg2:	movhu	(a0),d3				# get CHCTR	btst	HAL_CHCTR_DCBUSY,d3		# test DCBUSY bit	bne	2b				# loop while set1:	# The cache is now disabled		and	0x000003f0,d0			# isolate index bits of base addr	add	d0,a1				# offset a1 to base address	add	63,d1				# adjust size to whole multiple of	and	0xFFFFFFC0,d1			# set size.3:		mov	(0x0000,a1),d0			# purge way 0	mov	(0x1000,a1),d0			# purge way 1	mov	(0x2000,a1),d0			# purge way 2	mov	(0x3000,a1),d0			# purge way 3	add	16,a1				# advance to next set	sub	64,d1				# decrement count	bne	3b				# loop while non zero		# Restore original cache state from saved CHCTR in D2	movhu	d2,(a0)							movm	(sp),[d2,d3]			# restore work regs			rets		##-----------------------------------------------------------------------------## end of variant.S		

⌨️ 快捷键说明

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