hm60x/hm801: Buttons rework.
[maemo-rb.git] / firmware / target / arm / bits-armv6.S
blobfbac7f9cf93d6f645378671195ed629897dd5530
1 /***************************************************************************
2 *             __________               __   ___.
3 *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
4 *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
5 *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
6 *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
7 *                     \/            \/     \/    \/            \/
8 * $Id$
10 * Copyright (C) 2010 by Michael Sevakis
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 /***************************************************************************
23  * void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask)
24  */
25     .section    .text.bitmod32, "ax", %progbits
26     .align      2
27     .global     bitmod32
28     .type       bitmod32, %function
29 bitmod32:
30     mrs    r12, cpsr
31     cpsid  if
32     ldr    r3, [r0]
33     and    r1, r1, r2               @ Only allow mod of bits in 'mask'
34     bic    r3, r3, r2               @ Clear mask bits
35     orr    r3, r3, r1               @ Set according to 'bits'
36     str    r3, [r0]
37     msr    cpsr_c, r12
38     bx     lr
39     .size  bitmod32, .-bitmod32
41 /***************************************************************************
42  * void bitset32(volatile uint32_t *addr, uint32_t mask)
43  */
44     .section    .text.bitset32, "ax", %progbits
45     .align      2
46     .global     bitset32
47     .type       bitset32, %function
48 bitset32:
49     mrs    r12, cpsr
50     cpsid  if
51     ldr    r2, [r0]
52     orr    r2, r2, r1
53     str    r2, [r0]
54     msr    cpsr_c, r12
55     bx     lr
56     .size  bitset32, .-bitset32
59 /***************************************************************************
60  * void bitclr32(volatile uint32_t *addr, uint32_t mask)
61  */
62      .section    .text.bitclr32, "ax", %progbits
63      .align      2
64      .global     bitclr32
65      .type       bitclr32, %function
66 bitclr32:
67     mrs    r12, cpsr
68     cpsid  if
69     ldr    r2, [r0]
70     bic    r2, r2, r1
71     str    r2, [r0]
72     msr    cpsr_c, r12
73     bx     lr
74     .size  bitclr32, .-bitclr32