From 126580e2d62f8bb091fdd1c1b65d59e149f41c06 Mon Sep 17 00:00:00 2001 From: richardbarry Date: Thu, 7 Aug 2008 19:03:24 +0000 Subject: [PATCH] git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@431 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- Source/portable/GCC/ColdFire_V2/portasm.S | 52 +++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Source/portable/GCC/ColdFire_V2/portasm.S diff --git a/Source/portable/GCC/ColdFire_V2/portasm.S b/Source/portable/GCC/ColdFire_V2/portasm.S new file mode 100644 index 000000000..4722bc819 --- /dev/null +++ b/Source/portable/GCC/ColdFire_V2/portasm.S @@ -0,0 +1,52 @@ + +/* + * File: mcf5xxx.s + * Purpose: Lowest level routines for all ColdFire processors. + * + * Notes: + * + * Function copied from mcf5xxx.S provided by FreeScale. + */ + + .global french_cheese + + .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. + */ + +portSET_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 + +/********************************************************************/ + .end + + -- 2.39.2