From 173f327e051f73d26b5edd04910c05f38d1487ad Mon Sep 17 00:00:00 2001 From: Michael Wiebusch Date: Wed, 8 Jan 2014 17:52:06 +0100 Subject: [PATCH] the riddle of the lost interrupt is solved, can now repeatedly read out the adc0 --- firmware/src/CB_functions.c | 14 +++++++++++++- firmware/src/CB_functions.h | 3 ++- firmware/src/spi2.c | 9 +++++++-- firmware/src/spi2.h | 2 +- firmware/src/stm32f10x_it.c | 6 +++--- firmware/src/stm32f10x_it.h | 5 +++-- 6 files changed, 29 insertions(+), 10 deletions(-) diff --git a/firmware/src/CB_functions.c b/firmware/src/CB_functions.c index c28c5e8..0c4b9e7 100644 --- a/firmware/src/CB_functions.c +++ b/firmware/src/CB_functions.c @@ -18,9 +18,18 @@ extern uint16_t spi1DataBuffer[]; extern uint16_t SPI_DMA_Buffer_In[]; uint16_t uC_regs[UC_NO_REGS]; +uint16_t debug_counter = 0; +void debug_out(uint16_t debu){ + + // debug output => spi_debug_out + uC_regs[0x10]=debu; + report_register(0x10); +} + + void uart_byte_to_fpga(uint8_t byte){ while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, byte); // send address @@ -60,6 +69,7 @@ void report_all_registers(void) { void adc0_read(void){ uint8_t c = 0; + spi1_writeWord(CH3VSGND | UNIPOLAR); // VDDDCUR // ignore received data @@ -87,8 +97,10 @@ void adc0_read(void){ spi1_writeWord(CH1VSGND | UNIPOLAR); // dummy SPI_DMA_Buffer_In[c++] = ZERODIFF; SPI_DMA_Buffer_In[c++] = spi1_receivedWord(); - + + spi_dma_transfer(c); +// debug_out(++debug_counter); } diff --git a/firmware/src/CB_functions.h b/firmware/src/CB_functions.h index 7a24ff5..496f49f 100644 --- a/firmware/src/CB_functions.h +++ b/firmware/src/CB_functions.h @@ -17,4 +17,5 @@ void decode_register(uint8_t addr); void report_register(uint8_t addr); void report_all_registers(void); -void uart_byte_to_fpga(uint8_t byte); \ No newline at end of file +void uart_byte_to_fpga(uint8_t byte); +void debug_out(uint16_t debu); \ No newline at end of file diff --git a/firmware/src/spi2.c b/firmware/src/spi2.c index 0255ddf..e69c7fd 100644 --- a/firmware/src/spi2.c +++ b/firmware/src/spi2.c @@ -10,10 +10,12 @@ #include "periph_conf.h" #include "stm32f10x_conf.h" #include +#include "CB_functions.h" uint16_t SPI_DMA_Buffer[32]; uint16_t SPI_DMA_Buffer_In[32]; uint8_t spi_dma_busyFlag; +extern uint16_t debug_counter; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; @@ -97,7 +99,9 @@ void init_SPI2(void) { DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_Init(DMA1_Channel5, &DMA_InitStructure); - NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn; + DMA_ITConfig(DMA1_Channel5, DMA_IT_TC, ENABLE); // enable transfer complete interrupt + + NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; @@ -109,6 +113,7 @@ void init_SPI2(void) { void spi_dma_transfer(uint8_t count) { + debug_out(++debug_counter | spi_dma_busyFlag<<8); while(spi_dma_busyFlag){}; @@ -129,7 +134,7 @@ void spi_dma_transfer(uint8_t count) { } -void spi_handleDMA1Ch4Interrupt(void){ +void spi_handleDMA1Ch5Interrupt(void){ // Chip Select High // GPIO_WriteBit(GPIOB, GPIO_Pin_12, SET); CB_GPIO_Out_Hi(UC_CS); // spi nCS -> idle Hi diff --git a/firmware/src/spi2.h b/firmware/src/spi2.h index 8e45b59..3483db7 100644 --- a/firmware/src/spi2.h +++ b/firmware/src/spi2.h @@ -15,4 +15,4 @@ void init_SPI2(void); void spi_dma_transfer(uint8_t count); -void spi_handleDMA1Ch4Interrupt(void); \ No newline at end of file +void spi_handleDMA1Ch5Interrupt(void); \ No newline at end of file diff --git a/firmware/src/stm32f10x_it.c b/firmware/src/stm32f10x_it.c index 6f3e5b0..351171d 100644 --- a/firmware/src/stm32f10x_it.c +++ b/firmware/src/stm32f10x_it.c @@ -62,9 +62,9 @@ void SPI1_IRQHandler(void){ -void DMA1_Channel4_IRQHandler(void){ - spi_handleDMA1Ch4Interrupt(); - DMA_ClearFlag(DMA1_FLAG_TC4); +void DMA1_Channel5_IRQHandler(void){ + spi_handleDMA1Ch5Interrupt(); + DMA_ClearFlag(DMA1_FLAG_TC5); } diff --git a/firmware/src/stm32f10x_it.h b/firmware/src/stm32f10x_it.h index 1e7a65e..0f89944 100644 --- a/firmware/src/stm32f10x_it.h +++ b/firmware/src/stm32f10x_it.h @@ -45,13 +45,14 @@ void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); -//for spi with dma -void spi_handleDMA1Ch4Interrupt(void); //for spi1 void SPI1_IRQHandler(void); +// for spi2 +void DMA1_Channel5_IRQHandler(void); + #ifdef __cplusplus } -- 2.43.0