diff options
author | Karl Kurbjun <kkurbjun@gmail.com> | 2011-02-06 19:43:45 +0000 |
---|---|---|
committer | Karl Kurbjun <kkurbjun@gmail.com> | 2011-02-06 19:43:45 +0000 |
commit | 8e8f700842f7b9737bfd62651372db0656cfa52d (patch) | |
tree | 1507f39c128704e88c535c345645ea6f03603b5e /firmware | |
parent | 50c547c640b46fa54da0b7767ef3ee57ef89270d (diff) | |
download | rockbox-8e8f700842f7b9737bfd62651372db0656cfa52d.tar.gz rockbox-8e8f700842f7b9737bfd62651372db0656cfa52d.zip |
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
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/SOURCES | 5 | ||||
-rw-r--r-- | firmware/export/system.h | 4 | ||||
-rw-r--r-- | firmware/target/arm/bits-armv4.S | 58 |
3 files changed, 67 insertions, 0 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES index d48d3c623a..817574da83 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES | |||
@@ -985,6 +985,7 @@ target/arm/imx31/gigabeat-s/timer-gigabeat-s.c | |||
985 | #endif /* GIGABEAT_S */ | 985 | #endif /* GIGABEAT_S */ |
986 | 986 | ||
987 | #if CONFIG_CPU == DM320 | 987 | #if CONFIG_CPU == DM320 |
988 | target/arm/bits-armv4.S | ||
988 | target/arm/tms320dm320/debug-dm320.c | 989 | target/arm/tms320dm320/debug-dm320.c |
989 | target/arm/tms320dm320/dsp-dm320.c | 990 | target/arm/tms320dm320/dsp-dm320.c |
990 | target/arm/tms320dm320/i2c-dm320.c | 991 | target/arm/tms320dm320/i2c-dm320.c |
@@ -998,14 +999,18 @@ target/arm/tms320dm320/uart-dm320.c | |||
998 | #ifdef MROBE_500 | 999 | #ifdef MROBE_500 |
999 | #ifndef SIMULATOR | 1000 | #ifndef SIMULATOR |
1000 | target/arm/ata-as-arm.S | 1001 | target/arm/ata-as-arm.S |
1002 | #if !defined(LCD_USE_DMA) | ||
1001 | target/arm/lcd-as-memframe.S | 1003 | target/arm/lcd-as-memframe.S |
1004 | #endif | ||
1002 | target/arm/mmu-arm.S | 1005 | target/arm/mmu-arm.S |
1006 | target/arm/tms320dm320/mrobe-500/crt0-board.S | ||
1003 | target/arm/tms320dm320/mrobe-500/adc-mr500.c | 1007 | target/arm/tms320dm320/mrobe-500/adc-mr500.c |
1004 | target/arm/tms320dm320/mrobe-500/ata-mr500.c | 1008 | target/arm/tms320dm320/mrobe-500/ata-mr500.c |
1005 | target/arm/tms320dm320/mrobe-500/backlight-mr500.c | 1009 | target/arm/tms320dm320/mrobe-500/backlight-mr500.c |
1006 | target/arm/tms320dm320/mrobe-500/button-mr500.c | 1010 | target/arm/tms320dm320/mrobe-500/button-mr500.c |
1007 | target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c | 1011 | target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c |
1008 | target/arm/tms320dm320/mrobe-500/lcd-mr500.c | 1012 | target/arm/tms320dm320/mrobe-500/lcd-mr500.c |
1013 | target/arm/tms320dm320/mrobe-500/lcd-as-mr500.S | ||
1009 | #if defined(HAVE_REMOTE_LCD) | 1014 | #if defined(HAVE_REMOTE_LCD) |
1010 | target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c | 1015 | target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c |
1011 | #endif | 1016 | #endif |
diff --git a/firmware/export/system.h b/firmware/export/system.h index b246d154a4..65db721bb4 100644 --- a/firmware/export/system.h +++ b/firmware/export/system.h | |||
@@ -152,6 +152,10 @@ uint32_t isolate_first_bit(uint32_t val) | |||
152 | { return val & -val; } | 152 | { return val & -val; } |
153 | 153 | ||
154 | /* Functions to set and clear register or variable bits atomically */ | 154 | /* Functions to set and clear register or variable bits atomically */ |
155 | void bitmod16(volatile uint16_t *addr, uint16_t bits, uint16_t mask); | ||
156 | void bitset16(volatile uint16_t *addr, uint16_t mask); | ||
157 | void bitclr16(volatile uint16_t *addr, uint16_t mask); | ||
158 | |||
155 | void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask); | 159 | void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask); |
156 | void bitset32(volatile uint32_t *addr, uint32_t mask); | 160 | void bitset32(volatile uint32_t *addr, uint32_t mask); |
157 | void bitclr32(volatile uint32_t *addr, uint32_t mask); | 161 | void bitclr32(volatile uint32_t *addr, uint32_t mask); |
diff --git a/firmware/target/arm/bits-armv4.S b/firmware/target/arm/bits-armv4.S index 05d61b8b7e..542e362f77 100644 --- a/firmware/target/arm/bits-armv4.S +++ b/firmware/target/arm/bits-armv4.S | |||
@@ -75,3 +75,61 @@ bitclr32: | |||
75 | msr cpsr_c, r12 | 75 | msr cpsr_c, r12 |
76 | bx lr | 76 | bx lr |
77 | .size bitclr32, .-bitclr32 | 77 | .size bitclr32, .-bitclr32 |
78 | |||
79 | /*************************************************************************** | ||
80 | * void bitmod16(volatile uint16_t *addr, uint16_t bits, uint16_t mask) | ||
81 | */ | ||
82 | .section .text, "ax", %progbits | ||
83 | .align 2 | ||
84 | .global bitmod16 | ||
85 | .type bitmod16, %function | ||
86 | bitmod16: | ||
87 | mrs r12, cpsr | ||
88 | orr r3, r12, #0xc0 | ||
89 | msr cpsr_c, r3 | ||
90 | ldrh r3, [r0] | ||
91 | and r1, r1, r2 @ Only allow mod of bits in 'mask' | ||
92 | bic r3, r3, r2 @ Clear mask bits | ||
93 | orr r3, r3, r1 @ Set according to 'bits' | ||
94 | strh r3, [r0] | ||
95 | msr cpsr_c, r12 | ||
96 | bx lr | ||
97 | .size bitmod16, .-bitmod16 | ||
98 | |||
99 | /*************************************************************************** | ||
100 | * void bitset16(volatile uint16_t *addr, uint16_t mask) | ||
101 | */ | ||
102 | .section .text, "ax", %progbits | ||
103 | .align 2 | ||
104 | .global bitset16 | ||
105 | .type bitset16, %function | ||
106 | bitset16: | ||
107 | mrs r12, cpsr | ||
108 | orr r2, r12, #0xc0 | ||
109 | msr cpsr_c, r2 | ||
110 | ldrh r2, [r0] | ||
111 | orr r2, r2, r1 | ||
112 | strh r2, [r0] | ||
113 | msr cpsr_c, r12 | ||
114 | bx lr | ||
115 | .size bitset16, .-bitset16 | ||
116 | |||
117 | |||
118 | /*************************************************************************** | ||
119 | * void bitclr16(volatile uint16_t *addr, uint16_t mask) | ||
120 | */ | ||
121 | .section .text, "ax", %progbits | ||
122 | .align 2 | ||
123 | .global bitclr16 | ||
124 | .type bitclr16, %function | ||
125 | bitclr16: | ||
126 | mrs r12, cpsr | ||
127 | orr r2, r12, #0xc0 | ||
128 | msr cpsr_c, r2 | ||
129 | ldrh r2, [r0] | ||
130 | bic r2, r2, r1 | ||
131 | strh r2, [r0] | ||
132 | msr cpsr_c, r12 | ||
133 | bx lr | ||
134 | .size bitclr16, .-bitclr16 | ||
135 | |||