aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--os/hal/ports/STM32/LLD/ADCv2/adc_lld.c6
-rw-r--r--testhal/STM32/STM32F7xx/GPT-ADC-SPI-PWM-ICU/debug/STM32F7xx-GPT-ADC-SPI-PWM-ICU (OpenOCD, Just Run).launch2
-rw-r--r--testhal/STM32/STM32F7xx/GPT-ADC-SPI-PWM-ICU/main.c13
3 files changed, 15 insertions, 6 deletions
diff --git a/os/hal/ports/STM32/LLD/ADCv2/adc_lld.c b/os/hal/ports/STM32/LLD/ADCv2/adc_lld.c
index 75d7af606..e8a2e87d9 100644
--- a/os/hal/ports/STM32/LLD/ADCv2/adc_lld.c
+++ b/os/hal/ports/STM32/LLD/ADCv2/adc_lld.c
@@ -84,6 +84,12 @@ static void adc_lld_serve_rx_interrupt(ADCDriver *adcp, uint32_t flags) {
/* It is possible that the conversion group has already be reset by the
ADC error handler, in this case this interrupt is spurious.*/
if (adcp->grpp != NULL) {
+
+ /* DMA buffer invalidation because data cache.*/
+ dmaBufferInvalidate(adcp->samples,
+ adcp->samples +
+ (adcp->depth * adcp->grpp->num_channels));
+
if ((flags & STM32_DMA_ISR_TCIF) != 0) {
/* Transfer complete processing.*/
_adc_isr_full_code(adcp);
diff --git a/testhal/STM32/STM32F7xx/GPT-ADC-SPI-PWM-ICU/debug/STM32F7xx-GPT-ADC-SPI-PWM-ICU (OpenOCD, Just Run).launch b/testhal/STM32/STM32F7xx/GPT-ADC-SPI-PWM-ICU/debug/STM32F7xx-GPT-ADC-SPI-PWM-ICU (OpenOCD, Just Run).launch
index 15b9f9dcc..4a6e47225 100644
--- a/testhal/STM32/STM32F7xx/GPT-ADC-SPI-PWM-ICU/debug/STM32F7xx-GPT-ADC-SPI-PWM-ICU (OpenOCD, Just Run).launch
+++ b/testhal/STM32/STM32F7xx/GPT-ADC-SPI-PWM-ICU/debug/STM32F7xx-GPT-ADC-SPI-PWM-ICU (OpenOCD, Just Run).launch
@@ -33,7 +33,7 @@
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="0"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
-<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;vt_delta-null-chVTDoSetI-(format)&quot; val=&quot;4&quot;/&gt;&lt;content id=&quot;r3-(format)&quot; val=&quot;4&quot;/&gt;&lt;/contentList&gt;"/>
+<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;r3-(format)&quot; val=&quot;4&quot;/&gt;&lt;content id=&quot;vt_delta-null-chVTDoSetI-(format)&quot; val=&quot;4&quot;/&gt;&lt;/contentList&gt;"/>
<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;globalVariableList/&gt;&#13;&#10;"/>
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList&gt;&#13;&#10;&lt;memoryBlockExpressionItem&gt;&#13;&#10;&lt;expression text=&quot;0x20010744&quot;/&gt;&#13;&#10;&lt;/memoryBlockExpressionItem&gt;&#13;&#10;&lt;/memoryBlockExpressionList&gt;&#13;&#10;"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="./build/ch.elf"/>
diff --git a/testhal/STM32/STM32F7xx/GPT-ADC-SPI-PWM-ICU/main.c b/testhal/STM32/STM32F7xx/GPT-ADC-SPI-PWM-ICU/main.c
index 50b0948a7..009c9de1a 100644
--- a/testhal/STM32/STM32F7xx/GPT-ADC-SPI-PWM-ICU/main.c
+++ b/testhal/STM32/STM32F7xx/GPT-ADC-SPI-PWM-ICU/main.c
@@ -48,9 +48,6 @@ static void adccallback(ADCDriver *adcp, adcsample_t *buffer, size_t n) {
(void)adcp;
- /* DMA buffer invalidation because data cache.*/
- dmaBufferInvalidate(buffer, buffer + n * ADC_GRP1_NUM_CHANNELS);
-
/* Updating counters.*/
if (samples1 == buffer) {
nx += n;
@@ -76,12 +73,12 @@ static void adcerrorcallback(ADCDriver *adcp, adcerror_t err) {
* Channels: Sensor, VRef.
*/
static const ADCConversionGroup adcgrpcfg1 = {
- TRUE,
+ true,
ADC_GRP1_NUM_CHANNELS,
adccallback,
adcerrorcallback,
0, /* CR1 */
- ADC_CR2_SWSTART, /* CR2 */
+ ADC_CR2_EXTEN_RISING | ADC_CR2_EXTSEL_SRC(12), /* CR2 */
ADC_SMPR1_SMP_SENSOR(ADC_SAMPLE_144) | ADC_SMPR1_SMP_VREF(ADC_SAMPLE_144),
0, /* SMPR2 */
ADC_SQR1_NUM_CH(ADC_GRP1_NUM_CHANNELS), /* SQR1 */
@@ -142,6 +139,12 @@ int main(void) {
gptStart(&GPTD4, &gpt4cfg1);
/*
+ * Fixed an errata on the STM32F7xx, the DAC clock is required for ADC
+ * triggering.
+ */
+ rccEnableDAC1(false);
+
+ /*
* Activates the ADC1 driver and the temperature sensor.
*/
adcStart(&ADCD1, NULL);