kopia lustrzana https://github.com/SP8EBC/ParaTNC
fixed wind speed handling & regarding dma configuration
rodzic
e3d02dee3e
commit
b85d88540e
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="ilg.gnumcueclipse.debug.gdbjtag.openocd.launchConfigurationType">
|
||||
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.PERIPHERALS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <peripherals> <peripheral name="ADC1"/> <peripheral name="DAC"/> <peripheral name="GPIOC"/> <peripheral name="GPIOA"/> </peripherals> "/>
|
||||
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.PERIPHERALS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <peripherals> <peripheral name="GPIOB"/> <peripheral name="TIM4"/> <peripheral name="DMA1"/> </peripherals> "/>
|
||||
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doContinue" value="true"/>
|
||||
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doDebugInRam" value="false"/>
|
||||
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doFirstReset" value="true"/>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include "config_data.h"
|
||||
|
||||
#define SW_VER "EA00"
|
||||
#define SW_DATE "15092021"
|
||||
#define SW_DATE "21092021"
|
||||
|
||||
#define SYSTICK_TICKS_PER_SECONDS 100
|
||||
#define SYSTICK_TICKS_PERIOD 10
|
||||
|
|
|
@ -38,6 +38,7 @@ void TimerConfig(void) {
|
|||
TIM2->DIER |= 1;
|
||||
NVIC_EnableIRQ( TIM2_IRQn );
|
||||
|
||||
#ifdef STM32F10X_MD_VL
|
||||
// //////////////////////////////
|
||||
// //// konfiguracja TIM4 -- dac ///
|
||||
// //////////////////////////////
|
||||
|
@ -49,6 +50,19 @@ void TimerConfig(void) {
|
|||
// TIM4->CR1 |= TIM_CR1_CEN; /* timer powinien byc uruchamiany tylko przy wysylaniu danych */
|
||||
TIM4->DIER |= 1;
|
||||
NVIC_EnableIRQ( TIM4_IRQn );
|
||||
#else
|
||||
// //////////////////////////////
|
||||
// //// konfiguracja TIM4 -- dac ///
|
||||
// //////////////////////////////
|
||||
//NVIC_SetPriority(TIM4_IRQn, 2);
|
||||
TIM5->PSC = 0;
|
||||
TIM5->ARR = 2499;
|
||||
TIM5->CR1 |= TIM_CR1_DIR;
|
||||
TIM5->CR1 &= (0xFFFFFFFF ^ TIM_CR1_DIR);
|
||||
// TIM4->CR1 |= TIM_CR1_CEN; /* timer powinien byc uruchamiany tylko przy wysylaniu danych */
|
||||
TIM5->DIER |= 1;
|
||||
NVIC_EnableIRQ( TIM5_IRQn );
|
||||
#endif
|
||||
///////////////////////////////////////////
|
||||
/// konfiguracja TIM7 --adc ///
|
||||
///////////////////////////////////////////
|
||||
|
|
|
@ -68,7 +68,11 @@ uint8_t it_handlers_cpu_load_pool = 0;
|
|||
void it_handlers_set_priorities(void) {
|
||||
NVIC_SetPriority(TIM2_IRQn, 1); // one-wire delay
|
||||
NVIC_SetPriority(I2C1_EV_IRQn, 2);
|
||||
#ifdef STM32F10X_MD_VL
|
||||
NVIC_SetPriority(TIM4_IRQn, 3); // DAC
|
||||
#else
|
||||
NVIC_SetPriority(TIM5_IRQn, 3);
|
||||
#endif
|
||||
NVIC_SetPriority(TIM7_IRQn, 4); // ADC
|
||||
// systick
|
||||
NVIC_SetPriority(TIM1_UP_TIM16_IRQn, 6); // TX20 anemometer
|
||||
|
@ -172,7 +176,11 @@ void TIM1_TRG_COM_TIM17_IRQHandler(void) {
|
|||
#endif
|
||||
}
|
||||
|
||||
#ifdef STM32F10X_MD_VL
|
||||
void DMA1_Channel7_IRQHandler() { // DMA1_Channel7_IRQn
|
||||
#else
|
||||
void DMA1_Channel5_IRQHandler() { // DMA1_Channel7_IRQn
|
||||
#endif
|
||||
#ifdef STM32F10X_MD_VL
|
||||
NVIC_ClearPendingIRQ(DMA1_Channel7_IRQn);
|
||||
DMA_ClearITPendingBit(DMA1_IT_GL7);
|
||||
|
@ -187,13 +195,13 @@ void DMA1_Channel7_IRQHandler() { // DMA1_Channel7_IRQn
|
|||
#endif
|
||||
}
|
||||
|
||||
#ifdef STM32F10X_MD_VL
|
||||
void TIM4_IRQHandler( void ) {
|
||||
// obsluga przerwania cyfra-analog
|
||||
TIM4->SR &= ~(1<<0);
|
||||
#ifdef STM32F10X_MD_VL
|
||||
|
||||
DAC->DHR8R1 = AFSK_DAC_ISR(&main_afsk);
|
||||
DAC->SWTRIGR |= 1;
|
||||
#endif
|
||||
|
||||
#ifdef STM32L471xx
|
||||
DAC->DHR8R2 = AFSK_DAC_ISR(&main_afsk);
|
||||
|
@ -205,6 +213,21 @@ void TIM4_IRQHandler( void ) {
|
|||
}
|
||||
|
||||
}
|
||||
#else
|
||||
void TIM5_IRQHandler( void ) {
|
||||
// obsluga przerwania cyfra-analog
|
||||
TIM5->SR &= ~(1<<0);
|
||||
|
||||
|
||||
DAC->DHR8R2 = AFSK_DAC_ISR(&main_afsk);
|
||||
DAC->SWTRIGR |= 2;
|
||||
|
||||
if ((main_config_data_mode->wx & WX_ENABLED) == 0) {
|
||||
led_control_led2_bottom(main_afsk.sending);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
void TIM7_IRQHandler(void) {
|
||||
// obsluga przetwarzania analog-cyfra. Wersja z oversamplingiem
|
||||
|
|
|
@ -278,7 +278,7 @@ int main(int argc, char* argv[]){
|
|||
|
||||
system_clock_configure_rtc_l4();
|
||||
|
||||
RCC->APB1ENR1 |= (RCC_APB1ENR1_TIM2EN | RCC_APB1ENR1_TIM3EN | RCC_APB1ENR1_TIM4EN | RCC_APB1ENR1_TIM7EN | RCC_APB1ENR1_USART2EN | RCC_APB1ENR1_USART3EN | RCC_APB1ENR1_DAC1EN | RCC_APB1ENR1_I2C1EN);
|
||||
RCC->APB1ENR1 |= (RCC_APB1ENR1_TIM2EN | RCC_APB1ENR1_TIM3EN | RCC_APB1ENR1_TIM4EN | RCC_APB1ENR1_TIM5EN | RCC_APB1ENR1_TIM7EN | RCC_APB1ENR1_USART2EN | RCC_APB1ENR1_USART3EN | RCC_APB1ENR1_DAC1EN | RCC_APB1ENR1_I2C1EN);
|
||||
RCC->APB2ENR |= (RCC_APB2ENR_TIM1EN | RCC_APB2ENR_USART1EN);
|
||||
RCC->AHB1ENR |= (RCC_AHB1ENR_CRCEN | RCC_AHB1ENR_DMA1EN);
|
||||
RCC->AHB2ENR |= (RCC_AHB2ENR_ADCEN | RCC_AHB2ENR_GPIOAEN | RCC_AHB2ENR_GPIOBEN | RCC_AHB2ENR_GPIOCEN | RCC_AHB2ENR_GPIODEN);
|
||||
|
|
|
@ -107,8 +107,13 @@ void DA_Start() {
|
|||
|
||||
#endif
|
||||
|
||||
TIM4->CR1 |= TIM_CR1_CEN;
|
||||
#ifdef STM32F10X_MD_VL
|
||||
|
||||
TIM4->CR1 |= TIM_CR1_CEN;
|
||||
#else
|
||||
TIM5->CR1 |= TIM_CR1_CEN;
|
||||
|
||||
#endif
|
||||
|
||||
#if (!defined(_METEO))
|
||||
GPIO_SetBits(GPIOC, GPIO_Pin_9);
|
||||
|
@ -132,7 +137,12 @@ void DA_Stop() {
|
|||
#endif
|
||||
|
||||
// //Timer2 DISABLE
|
||||
#ifdef STM32F10X_MD_VL
|
||||
TIM4->CR1 &= ~TIM_CR1_CEN;
|
||||
#else
|
||||
TIM5->CR1 &= ~TIM_CR1_CEN;
|
||||
|
||||
#endif
|
||||
|
||||
#if (!defined(_METEO))
|
||||
GPIO_ResetBits(GPIOC, GPIO_Pin_9);
|
||||
|
|
|
@ -243,6 +243,14 @@ void analog_anemometer_init(uint16_t pulses_per_meter_second, uint8_t anemometer
|
|||
|
||||
|
||||
#ifdef STM32L471xx
|
||||
GPIO_InitTypeDef.Mode = LL_GPIO_MODE_ALTERNATE;
|
||||
GPIO_InitTypeDef.Pin = LL_GPIO_PIN_9;
|
||||
GPIO_InitTypeDef.Pull = LL_GPIO_PULL_NO;
|
||||
GPIO_InitTypeDef.Speed = LL_GPIO_SPEED_FREQ_MEDIUM;
|
||||
GPIO_InitTypeDef.Alternate = LL_GPIO_AF_2;
|
||||
|
||||
LL_GPIO_Init(GPIOB, &GPIO_InitTypeDef);
|
||||
|
||||
// set parameters for TIM4 used for windspeed
|
||||
TIM_InitTypeDef.Prescaler = 23999;
|
||||
TIM_InitTypeDef.Autoreload = 60000;
|
||||
|
@ -265,8 +273,10 @@ void analog_anemometer_init(uint16_t pulses_per_meter_second, uint8_t anemometer
|
|||
// configure and activate fourth channel
|
||||
LL_TIM_IC_Init(TIM4, LL_TIM_CHANNEL_CH3, &TIM_IC_InitTypeDef);
|
||||
|
||||
LL_TIM_EnableDMAReq_UPDATE(TIM4);
|
||||
|
||||
// enable DMA request for fourth channel
|
||||
LL_TIM_EnableDMAReq_CC4(TIM4);
|
||||
LL_TIM_EnableDMAReq_CC3(TIM4);
|
||||
|
||||
DMA_InitStruct.Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY;
|
||||
DMA_InitStruct.MemoryOrM2MDstAddress = (uint32_t)analog_anemometer_windspeed_pulses_time;
|
||||
|
@ -275,12 +285,16 @@ void analog_anemometer_init(uint16_t pulses_per_meter_second, uint8_t anemometer
|
|||
DMA_InitStruct.Mode = LL_DMA_MODE_NORMAL;
|
||||
DMA_InitStruct.NbData = ANALOG_ANEMOMETER_SPEED_PULSES_N;
|
||||
DMA_InitStruct.PeriphOrM2MSrcAddress = (uint32_t)&TIM4->CCR3;
|
||||
DMA_InitStruct.PeriphOrM2MSrcDataSize = LL_DMA_MDATAALIGN_HALFWORD;
|
||||
DMA_InitStruct.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_HALFWORD;
|
||||
DMA_InitStruct.PeriphOrM2MSrcIncMode = LL_DMA_MEMORY_NOINCREMENT;
|
||||
DMA_InitStruct.PeriphRequest = LL_DMA_REQUEST_6; // LL_DMAMUX_REQ_TIM4_CH3
|
||||
|
||||
LL_DMA_Init(DMA1, LL_DMA_CHANNEL_5, &DMA_InitStruct);
|
||||
|
||||
LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_5);
|
||||
|
||||
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_5);
|
||||
|
||||
LL_TIM_EnableCounter(TIM4);
|
||||
|
||||
NVIC_EnableIRQ( DMA1_Channel5_IRQn );
|
||||
|
|
Ładowanie…
Reference in New Issue