Got DAC output to work

This commit is contained in:
jaseg 2023-08-31 18:14:12 +02:00
parent 3c47773c09
commit 01403edbbd
3 changed files with 62 additions and 3 deletions

20
.gdbinit Normal file
View file

@ -0,0 +1,20 @@
target remote localhost:3333
set print pretty on
set print elements 512
# Update GDB's Python paths with the `sys.path` values of the local Python installation,
# whether that is brew'ed Python, a virtualenv, or another system python.
# Convert GDB to interpret in Python
python
import os,subprocess,sys
# Execute a Python using the user's shell and pull out the sys.path (for site-packages)
paths = subprocess.check_output('python -c "import os,sys;print(os.linesep.join(sys.path).strip())"',shell=True).decode("utf-8").split()
# Extend GDB's Python's search path
sys.path.extend(paths)
end
source ~/ref/PyCortexMDebug/cmdebug/svd_gdb.py
svd_load ~/ref/stm32square/svd/STM32G431xx.svd

View file

@ -35,7 +35,14 @@ C_SOURCES := src/main.c
CPP_SOURCES := # - none -
MUSL_SOURCES := # - none -
MUSL_SOURCES := math/sinf.c \
math/cosf.c \
math/__sindf.c \
math/__cosdf.c \
math/__rem_pio2f.c \
math/__rem_pio2_large.c \
math/scalbn.c \
math/floor.c
MUSL_SOURCES := $(addprefix $(MUSL_DIR)/src/,$(MUSL_SOURCES))
C_SOURCES += $(MUSL_SOURCES)

View file

@ -1,6 +1,7 @@
#include <global.h>
#include <string.h>
#include <math.h>
volatile uint64_t sys_time_us;
@ -35,7 +36,7 @@ int main(void) {
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN | RCC_AHB2ENR_GPIOBEN | RCC_AHB2ENR_GPIOCEN | RCC_AHB2ENR_DAC1EN |
RCC_AHB2ENR_DAC3EN | RCC_AHB2ENR_ADC12EN;
RCC->APB1ENR1 |= RCC_APB1ENR1_SPI2EN | RCC_APB1ENR1_I2C2EN;
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN | RCC_APB2ENR_TIM8EN | RCC_APB2ENR_SYSCFGEN;
/* GPIO A pin config:
* A0: TP_SENS (ADC12_IN1)
@ -56,10 +57,12 @@ int main(void) {
* A15: C_SR0 (digital IO)
*/
/* FIXME DEBUG
GPIOA->MODER = ANALOG(0) | ANALOG(1) | ANALOG(2) | ANALOG(3) | ANALOG(4) | ANALOG(5) | ANALOG(6) | ANALOG(7) | AF(8)
| AF(9) | ANALOG(10) | AF(11) | OUT(12) | AF(13) | AF(14) | OUT(15);
GPIOA->AFR[1] = AFRH(8, 4) | AFRH(9, 4) | AFRH(11, 5) | AFRH(13, 0) | AFRH(14, 0);
GPIOA->OSPEEDR = (3<<11) | (3<<13) | (3<<14) | (3<<15) | (3<<12) | (3<<8) | (3<<9);
*/
/* GPIO B pin config:
* B0: VCOIL_MEAS (ADC1_IN15)
@ -80,11 +83,13 @@ int main(void) {
* B15: BOOST_EN (digital IO)
*/
/* FIXME DEBUG
GPIOB->MODER = ANALOG(0) | OUT(1) | ANALOG(2) | AF(3) | OUT(4) | OUT(5) | OUT(6) | OUT(7) | OUT(8) | OUT(9) |
OUT(10) | ANALOG(11) | ANALOG(12) | AF(13) | ANALOG(14) | OUT(15);
GPIOB->AFR[1] = AFRH(13, 5);
GPIOB->OSPEEDR = (3<<1) | (3<<3) | (3<<4) | (3<<5) | (3<<6) | (3<<7) | (3<<8) | (3<<9) | (3<<10) | (3<<13) |
(3<<15);
*/
/* GPIO C pin config:
* C4: M2S_ADC (ADC2_IN5)
@ -96,10 +101,37 @@ int main(void) {
* C15: INT4 (digital IO)
*/
/* FIXME DEBUG
GPIOC->MODER = ANALOG(4) | OUT(6) | IN(10) | IN(11) | IN(13) | IN(14) | IN(15);
GPIOC->OSPEEDR = (3<<6);
*/
/* FIXME DEBUG */
GPIOA->MODER &= CLEAR(8) & CLEAR(9) & CLEAR(2);
GPIOA->MODER |= OUT(8) | OUT(9) | ANALOG(2);
GPIOB->MODER &= CLEAR(13) & CLEAR(14);
GPIOB->MODER |= OUT(13) | OUT(14);
int16_t waveform[17];
for (size_t i=0; i<COUNT_OF(waveform); i++) {
int16_t foo = 2047 * sinf(i * 2*M_PI / COUNT_OF(waveform));
waveform[i] = foo;
}
/* Plumb DMA channel 1 into DAC 3 channel 1, trigger DAC 3 channel 1 conversion from TIM8. */
VREFBUF->CSR = VREFBUF_CSR_ENVR | (2<<VREFBUF_CSR_VRS_Pos);
DAC3->MCR = (2<<DAC_MCR_HFSEL_Pos) | DAC_MCR_SINFORMAT1 | (3<<DAC_MCR_MODE1_Pos);
DAC3->CR = DAC_CR_EN1 | DAC_CR_TEN1 | (1<<DAC_CR_TSEL1_Pos) | DAC_CR_DMAEN1;
TIM1->ARR = 17;
TIM1->CR2 = (2<<TIM_CR2_MMS_Pos);
TIM1->CR1 |= TIM_CR1_CEN;
DMA1_Channel1->CNDTR = COUNT_OF(waveform);
DMA1_Channel1->CMAR = (uint32_t)waveform;
DMA1_Channel1->CPAR = (uint32_t)&DAC3->DHR12R1;
DMA1_Channel1->CCR = DMA_CCR_CIRC | DMA_CCR_DIR | DMA_CCR_MINC | (1<<DMA_CCR_MSIZE_Pos) | (2<<DMA_CCR_PSIZE_Pos);
DMA1_Channel1->CCR |= DMA_CCR_EN;
DMAMUX1_Channel0->CCR = (102<<DMAMUX_CxCR_DMAREQ_ID_Pos);
OPAMP1->CSR = OPAMP_CSR_HIGHSPEEDEN | (3<<OPAMP_CSR_VMSEL_Pos) | (3<<OPAMP_CSR_VPSEL_Pos) | OPAMP_CSR_OPAMPxEN;
while(23) {
}