summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/SOURCES5
-rw-r--r--firmware/export/system.h4
-rw-r--r--firmware/target/arm/bits-armv4.S58
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
988target/arm/bits-armv4.S
988target/arm/tms320dm320/debug-dm320.c 989target/arm/tms320dm320/debug-dm320.c
989target/arm/tms320dm320/dsp-dm320.c 990target/arm/tms320dm320/dsp-dm320.c
990target/arm/tms320dm320/i2c-dm320.c 991target/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
1000target/arm/ata-as-arm.S 1001target/arm/ata-as-arm.S
1002#if !defined(LCD_USE_DMA)
1001target/arm/lcd-as-memframe.S 1003target/arm/lcd-as-memframe.S
1004#endif
1002target/arm/mmu-arm.S 1005target/arm/mmu-arm.S
1006target/arm/tms320dm320/mrobe-500/crt0-board.S
1003target/arm/tms320dm320/mrobe-500/adc-mr500.c 1007target/arm/tms320dm320/mrobe-500/adc-mr500.c
1004target/arm/tms320dm320/mrobe-500/ata-mr500.c 1008target/arm/tms320dm320/mrobe-500/ata-mr500.c
1005target/arm/tms320dm320/mrobe-500/backlight-mr500.c 1009target/arm/tms320dm320/mrobe-500/backlight-mr500.c
1006target/arm/tms320dm320/mrobe-500/button-mr500.c 1010target/arm/tms320dm320/mrobe-500/button-mr500.c
1007target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c 1011target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c
1008target/arm/tms320dm320/mrobe-500/lcd-mr500.c 1012target/arm/tms320dm320/mrobe-500/lcd-mr500.c
1013target/arm/tms320dm320/mrobe-500/lcd-as-mr500.S
1009#if defined(HAVE_REMOTE_LCD) 1014#if defined(HAVE_REMOTE_LCD)
1010target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c 1015target/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 */
155void bitmod16(volatile uint16_t *addr, uint16_t bits, uint16_t mask);
156void bitset16(volatile uint16_t *addr, uint16_t mask);
157void bitclr16(volatile uint16_t *addr, uint16_t mask);
158
155void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask); 159void bitmod32(volatile uint32_t *addr, uint32_t bits, uint32_t mask);
156void bitset32(volatile uint32_t *addr, uint32_t mask); 160void bitset32(volatile uint32_t *addr, uint32_t mask);
157void bitclr32(volatile uint32_t *addr, uint32_t mask); 161void 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
86bitmod16:
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
106bitset16:
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
125bitclr16:
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