ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
801568
SciFi (12.12.2017 16:12 - 16:15, просмотров: 2808)
Из любопытства включил уровень оптимизации gcc -O3. Код для работы с SPI флешкой перестал работать. Понаставил кучу задержек в разных местах, пока не задышало. Причём убираю любую задержку - и снова глючит. Чудеса! STM32F407 static void send_bytes(int len) { DMA1_Stream7->M0AR = (int)dmabuf; DMA1_Stream7->PAR = (int)&SPI3->DR; DMA1_Stream7->NDTR = len; DMA1_Stream7->CR = (0 * DMA_SxCR_CHSEL_0) // select channel 0 | DMA_SxCR_DIR_0 // memory to peripheral | DMA_SxCR_MINC; // memory increment mode DMA1_Stream7->CR |= DMA_SxCR_EN; // enable stream DELAY_1US(); while ((DMA1->HISR & DMA_HISR_TCIF7) == 0) { /* wait for DMA TCIF */ } DELAY_1US(); while ((SPI3->SR & SPI_SR_TXE) == 0) { /* wait for TXE */ } DELAY_1US(); while ((SPI3->SR & SPI_SR_BSY) != 0) { /* wait for !BUSY */ } DELAY_1US(); /* clear OVR flag */ (void)SPI3->DR; (void)SPI3->SR; DMA1->HIFCR = DMA_HIFCR_CTCIF7 | DMA_HIFCR_CHTIF7 | DMA_HIFCR_CTEIF7; } static void read_bytes(int len) { static uint8_t dummy; DMA1_Stream0->M0AR = (int)dmabuf; DMA1_Stream7->M0AR = (int)&dummy; DMA1_Stream0->PAR = (int)&SPI3->DR; DMA1_Stream7->PAR = (int)&SPI3->DR; DMA1_Stream0->NDTR = len; DMA1_Stream7->NDTR = len; DMA1_Stream0->CR = (0 * DMA_SxCR_CHSEL_0) // select channel 0 | DMA_SxCR_MINC; // memory increment mode DMA1_Stream0->CR |= DMA_SxCR_EN; // enable stream DMA1_Stream7->CR = (0 * DMA_SxCR_CHSEL_0) // select channel 0 | DMA_SxCR_DIR_0; // memory to peripheral DMA1_Stream7->CR |= DMA_SxCR_EN; // enable stream DELAY_1US(); while ((DMA1->LISR & DMA_LISR_TCIF0) == 0) { /* wait for DMA TCIF */ } DELAY_1US(); while ((SPI3->SR & SPI_SR_TXE) == 0) { /* wait for TXE */ } DELAY_1US(); while ((SPI3->SR & SPI_SR_BSY) != 0) { /* wait for !BUSY */ } DELAY_1US(); DMA1_Stream0->CR = 0; DMA1_Stream7->CR = 0; DELAY_1US(); DMA1->LIFCR = DMA_LIFCR_CTCIF0 | DMA_LIFCR_CHTIF0 | DMA_LIFCR_CTEIF0; DMA1->HIFCR = DMA_HIFCR_CTCIF7 | DMA_HIFCR_CHTIF7 | DMA_HIFCR_CTEIF7; }
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้