From 5e93258f5ec726ce1220b5b82dc660be492d19c9 Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Wed, 24 Feb 2021 20:57:00 +0100 Subject: [PATCH] wip --- firmware/adc.c | 17 ++++++++++++++--- firmware/adc.h | 2 +- firmware/ccconfig.h | 2 +- firmware/lib/systems.c | 3 ++- firmware/lib/systems.h | 4 ++++ firmware/main.c | 20 +++++++++++--------- 6 files changed, 33 insertions(+), 15 deletions(-) diff --git a/firmware/adc.c b/firmware/adc.c index 3b266bf..882d709 100644 --- a/firmware/adc.c +++ b/firmware/adc.c @@ -30,7 +30,7 @@ void adc_init() // Set up timer TIM_TimeBaseInitTypeDef Timer_InitStruct; TIM_TimeBaseStructInit(&Timer_InitStruct); - Timer_InitStruct.TIM_Prescaler = 0; + Timer_InitStruct.TIM_Prescaler = 0x0; Timer_InitStruct.TIM_CounterMode = TIM_CounterMode_Up; Timer_InitStruct.TIM_Period = (ADC_F_TIM / ADC_SAMPLE_RATE); Timer_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1; @@ -136,11 +136,15 @@ void adc_init() } void DMA2_Stream0_IRQHandler() -{ +{ int sample; DMA_ClearFlag(ADC_RX_DMA_STREAM, DMA_FLAG_TCIF0); //printf("[DMA-IRQ] %d, %d\r\n", adc_buffer[0], adc_buffer[1]); - sample = 2048 - ((adc_buffer[0] + adc_buffer[1]) / 2); + //sample = 2048 - ((adc_buffer[0] + adc_buffer[1]) / 2); + sample = 2048 - adc_buffer[0]; + //printf("ADC0: %4d, ADC1: %4d, SMP: %4d\r\n", + // adc_buffer[0], adc_buffer[1], sample); + GotSample(sample); } @@ -155,5 +159,12 @@ void TIM5_IRQHandler() { TIM_ClearFlag(TIM5, TIM_FLAG_CC1); // I would really like to this in HW via events, but somehow it's broken... + /*static int s=0; + s=!s; + if (s) { + LED_ON2; + } else { + LED_OFF2; + }*/ ADC_SoftwareStartConv(ADC1); } diff --git a/firmware/adc.h b/firmware/adc.h index e67ec12..beb68e3 100644 --- a/firmware/adc.h +++ b/firmware/adc.h @@ -2,7 +2,7 @@ #define _ADC_H #define ADC_F_TIM 50000000 -#define ADC_SAMPLE_RATE 44130 +#define ADC_SAMPLE_RATE (40000) #define ADC_RX_DMA_CHANNEL DMA_Channel_0 diff --git a/firmware/ccconfig.h b/firmware/ccconfig.h index 7927f89..9f8300a 100644 --- a/firmware/ccconfig.h +++ b/firmware/ccconfig.h @@ -4,7 +4,7 @@ #define CCEMBEDDED #define NUM_LIN_LEDS 60 #define USE_NUM_LIN_LEDS 60 -#define DFREQ 44130 +#define DFREQ (40000) #endif diff --git a/firmware/lib/systems.c b/firmware/lib/systems.c index 513b916..481a2dc 100644 --- a/firmware/lib/systems.c +++ b/firmware/lib/systems.c @@ -168,7 +168,8 @@ void ConfigureUART() void ConfigureLED() { - ConfigureGPIO( LEDPIN, INOUT_OUT ); + ConfigureGPIO(LEDPIN, INOUT_OUT); + ConfigureGPIO(LEDPIN2, INOUT_OUT); } uint8_t GetGPIOFromString( const char * str ) diff --git a/firmware/lib/systems.h b/firmware/lib/systems.h index bb0fa10..25d6fb1 100644 --- a/firmware/lib/systems.h +++ b/firmware/lib/systems.h @@ -51,6 +51,7 @@ void ConfigureGPIO( gpio gpio, int parameters ); #define LEDPIN 0x18 #elif defined( STM32F40_41xxx ) #define LEDPIN (16+14) +#define LEDPIN2 (16+13) #endif void ConfigureUART(); @@ -60,6 +61,9 @@ void ConfigureLED(); #define LED_ON GPIOOn(LEDPIN) #define LED_OFF GPIOOff(LEDPIN) +#define LED_ON2 GPIOOn(LEDPIN2) +#define LED_OFF2 GPIOOff(LEDPIN2) + #endif diff --git a/firmware/main.c b/firmware/main.c index ac44d8f..6ac1428 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -31,6 +31,12 @@ void GotSample( int samp ) sampbuff[last_samp_pos] = samp; last_samp_pos = ((last_samp_pos+1)%CIRCBUFSIZE); samples++; + + if (samp > 128) { + LED_ON2; + } else { + LED_OFF2; + } } //Call this once we've stacked together one full colorchord frame. @@ -40,8 +46,8 @@ void NewFrame() int i; HandleFrameInfo(); -// UpdateLinearLEDs(); - UpdateAllSameLEDs(); + UpdateLinearLEDs(); + //UpdateAllSameLEDs(); SendSPI2812( ledOut, NUM_LIN_LEDS ); } @@ -116,14 +122,10 @@ int main(void) SysTick_Config( RCC_Clocks.HCLK_Frequency / 100); float fv = RCC_Clocks.HCLK_Frequency / 1000000.0f; -// We can use printf to print back through the debugging interface, but that's slow and -// it also takes up a bunch of space. No printf = no space wasted in printf. -// printf( "Operating at %.3fMHz\n", fv ); ConfigureUART(); InitColorChord(); Configure_PA0(); - //InitMP45DT02(); InitSPI2812(); adc_init(); @@ -132,8 +134,8 @@ int main(void) int this_samp = 0; int wf = 0; - LED_ON; + LED_ON2; int c = 1; while (1) { @@ -150,7 +152,7 @@ int main(void) break; } - + LED_OFF2; SendSPI2812(ledOut, NUM_LIN_LEDS); while(1) { @@ -158,7 +160,7 @@ int main(void) { LED_OFF; //Use led on the board to show us how much CPU we're using. (You can also probe PB15) - PushSample32( sampbuff[this_samp]/2 ); //Can't put in full volume. + PushSample32( sampbuff[this_samp] ); //Can't put in full volume. (here was /2) this_samp = (this_samp+1)%CIRCBUFSIZE;