From d4cfddccafee82e53b01c0b9286d788e3cbe1cc2 Mon Sep 17 00:00:00 2001 From: jaseg Date: Thu, 27 Apr 2023 11:43:40 +0200 Subject: [PATCH] WIP --- Makefile | 1 + src/main.c | 55 ++++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index c34fffe..0d33f0f 100644 --- a/Makefile +++ b/Makefile @@ -174,6 +174,7 @@ venv: clean: rm -rf $(BUILDDIR)/src + rm -f $(BUILDDIR)/**.o rm -f $(BUILDDIR)/$(BINARY) rm -f $(BUILDDIR)/$(BINARY:.elf=.map) rm -f $(BUILDDIR)/$(BINARY:.elf=-symbol-sizes.dot) diff --git a/src/main.c b/src/main.c index 0001530..e3256a9 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,6 @@ #include +#include #include struct adc_state { @@ -175,17 +176,18 @@ void adc_sm(bool reset) { } void adc_init() { - SPI1->CR1 = (1<CR2 = (0x7<CR1 = (1<CR2 = (0x7<CR1 |= SPI_CR1_SPE; - + /* CH1 -> DRDY/TIM2-triggered start of conversion */ DMA1_Channel1->CCR = (1<CMAR = (uint32_t)&st_adc.dma_ccr3; DMA1_Channel1->CPAR = (uint32_t)&(DMA1_Channel3->CCR); DMA1_Channel1->CNDTR = 1; /* CH2 -> RX DMA: 8 bit peripheral -> 8 bit memory */ - DMA1_Channel2->CCR = (0<CCR = (0<CPAR = (uint32_t)&(SPI1->DR); DMA1_Channel2->CMAR = (uint32_t)&st_adc.rxbuf; /* CH3 -> TX DMA: 8 bit memory -> 8 bit peripheral */ @@ -204,6 +206,10 @@ void adc_init() { st_adc.dma_ccr3 = DMA1_Channel3->CCR | DMA_CCR_EN; st_adc.response_bytes = 3; + + NVIC_EnableIRQ(DMA1_Channel1_IRQn); + NVIC_EnableIRQ(DMA1_Channel2_3_IRQn); + adc_sm(true); } @@ -212,7 +218,6 @@ void DMA1_Channel1_IRQHandler() { if (flags & (DMA_ISR_TEIF1)) { DMA1->IFCR = DMA_IFCR_CTEIF1; asm volatile ("bkpt"); - } } @@ -297,16 +302,16 @@ void adc_setup_dma(size_t tx_bytes, size_t response_bytes) { int main(void) { /* Enable HSE w/ 8 MHz crystal */ - RCC->CR |= RCC_CR_HSEON; - while (!(RCC->CR & RCC_CR_HSERDY)) - ; - asm volatile ("bkpt"); + /* FIXME */ + //RCC->CR |= RCC_CR_HSEON; + //while (!(RCC->CR & RCC_CR_HSERDY)) + // ; /* Configure PLL multiplier, clock dividers and MCO */ /* The ADS131M02 datasheet recommends an 8.192 MHz input clock for high-resolution mode. */ - RCC->CFGR = (6<CFGR = (5<CR |= RCC_CR_PLLON; while (!(RCC->CR & RCC_CR_PLLRDY)) ; - asm volatile ("bkpt"); + + FLASH->ACR = FLASH_ACR_PRFTBE | (1<CFGR |= (2<CFGR & RCC_CFGR_SWS_Msk) >> RCC_CFGR_SWS_Pos) != 2) ; - asm volatile ("bkpt"); /* Enable peripheral clocks */ RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN | RCC_AHBENR_DMAEN; @@ -328,9 +333,6 @@ int main(void) { RCC->APB1ENR |= RCC_APB1ENR_TIM2EN | RCC_APB1ENR_TIM3EN | RCC_APB1ENR_SPI2EN | RCC_APB1ENR_USART3EN | RCC_APB1ENR_I2C1EN | RCC_APB1ENR_USBEN; - asm volatile ("bkpt"); - adc_init(); - #define AFRL(pin, val) ((val) << ((pin)*4)) #define AFRH(pin, val) ((val) << (((pin)-8)*4)) #define AF(pin) (2<<(2*(pin))) @@ -368,6 +370,16 @@ int main(void) { AFRH( 9, 1) | /* USART1 TX (debug USART) */ AFRH(10, 1); /* USART1 RX */ GPIOA->BSRR = 1<<2; /* De-assert ADC !CS */ + GPIOA->OSPEEDR = (3<OSPEEDR = (3<