8000 move asm volatile to more clearly be after DMA · jepler/circuitpython@2f6f882 · GitHub
[go: up one dir, main page]

Skip to content

Commit 2f6f882

Browse files
committed
move asm volatile to more clearly be after DMA
1 parent 453c82c commit 2f6f882

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

ports/nrf/common-hal/analogio/AnalogIn.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,7 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
7676
// Something else might have used the ADC in a different way,
7777
// so we completely re-initialize it.
7878

79-
// Adding the "asm volatile" memory fence here or many places after this declaration
80-
// fixes an issue with gcc13 which causes `value` to always be zero.
81-
// Compiling with gcc10 or gcc12 is fine.
82-
// It can also be fixed by declaring `value` to be static.
83-
// I think I'd like to declare this as volatile, but that causes type errors.
8479
nrf_saadc_value_t value = 0;
85-
asm volatile ("" : : : "memory");
8680

8781
const nrf_saadc_channel_config_t config = {
8882
.resistor_p = NRF_SAADC_RESISTOR_DISABLED,
@@ -126,6 +120,13 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
126120

127121
nrf_saadc_disable(NRF_SAADC);
128122

123+
// Adding the "asm volatile" memory fence here or anywhere after the declaration of `value`
124+
// fixes an issue with gcc13 which causes `value` to always be zero.
125+
// Compiling with gcc10 or gcc12 is fine.
126+
// It can also be fixed by declaring `value` to be static.
127+
// I think I'd like to declare `value` as volatile, but that causes type errors.
128+
asm volatile ("" : : : "memory");
129+
129130
// Stretch 14-bit ADC reading to 16-bit range
130131
return (value << 2) | (value >> 12);
131132
}

0 commit comments

Comments
 (0)
0