📄 mcf5xxx.s
字号:
/* * Lowest level routines for all ColdFire processors. Based on the * MCF523x examples from Freescale. * * Freescale explicitly grants the redistribution and modification * of these source files. The complete licensing information is * available in the file LICENSE_FREESCALE.TXT. * * Modifications Copyright (c) 2006 Christian Walter <wolti@sil.at> * * File: $Id: mcf5xxx.S,v 1.2 2006/09/24 22:50:22 wolti Exp $ */ .global asm_set_ipl .global _asm_set_ipl .global mcf5xxx_wr_cacr .global _mcf5xxx_wr_cacr .global mcf5xxx_wr_acr0 .global _mcf5xxx_wr_acr0 .global mcf5xxx_wr_acr1 .global _mcf5xxx_wr_acr1 .global mcf5xxx_wr_acr2 .global _mcf5xxx_wr_acr2 .global mcf5xxx_wr_acr3 .global _mcf5xxx_wr_acr3 .global mcf5xxx_wr_other_sp .global _mcf5xxx_wr_other_sp .global mcf5xxx_wr_other_a7 .global _mcf5xxx_wr_other_a7 .global mcf5xxx_wr_vbr .global _mcf5xxx_wr_vbr .global mcf5xxx_wr_macsr .global _mcf5xxx_wr_macsr .global mcf5xxx_wr_mask .global _mcf5xxx_wr_mask .global mcf5xxx_wr_acc0 .global _mcf5xxx_wr_acc0 .global mcf5xxx_wr_accext01 .global _mcf5xxx_wr_accext01 .global mcf5xxx_wr_accext23 .global _mcf5xxx_wr_accext23 .global mcf5xxx_wr_acc1 .global _mcf5xxx_wr_acc1 .global mcf5xxx_wr_acc2 .global _mcf5xxx_wr_acc2 .global mcf5xxx_wr_acc3 .global _mcf5xxx_wr_acc3 .global mcf5xxx_wr_sr .global _mcf5xxx_wr_sr .global mcf5xxx_wr_rambar0 .global _mcf5xxx_wr_rambar0 .global mcf5xxx_wr_rambar1 .global _mcf5xxx_wr_rambar1 .global mcf5xxx_wr_mbar .global _mcf5xxx_wr_mbar .global mcf5xxx_wr_mbar0 .global _mcf5xxx_wr_mbar0 .global mcf5xxx_wr_mbar1 .global _mcf5xxx_wr_mbar1 .text/********************************************************************//* * This routines changes the IPL to the value passed into the routine. * It also returns the old IPL value back. * Calling convention from C: * old_ipl = asm_set_ipl(new_ipl); * For the Diab Data C compiler, it passes return value thru D0. * Note that only the least significant three bits of the passed * value are used. */asm_set_ipl:_asm_set_ipl: link a6,#-8 movem.l d6-d7,(sp) move.w sr,d7 /* current sr */ move.l d7,d0 /* prepare return value */ andi.l #0x0700,d0 /* mask out IPL */ lsr.l #8,d0 /* IPL */ move.l 8(a6),d6 /* get argument */ andi.l #0x07,d6 /* least significant three bits */ lsl.l #8,d6 /* move over to make mask */ andi.l #0x0000F8FF,d7 /* zero out current IPL */ or.l d6,d7 /* place new IPL in sr */ move.w d7,sr movem.l (sp),d6-d7 lea 8(sp),sp unlk a6 rts/********************************************************************//* * These routines write to the special purpose registers in the ColdFire * core. Since these registers are write-only in the supervisor model, * no corresponding read routines exist. */mcf5xxx_wr_cacr:_mcf5xxx_wr_cacr: move.l 4(sp),d0 .long 0x4e7b0002 /* movec d0,cacr */ nop rtsmcf5xxx_wr_acr0:_mcf5xxx_wr_acr0: move.l 4(sp),d0 .long 0x4e7b0004 /* movec d0,ACR0 */ nop rtsmcf5xxx_wr_acr1:_mcf5xxx_wr_acr1: move.l 4(sp),d0 .long 0x4e7b0005 /* movec d0,ACR1 */ nop rtsmcf5xxx_wr_acr2:_mcf5xxx_wr_acr2: move.l 4(sp),d0 .long 0x4e7b0006 /* movec d0,ACR2 */ nop rtsmcf5xxx_wr_acr3:_mcf5xxx_wr_acr3: move.l 4(sp),d0 .long 0x4e7b0007 /* movec d0,ACR3 */ nop rtsmcf5xxx_wr_other_sp:_mcf5xxx_wr_other_sp:mcf5xxx_wr_other_a7:_mcf5xxx_wr_other_a7: move.l 4(sp),d0 .long 0x4e7b0800 /* movec d0,OTHER_A7 */ nop rtsmcf5xxx_wr_vbr:_mcf5xxx_wr_vbr: move.l 4(sp),d0 .long 0x4e7b0801 /* movec d0,VBR */ nop rtsmcf5xxx_wr_macsr:_mcf5xxx_wr_macsr: move.l 4(sp),d0 .long 0x4e7b0804 /* movec d0,MACSR */ nop rtsmcf5xxx_wr_mask:_mcf5xxx_wr_mask: move.l 4(sp),d0 .long 0x4e7b0805 /* movec d0,MASK */ nop rtsmcf5xxx_wr_acc0:_mcf5xxx_wr_acc0: move.l 4(sp),d0 .long 0x4e7b0806 /* movec d0,ACC0 */ nop rtsmcf5xxx_wr_accext01:_mcf5xxx_wr_accext01: move.l 4(sp),d0 .long 0x4e7b0807 /* movec d0,ACCEXT01 */ nop rtsmcf5xxx_wr_accext23:_mcf5xxx_wr_accext23: move.l 4(sp),d0 .long 0x4e7b0808 /* movec d0,ACCEXT23 */ nop rtsmcf5xxx_wr_acc1:_mcf5xxx_wr_acc1: move.l 4(sp),d0 .long 0x4e7b0809 /* movec d0,ACC1 */ nop rtsmcf5xxx_wr_acc2:_mcf5xxx_wr_acc2: move.l 4(sp),d0 .long 0x4e7b080A /* movec d0,ACC2 */ nop rtsmcf5xxx_wr_acc3:_mcf5xxx_wr_acc3: move.l 4(sp),d0 .long 0x4e7b080B /* movec d0,ACC3 */ nop rtsmcf5xxx_wr_sr:_mcf5xxx_wr_sr: move.l 4(sp),d0 move.w d0,SR rtsmcf5xxx_wr_rambar0:_mcf5xxx_wr_rambar0: move.l 4(sp),d0 .long 0x4e7b0C04 /* movec d0,RAMBAR0 */ nop rtsmcf5xxx_wr_rambar1:_mcf5xxx_wr_rambar1: move.l 4(sp),d0 .long 0x4e7b0C05 /* movec d0,RAMBAR1 */ nop rtsmcf5xxx_wr_mbar:_mcf5xxx_wr_mbar:mcf5xxx_wr_mbar0:_mcf5xxx_wr_mbar0: move.l 4(sp),d0 .long 0x4e7b0C0F /* movec d0,MBAR0 */ nop rtsmcf5xxx_wr_mbar1:_mcf5xxx_wr_mbar1: move.l 4(sp),d0 .long 0x4e7b0C0E /* movec d0,MBAR1 */ nop rts .end/********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -