Got DAC output to work
This commit is contained in:
parent
3c47773c09
commit
01403edbbd
3 changed files with 62 additions and 3 deletions
20
.gdbinit
Normal file
20
.gdbinit
Normal 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
|
||||
|
||||
9
Makefile
9
Makefile
|
|
@ -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)
|
||||
|
|
|
|||
36
src/main.c
36
src/main.c
|
|
@ -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) {
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue