modem frequency correction

pull/32/head
Piotr Wilkon 2023-09-05 08:11:48 +02:00
rodzic 8189de2e0f
commit 8d83ab5cfa
2 zmienionych plików z 10 dodań i 9 usunięć

Wyświetl plik

@ -12,7 +12,7 @@
<targetDefinitions>
<board id="f103c8t6_digi_usb">
<name>F103C8T6_DIGI_USB</name>
<dbgIF>JTAG</dbgIF>
<dbgIF>SWD</dbgIF>
<dbgDEV>ST-Link</dbgDEV>
<mcuId>stm32f103c8tx</mcuId>
</board>

Wyświetl plik

@ -593,7 +593,7 @@ void ModemTxTestStart(enum ModemTxTestMode type)
if(ModemConfig.modem == MODEM_9600)
{
TIM1->ARR = 103;
TIM1->ARR = markStep;
//enable baudrate generator
TIM3->CR1 = TIM_CR1_CEN; //enable timer
NVIC_EnableIRQ(TIM3_IRQn); //enable interrupt in NVIC
@ -637,7 +637,7 @@ void ModemTransmitStart(void)
{
setPtt(1); //PTT on
if(ModemConfig.modem == MODEM_9600)
TIM1->ARR = 103;
TIM1->ARR = markStep;
TIM3->CR1 = TIM_CR1_CEN;
TIM1->CR1 = TIM_CR1_CEN;
@ -688,8 +688,8 @@ void ModemInit(void)
memset(demodState, 0, sizeof(demodState));
/**
* TIM1 is used for pushing samples to DAC (R2R or PWM) (clocked at 4 MHz)
* TIM3 is the baudrate generator for TX (clocked at 1 MHz)
* TIM1 is used for pushing samples to DAC (R2R or PWM) (clocked at 18 MHz)
* TIM3 is the baudrate generator for TX (clocked at 18 MHz)
* TIM4 is the PWM generator with no software interrupt
* TIM2 is the RX sampling timer with no software interrupt, but it directly calls DMA
*/
@ -764,11 +764,11 @@ void ModemInit(void)
TIM2->DIER |= TIM_DIER_UDE; //enable calling DMA on timer tick
//TX DAC timer
TIM1->PSC = 17; //72/18=4 MHz
TIM1->PSC = 3; //72/4=18 MHz
TIM1->DIER |= TIM_DIER_UIE;
//baudrate timer
TIM3->PSC = 3; //72/9=18 MHz
TIM3->PSC = 3; //72/4=18 MHz
TIM3->DIER |= TIM_DIER_UIE;
if(ModemConfig.modem > MODEM_9600)
@ -905,6 +905,7 @@ void ModemInit(void)
demodCount = 1;
N = N9600;
baudRate = 9600.f;
markFreq = 38400.f / (float)DAC_SINE_SIZE; //use as DAC sample rate
demodState[0].pllStep = PLL9600_STEP;
demodState[0].pllLockedAdjust = PLL9600_LOCKED_TUNE;
@ -925,8 +926,8 @@ void ModemInit(void)
TIM2->CR1 |= TIM_CR1_CEN; //enable DMA timer
markStep = 4000000 / (DAC_SINE_SIZE * markFreq) - 1;
spaceStep = 4000000 / (DAC_SINE_SIZE * spaceFreq) - 1;
markStep = 18000000 / (DAC_SINE_SIZE * markFreq) - 1;
spaceStep = 18000000 / (DAC_SINE_SIZE * spaceFreq) - 1;
baudRateStep = 18000000 / baudRate - 1;