| /************************************************************************ |
| * |
| * macros.h |
| * |
| * (c) Copyright 2001-2003 Analog Devices, Inc. All rights reserved. |
| * |
| ************************************************************************/ |
| |
| /* Defines various assembly macros. */ |
| |
| #ifndef _MACROS_H |
| #define _MACROS_H |
| |
| #define LO(con32) ((con32) & 0xFFFF) |
| #define lo(con32) ((con32) & 0xFFFF) |
| #define HI(con32) (((con32) >> 16) & 0xFFFF) |
| #define hi(con32) (((con32) >> 16) & 0xFFFF) |
| |
| /* |
| * Set the corresponding bits in a System Register (SR); |
| * All bits set in "mask" will be set in the system register |
| * specified by "sys_reg" bitset_SR(sys_reg, mask), where |
| * sys_reg is the system register and mask are the bits to be set. |
| */ |
| #define bitset_SR(sys_reg, mask)\ |
| [--SP] = (R7:6);\ |
| r7 = sys_reg;\ |
| r6.l = (mask) & 0xffff;\ |
| r6.h = (mask) >> 16;\ |
| r7 = r7 | r6;\ |
| sys_reg = r7;\ |
| csync;\ |
| (R7:6) = [SP++] |
| |
| /* |
| * Clear the corresponding bits in a System Register (SR); |
| * All bits set in "mask" will be cleared in the SR |
| * specified by "sys_reg" bitclr_SR(sys_reg, mask), where |
| * sys_reg is the SR and mask are the bits to be cleared. |
| */ |
| #define bitclr_SR(sys_reg, mask)\ |
| [--SP] = (R7:6);\ |
| r7 = sys_reg;\ |
| r7 =~ r7;\ |
| r6.l = (mask) & 0xffff;\ |
| r6.h = (mask) >> 16;\ |
| r7 = r7 | r6;\ |
| r7 =~ r7;\ |
| sys_reg = r7;\ |
| csync;\ |
| (R7:6) = [SP++] |
| |
| /* |
| * Set the corresponding bits in a Memory Mapped Register (MMR); |
| * All bits set in "mask" will be set in the MMR specified by "mmr_reg" |
| * bitset_MMR(mmr_reg, mask), where mmr_reg is the MMR and mask are |
| * the bits to be set. |
| */ |
| #define bitset_MMR(mmr_reg, mask)\ |
| [--SP] = (R7:6);\ |
| [--SP] = P5;\ |
| p5.l = mmr_reg & 0xffff;\ |
| p5.h = mmr_reg >> 16;\ |
| r7 = [p5];\ |
| r6.l = (mask) & 0xffff;\ |
| r6.h = (mask) >> 16;\ |
| r7 = r7 | r6;\ |
| [p5] = r7;\ |
| csync;\ |
| p5 = [SP++];\ |
| (R7:6) = [SP++] |
| |
| /* |
| * Clear the corresponding bits in a Memory Mapped Register (MMR); |
| * All bits set in "mask" will be cleared in the MMR specified by "mmr_reg" |
| * bitclr_MMRreg(mmr_reg, mask), where sys_reg is the MMR and mask are |
| * the bits to be cleared. |
| */ |
| #define bitclr_MMR(mmr_reg, mask)\ |
| [--SP] = (R7:6);\ |
| [--SP] = P5;\ |
| p5.l = mmr_reg & 0xffff;\ |
| p5.h = mmr_reg >> 16;\ |
| r7 = [p5];\ |
| r7 =~ r7;\ |
| r6.l = (mask) & 0xffff;\ |
| r6.h = (mask) >> 16;\ |
| r7 = r7 | r6;\ |
| r7 =~ r7;\ |
| [p5] = r7;\ |
| csync;\ |
| p5 = [SP++];\ |
| (R7:6) = [SP++] |
| |
| #endif /* _MACROS_H */ |