mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 02:27:39 -04:00
Add ARMv4 16-bit(set, mod, clr) operations used on DM320.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29221 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
50c547c640
commit
8e8f700842
3 changed files with 67 additions and 0 deletions
|
@ -985,6 +985,7 @@ target/arm/imx31/gigabeat-s/timer-gigabeat-s.c
|
||||||
#endif /* GIGABEAT_S */
|
#endif /* GIGABEAT_S */
|
||||||
|
|
||||||
#if CONFIG_CPU == DM320
|
#if CONFIG_CPU == DM320
|
||||||
|
target/arm/bits-armv4.S
|
||||||
target/arm/tms320dm320/debug-dm320.c
|
target/arm/tms320dm320/debug-dm320.c
|
||||||
target/arm/tms320dm320/dsp-dm320.c
|
target/arm/tms320dm320/dsp-dm320.c
|
||||||
target/arm/tms320dm320/i2c-dm320.c
|
target/arm/tms320dm320/i2c-dm320.c
|
||||||
|
@ -998,14 +999,18 @@ target/arm/tms320dm320/uart-dm320.c
|
||||||
#ifdef MROBE_500
|
#ifdef MROBE_500
|
||||||
#ifndef SIMULATOR
|
#ifndef SIMULATOR
|
||||||
target/arm/ata-as-arm.S
|
target/arm/ata-as-arm.S
|
||||||
|
#if !defined(LCD_USE_DMA)
|
||||||
target/arm/lcd-as-memframe.S
|
target/arm/lcd-as-memframe.S
|
||||||
|
#endif
|
||||||
target/arm/mmu-arm.S
|
target/arm/mmu-arm.S
|
||||||
|
target/arm/tms320dm320/mrobe-500/crt0-board.S
|
||||||
target/arm/tms320dm320/mrobe-500/adc-mr500.c
|
target/arm/tms320dm320/mrobe-500/adc-mr500.c
|
||||||
target/arm/tms320dm320/mrobe-500/ata-mr500.c
|
target/arm/tms320dm320/mrobe-500/ata-mr500.c
|
||||||
target/arm/tms320dm320/mrobe-500/backlight-mr500.c
|
target/arm/tms320dm320/mrobe-500/backlight-mr500.c
|
||||||
target/arm/tms320dm320/mrobe-500/button-mr500.c
|
target/arm/tms320dm320/mrobe-500/button-mr500.c
|
||||||
target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c
|
target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c
|
||||||
target/arm/tms320dm320/mrobe-500/lcd-mr500.c
|
target/arm/tms320dm320/mrobe-500/lcd-mr500.c
|
||||||
|
target/arm/tms320dm320/mrobe-500/lcd-as-mr500.S
|
||||||
#if defined(HAVE_REMOTE_LCD)
|
#if defined(HAVE_REMOTE_LCD)
|
||||||
target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c
|
target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -152,6 +152,10 @@ uint32_t isolate_first_bit(uint32_t val)
|
||||||
{ return val & -val; }
|
{ return val & -val; }
|
||||||
|
|
||||||
/* Functions to set and clear register or variable bits atomically */
|
/* Functions to set and clear register or variable bits atomically */
|
||||||
|
void bitmod16(volatile uint16_t *addr, uint16_t bits, uint16_t mask);
|
||||||
|
void bitset16(volatile uint16_t *addr, uint16_t mask);
|
||||||
|
void bitclr16(volatile uint16_t *addr, uint16_t mask);
|
||||||
|
|
||||||
void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask);
|
void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask);
|
||||||
void bitset32(volatile uint32_t *addr, uint32_t mask);
|
void bitset32(volatile uint32_t *addr, uint32_t mask);
|
||||||
void bitclr32(volatile uint32_t *addr, uint32_t mask);
|
void bitclr32(volatile uint32_t *addr, uint32_t mask);
|
||||||
|
|
|
@ -75,3 +75,61 @@ bitclr32:
|
||||||
msr cpsr_c, r12
|
msr cpsr_c, r12
|
||||||
bx lr
|
bx lr
|
||||||
.size bitclr32, .-bitclr32
|
.size bitclr32, .-bitclr32
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* void bitmod16(volatile uint16_t *addr, uint16_t bits, uint16_t mask)
|
||||||
|
*/
|
||||||
|
.section .text, "ax", %progbits
|
||||||
|
.align 2
|
||||||
|
.global bitmod16
|
||||||
|
.type bitmod16, %function
|
||||||
|
bitmod16:
|
||||||
|
mrs r12, cpsr
|
||||||
|
orr r3, r12, #0xc0
|
||||||
|
msr cpsr_c, r3
|
||||||
|
ldrh r3, [r0]
|
||||||
|
and r1, r1, r2 @ Only allow mod of bits in 'mask'
|
||||||
|
bic r3, r3, r2 @ Clear mask bits
|
||||||
|
orr r3, r3, r1 @ Set according to 'bits'
|
||||||
|
strh r3, [r0]
|
||||||
|
msr cpsr_c, r12
|
||||||
|
bx lr
|
||||||
|
.size bitmod16, .-bitmod16
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* void bitset16(volatile uint16_t *addr, uint16_t mask)
|
||||||
|
*/
|
||||||
|
.section .text, "ax", %progbits
|
||||||
|
.align 2
|
||||||
|
.global bitset16
|
||||||
|
.type bitset16, %function
|
||||||
|
bitset16:
|
||||||
|
mrs r12, cpsr
|
||||||
|
orr r2, r12, #0xc0
|
||||||
|
msr cpsr_c, r2
|
||||||
|
ldrh r2, [r0]
|
||||||
|
orr r2, r2, r1
|
||||||
|
strh r2, [r0]
|
||||||
|
msr cpsr_c, r12
|
||||||
|
bx lr
|
||||||
|
.size bitset16, .-bitset16
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* void bitclr16(volatile uint16_t *addr, uint16_t mask)
|
||||||
|
*/
|
||||||
|
.section .text, "ax", %progbits
|
||||||
|
.align 2
|
||||||
|
.global bitclr16
|
||||||
|
.type bitclr16, %function
|
||||||
|
bitclr16:
|
||||||
|
mrs r12, cpsr
|
||||||
|
orr r2, r12, #0xc0
|
||||||
|
msr cpsr_c, r2
|
||||||
|
ldrh r2, [r0]
|
||||||
|
bic r2, r2, r1
|
||||||
|
strh r2, [r0]
|
||||||
|
msr cpsr_c, r12
|
||||||
|
bx lr
|
||||||
|
.size bitclr16, .-bitclr16
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue