From e5b3edeffa1ee68fef0f66ac1d91c14e02f1f651 Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Thu, 27 Mar 2025 17:49:46 +0300 Subject: [PATCH] remove usart1 as it used common DMA with SPI2rx --- F1:F103/BISS_C_encoders/encoders.bin | Bin 11520 -> 11236 bytes F1:F103/BISS_C_encoders/encoders.creator.user | 31 +++++++++--------- F1:F103/BISS_C_encoders/encoders.files | 2 -- F1:F103/BISS_C_encoders/hardware.c | 9 +++-- F1:F103/BISS_C_encoders/main.c | 23 ++++++++++--- F1:F103/BISS_C_encoders/proto.c | 22 +++++++++---- F1:F103/BISS_C_encoders/spi.c | 30 +++++++++-------- F1:F103/BISS_C_encoders/spi.h | 1 - F1:F103/BISS_C_encoders/version.inc | 4 +-- 9 files changed, 74 insertions(+), 48 deletions(-) diff --git a/F1:F103/BISS_C_encoders/encoders.bin b/F1:F103/BISS_C_encoders/encoders.bin index 380605620cc3eaca61b686a2e2c0bee5612a8910..93ac16a7649c40a033ba81e89915366f227a20d4 100755 GIT binary patch delta 4479 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 diff --git a/F1:F103/BISS_C_encoders/encoders.creator.user b/F1:F103/BISS_C_encoders/encoders.creator.user index 6d3b983..7ce7566 100644 --- a/F1:F103/BISS_C_encoders/encoders.creator.user +++ b/F1:F103/BISS_C_encoders/encoders.creator.user @@ -1,10 +1,10 @@ - + EnvironmentId - {7bd84e39-ca37-46d3-be9d-99ebea85bc0d} + {cf63021e-ef53-49b0-b03b-2f2570cdf3b6} ProjectExplorer.Project.ActiveTarget @@ -40,9 +40,9 @@ 1 0 false - true + false false - 0 + 1 true true 0 @@ -51,10 +51,10 @@ false 1 true - false + true true *.md, *.MD, Makefile - false + true true true @@ -79,7 +79,7 @@ true true Builtin.DefaultTidyAndClazy - 8 + 4 true @@ -94,11 +94,12 @@ Desktop Desktop Desktop - {65a14f9e-e008-4c1b-89df-4eaa4774b6e3} + {91347f2c-5221-46a7-80b1-0a054ca02f79} 0 0 0 + /home/eddy/Docs/SAO/ELECTRONICS/STM32/F1-srcs/BISS_C_encoders @@ -108,8 +109,8 @@ GenericProjectManager.GenericMakeStep 1 - Build - Build + Сборка + Сборка ProjectExplorer.BuildSteps.Build @@ -121,8 +122,8 @@ GenericProjectManager.GenericMakeStep 1 - Clean - Clean + Очистка + Очистка ProjectExplorer.BuildSteps.Clean 2 @@ -130,15 +131,15 @@ false - Default + По умолчанию GenericProjectManager.GenericBuildConfiguration 1 0 - Deploy - Deploy + Развёртывание + Развёртывание ProjectExplorer.BuildSteps.Deploy 1 diff --git a/F1:F103/BISS_C_encoders/encoders.files b/F1:F103/BISS_C_encoders/encoders.files index 42d3791..29882c6 100644 --- a/F1:F103/BISS_C_encoders/encoders.files +++ b/F1:F103/BISS_C_encoders/encoders.files @@ -11,8 +11,6 @@ spi.c spi.h strfunc.c strfunc.h -usart.c -usart.h usb_descr.c usb_descr.h usb_lib.c diff --git a/F1:F103/BISS_C_encoders/hardware.c b/F1:F103/BISS_C_encoders/hardware.c index f24d2d1..82725f8 100644 --- a/F1:F103/BISS_C_encoders/hardware.c +++ b/F1:F103/BISS_C_encoders/hardware.c @@ -20,16 +20,19 @@ static inline void gpio_setup(){ // Enable clocks to the GPIO subsystems (PB for ADC), turn on AFIO clocking to disable SWD/JTAG - RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN | RCC_APB2ENR_AFIOEN; + RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN | RCC_APB2ENR_AFIOEN | RCC_APB2ENR_SPI1EN; + RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; // turn off SWJ/JTAG // AFIO->MAPR = AFIO_MAPR_SWJ_CFG_DISABLE; AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // for PA15 // Set led as opendrain output GPIOC->CRH |= CRH(13, CNF_ODOUTPUT|MODE_SLOW); - GPIOA->CRL = CRL(5, CNF_AFPP|MODE_FAST) | CRL(6, CNF_FLINPUT); + // SPI1 pins + //GPIOA->CRL = CRL(5, CNF_AFPP|MODE_FAST) | CRL(6, CNF_FLINPUT); // USB pullup (PA15) - pushpull output GPIOA->CRH = CRH(15, CNF_PPOUTPUT|MODE_SLOW); - GPIOB->CRH = CRH(13, CNF_AFPP|MODE_FAST) | CRH(14, CNF_FLINPUT); + // SPI2 pins + //GPIOB->CRH = CRH(13, CNF_AFPP|MODE_FAST) | CRH(14, CNF_FLINPUT); } void hw_setup(){ diff --git a/F1:F103/BISS_C_encoders/main.c b/F1:F103/BISS_C_encoders/main.c index 33299cd..8f9b5bf 100644 --- a/F1:F103/BISS_C_encoders/main.c +++ b/F1:F103/BISS_C_encoders/main.c @@ -40,11 +40,12 @@ int main(){ hw_setup(); USBPU_OFF(); SysTick_Config(72000); +/* #ifdef EBUG usart_setup(); - DBG("Start"); uint32_t tt = 0; #endif +*/ USB_setup(); #ifndef EBUG iwdg_setup(); @@ -56,6 +57,7 @@ int main(){ LED_blink(LED0); lastT = Tms; } +/* #ifdef EBUG if(Tms != tt){ __disable_irq(); @@ -64,6 +66,7 @@ int main(){ __enable_irq(); } #endif +*/ if(CDCready[I_CMD]){ if(Tms - lastS > 9999){ USB_sendstr(I_CMD, "Tms="); @@ -75,6 +78,12 @@ int main(){ if(l < 0) CMDWRn("ERROR: CMD USB buffer overflow or string was too long"); else if(l) parse_cmd(inbuff); } + int showval = spi_read_enc(0, encbuf); + if(CDCready[I_CMD] && showval){ + CMDWR("ENCX="); + hexdump(I_CMD, encbuf, ENCODER_BUFSZ); + newline(I_CMD); + } if(CDCready[I_X]){ int l = USB_receivestr(I_X, inbuff, RBINSZ); if(l < 0) CMDWRn("ERROR: encX USB buffer overflow or string was too long"); @@ -83,9 +92,14 @@ int main(){ CMDWR(inbuff); CMDWR("'\n"); } - if(spi_read_enc(0, encbuf)){ // send encoder data + if(showval) // send encoder data hexdump(I_X, encbuf, ENCODER_BUFSZ); - } + } + showval = spi_read_enc(1, encbuf); + if(CDCready[I_CMD] && showval){ + CMDWR("ENCY="); + hexdump(I_CMD, encbuf, ENCODER_BUFSZ); + newline(I_CMD); } if(CDCready[I_Y]){ int l = USB_receivestr(I_Y, inbuff, RBINSZ); @@ -95,9 +109,8 @@ int main(){ CMDWR(inbuff); CMDWR("'\n"); } - if(spi_read_enc(1, encbuf)){ // send encoder data + if(showval) // send encoder data hexdump(I_Y, encbuf, ENCODER_BUFSZ); - } } } return 0; diff --git a/F1:F103/BISS_C_encoders/proto.c b/F1:F103/BISS_C_encoders/proto.c index 659e88b..f02b134 100644 --- a/F1:F103/BISS_C_encoders/proto.c +++ b/F1:F103/BISS_C_encoders/proto.c @@ -55,9 +55,11 @@ typedef enum{ C_dumpconf, C_erasestorage, C_storeconf, - C_reboot, + C_reset, C_fin, C_encstart, + C_encX, + C_encY, C_spistat, C_spiinit, C_spideinit, @@ -154,7 +156,7 @@ static errcode_e storeconf(_U_ cmd_e idx, _U_ char *par){ return ERR_OK; } -static errcode_e reboot(_U_ cmd_e idx, _U_ char *par){ +static errcode_e reset(_U_ cmd_e idx, _U_ char *par){ NVIC_SystemReset(); return ERR_OK; // never reached } @@ -164,9 +166,11 @@ static errcode_e fini(_U_ cmd_e idx, _U_ char *par){ return ERR_OK; // never reached } -static errcode_e encstart(_U_ cmd_e idx, _U_ char *par){ - if(!spi_start_enc(0)) return ERR_FAIL; - if(!spi_start_enc(1)) return ERR_FAIL; +static errcode_e encstart(cmd_e idx, _U_ char *par){ + if(idx == C_encX || idx == C_encstart) + if(!spi_start_enc(0)) return ERR_FAIL; + if(idx == C_encY || idx == C_encstart) + if(!spi_start_enc(1)) return ERR_FAIL; return ERR_OK; } @@ -223,9 +227,11 @@ static const funcdescr_t commands[C_AMOUNT] = { [C_dumpconf] = {"dumpconf", dumpconf}, [C_erasestorage] = {"erasestorage", erasestor}, [C_storeconf] = {"storeconf", storeconf}, - [C_reboot] = {"reboot", reboot}, + [C_reset] = {"reset", reset}, [C_fin] = {"fin", fini}, [C_encstart] = {"readenc", encstart}, + [C_encX] = {"readX", encstart}, + [C_encY] = {"readY", encstart}, [C_spistat] = {"spistat", spistat}, [C_spiinit] = {"spiinit", spiinit}, [C_spideinit] = {"spideinit", spideinit}, @@ -257,8 +263,10 @@ static const help_t helpmessages[] = { {-1, "Different commands"}, {C_dummy, "dummy integer setter/getter"}, {C_encstart, "start reading encoders"}, + {C_encX, "read only X encoder"}, + {C_encY, "read only Y encoder"}, {C_help, "show this help"}, - {C_reboot, "reboot MCU"}, + {C_reset, "reset MCU"}, {C_spideinit, "deinit SPI"}, {C_spiinit, "init SPI"}, {C_spistat, "get status of both SPI interfaces"}, diff --git a/F1:F103/BISS_C_encoders/spi.c b/F1:F103/BISS_C_encoders/spi.c index 4c83255..9430a21 100644 --- a/F1:F103/BISS_C_encoders/spi.c +++ b/F1:F103/BISS_C_encoders/spi.c @@ -47,20 +47,20 @@ void spi_setup(uint8_t idx){ RCC->AHBENR |= RCC_AHBENR_DMA1EN; volatile DMA_Channel_TypeDef *DMA = DMAs[idx]; if(idx == 1){ // PA5/PA6; 72MHz + RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; RCC->APB2RSTR = RCC_APB2RSTR_SPI1RST; RCC->APB2RSTR = 0; // clear reset GPIOA->CRL = (GPIOA->CRL & ~(GPIO_CRL_CNF5 | GPIO_CRL_CNF6)) | CRL(5, CNF_AFPP|MODE_FAST) | CRL(6, CNF_FLINPUT); - RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; - SPI->CR1 = SPI_CR1_BR_0 | SPI_CR1_BR_2; // Fpclk/64 + SPI->CR1 = SPI_CR1_BR_1 | SPI_CR1_BR_2; // Fpclk/128 NVIC_EnableIRQ(DMA1_Channel2_IRQn); // enable Rx interrupt - }else if(idx == 2){ // PB12..PB15; 36MHz + }else if(idx == 2){ // PB13/PB14; 36MHz + RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; RCC->APB1RSTR = RCC_APB1RSTR_SPI2RST; RCC->APB1RSTR = 0; GPIOB->CRH = (GPIOB->CRH & ~(GPIO_CRH_CNF13 | GPIO_CRH_CNF14)) | CRH(13, CNF_AFPP|MODE_FAST) | CRH(14, CNF_FLINPUT); - RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; - SPI->CR1 = SPI_CR1_BR_2; // Fpclk/32 + SPI->CR1 = SPI_CR1_BR_0 | SPI_CR1_BR_2; // Fpclk/64 NVIC_EnableIRQ(DMA1_Channel4_IRQn); }else return; // err // Baudrate = 0b110 - fpclk/128 @@ -103,11 +103,15 @@ void spi_deinit(uint8_t idx){ spi_status[idx] = SPI_NOTREADY; } -int spi_waitbsy(uint8_t idx){ +static int spi_waitbsy(uint8_t idx){ CHKIDXR(idx); - DBGs(u2str(idx)); - DBG("wait busy"); - WAITX(SPIs[idx]->SR & SPI_SR_BSY); + if(SPIs[idx]->SR & SPI_SR_BSY){ + DBG("Busy - turn off"); + spi_onoff(idx, 0); // turn off SPI if it's busy + } + //DBGs(u2str(idx)); + //DBG("wait busy"); + //WAITX(SPIs[idx]->SR & SPI_SR_BSY); return 1; } @@ -143,6 +147,8 @@ int spi_start_enc(int encodernum){ // SSI got fresh data void dma1_channel2_isr(){ + // turn off DMA + DMA1_Channel2->CCR &= ~DMA_CCR_EN; if(DMA1->ISR & DMA_ISR_TEIF2){ DMA1->IFCR = DMA_IFCR_CTEIF2; } @@ -155,11 +161,11 @@ void dma1_channel2_isr(){ //encoderbuf[7] = (ctr >> 0 ) & 0xff; } spi_onoff(1, 0); - // turn off DMA - DMA1_Channel2->CCR &= ~DMA_CCR_EN; } void dma1_channel4_isr(){ + // turn off DMA + DMA1_Channel4->CCR &= ~DMA_CCR_EN; if(DMA1->ISR & DMA_ISR_TEIF4){ DMA1->IFCR = DMA_IFCR_CTEIF4; } @@ -168,7 +174,5 @@ void dma1_channel4_isr(){ freshdata[1] = 1; } spi_onoff(2, 0); - // turn off DMA - DMA1_Channel4->CCR &= ~DMA_CCR_EN; } diff --git a/F1:F103/BISS_C_encoders/spi.h b/F1:F103/BISS_C_encoders/spi.h index 333af93..950f771 100644 --- a/F1:F103/BISS_C_encoders/spi.h +++ b/F1:F103/BISS_C_encoders/spi.h @@ -17,6 +17,5 @@ extern spiStatus spi_status[AMOUNT_OF_SPI+1]; void spi_onoff(uint8_t idx, uint8_t on); void spi_deinit(uint8_t idx); void spi_setup(uint8_t idx); -int spi_waitbsy(uint8_t idx); int spi_start_enc(int encodernum); int spi_read_enc(uint8_t encno, uint8_t buf[8]); diff --git a/F1:F103/BISS_C_encoders/version.inc b/F1:F103/BISS_C_encoders/version.inc index 35655c8..2872e58 100644 --- a/F1:F103/BISS_C_encoders/version.inc +++ b/F1:F103/BISS_C_encoders/version.inc @@ -1,2 +1,2 @@ -#define BUILD_NUMBER "63" -#define BUILD_DATE "2025-03-26" +#define BUILD_NUMBER "73" +#define BUILD_DATE "2025-03-27"