Fixes #3492: delay_01us() and delay_ms() functions were generating wrong delays (6 times shorter on Taranis, 8 times on X9E and Horus). Important delays adjusted, function names and code unified. (#3496)
This commit is contained in:
committed by
Bertrand Songis
parent
98798c1e42
commit
59653f9ca6
@@ -165,9 +165,9 @@ uint32_t adcReadNextSPIChannel(uint8_t index)
|
||||
//
|
||||
// delay value A5 change Time needed for adcRead()
|
||||
// 1 16 0.154ms - 0.156ms
|
||||
// 300 5 0.197ms - 0.199ms
|
||||
// 500 0 0.225ms - 0.243ms
|
||||
delay_01us(300);
|
||||
// 38 5 0.197ms - 0.199ms
|
||||
// 62 0 0.225ms - 0.243ms
|
||||
delay_01us(40);
|
||||
|
||||
for (uint8_t i = 0; i < 4; i++) {
|
||||
ADC_CS_LOW();
|
||||
|
||||
@@ -112,7 +112,7 @@ extern "C" {
|
||||
#endif
|
||||
void delaysInit(void);
|
||||
void delay_01us(uint16_t nb);
|
||||
void delay_ms(uint16_t nb);
|
||||
void delay_ms(uint32_t ms);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -25,25 +25,23 @@ void delaysInit(void)
|
||||
// Timer13
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM13EN; // Enable clock
|
||||
TIM13->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 10000000 - 1; // 0.1uS
|
||||
TIM13->CCER = 0;
|
||||
TIM13->CCMR1 = 0;
|
||||
TIM13->CR1 = 0x02;
|
||||
TIM13->DIER = 0;
|
||||
}
|
||||
|
||||
void delay_01us(uint16_t nb)
|
||||
{
|
||||
TIM13->EGR = 1;
|
||||
TIM13->CNT = 0;
|
||||
TIM13->CR1 = 0x03;
|
||||
while (TIM13->CNT < nb);
|
||||
TIM13->CR1 = 0x02;
|
||||
TIM13->ARR = 0xFFFF;
|
||||
TIM13->EGR = TIM_EGR_UG; // generate update event
|
||||
}
|
||||
|
||||
void delay_ms(uint16_t nb)
|
||||
void delay_01us(uint16_t nb)
|
||||
{
|
||||
uint16_t i;
|
||||
for (i=0; i<nb; i++) {
|
||||
delay_01us(10000);
|
||||
TIM13->EGR = TIM_EGR_UG; // generate update event (this also resets counter)
|
||||
TIM13->SR &= ~TIM_SR_CC1IF; // clear CC flag
|
||||
TIM13->CCR1 = nb; // set CC value
|
||||
TIM13->CR1 |= TIM_CR1_CEN; // start timer
|
||||
while((TIM13->SR & TIM_SR_CC1IF) == 0);
|
||||
TIM13->CR1 &= ~TIM_CR1_CEN; // stop timer
|
||||
}
|
||||
|
||||
void delay_ms(uint32_t ms)
|
||||
{
|
||||
while(ms--) {
|
||||
delay_01us(10500); // delay adjusted for the fact that ideal prescaler would be 8.4 but 8 is used
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ extern "C" {
|
||||
#endif
|
||||
void delaysInit(void);
|
||||
void delay_01us(uint16_t nb);
|
||||
void delay(uint32_t ms);
|
||||
void delay_ms(uint32_t ms);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
/*
|
||||
* Copyright (C) OpenTX
|
||||
*
|
||||
* Based on code named
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) OpenTX
|
||||
*
|
||||
* Based on code named
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "board_taranis.h"
|
||||
|
||||
void delaysInit(void)
|
||||
@@ -25,22 +25,21 @@ void delaysInit(void)
|
||||
// Timer13
|
||||
RCC->APB1ENR |= RCC_APB1ENR_TIM13EN; // Enable clock
|
||||
TIM13->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 10000000 - 1; // 0.1uS
|
||||
TIM13->CCER = 0;
|
||||
TIM13->CCMR1 = 0;
|
||||
TIM13->CR1 = 0x02;
|
||||
TIM13->DIER = 0;
|
||||
}
|
||||
|
||||
void delay_01us(uint16_t nb)
|
||||
{
|
||||
TIM13->EGR = 1;
|
||||
TIM13->CNT = 0;
|
||||
TIM13->CR1 = 0x03;
|
||||
while(TIM13->CNT < nb);
|
||||
TIM13->CR1 = 0x02;
|
||||
TIM13->ARR = 0xFFFF;
|
||||
TIM13->EGR = TIM_EGR_UG; // generate update event
|
||||
}
|
||||
|
||||
void delay(uint32_t ms)
|
||||
void delay_01us(uint16_t nb)
|
||||
{
|
||||
TIM13->EGR = TIM_EGR_UG; // generate update event (this also resets counter)
|
||||
TIM13->SR &= ~TIM_SR_CC1IF; // clear CC flag
|
||||
TIM13->CCR1 = nb; // set CC value
|
||||
TIM13->CR1 |= TIM_CR1_CEN; // start timer
|
||||
while((TIM13->SR & TIM_SR_CC1IF) == 0);
|
||||
TIM13->CR1 &= ~TIM_CR1_CEN; // stop timer
|
||||
}
|
||||
|
||||
void delay_ms(uint32_t ms)
|
||||
{
|
||||
while(ms--) {
|
||||
delay_01us(10000);
|
||||
|
||||
@@ -70,7 +70,7 @@ void initLcdSpi()
|
||||
static void LCD_Init()
|
||||
{
|
||||
WriteCommand(0x2F); //Internal pump control
|
||||
delay(20);
|
||||
delay_ms(20);
|
||||
WriteCommand(0x24); //Temperature compensation
|
||||
WriteCommand(0xE9); //set bias=1/10
|
||||
WriteCommand(0x81); //Set Vop
|
||||
@@ -105,7 +105,7 @@ static void LCD_Init()
|
||||
static void LCD_Init()
|
||||
{
|
||||
AspiCmd(0x2B); //Panel loading set ,Internal VLCD.
|
||||
delay(20);
|
||||
delay_ms(20);
|
||||
AspiCmd(0x25); //Temperature compensation curve definition: 0x25 = -0.05%/oC
|
||||
AspiCmd(0xEA); //set bias=1/10 :Command table NO.27
|
||||
AspiCmd(0x81); //Set Vop
|
||||
@@ -349,7 +349,7 @@ void lcdOff()
|
||||
to re-init LCD without any delay
|
||||
*/
|
||||
AspiCmd(0xAE); //LCD sleep
|
||||
delay(3); //wait for caps to drain
|
||||
delay_ms(3); //wait for caps to drain
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -357,7 +357,7 @@ void lcdOff()
|
||||
soon as possible after the reset because LCD takes a lot of
|
||||
time to properly power-on.
|
||||
|
||||
Make sure that delay() is functional before calling this function!
|
||||
Make sure that delay_ms() is functional before calling this function!
|
||||
*/
|
||||
void lcdInit()
|
||||
{
|
||||
@@ -367,7 +367,7 @@ void lcdInit()
|
||||
|
||||
//reset LCD module
|
||||
LCD_RST_LOW();
|
||||
delay(1); // only 3 us needed according to data-sheet, we use 1 ms
|
||||
delay_ms(1); // only 3 us needed according to data-sheet, we use 1 ms
|
||||
LCD_RST_HIGH();
|
||||
}
|
||||
|
||||
@@ -404,13 +404,13 @@ void lcdInitFinish()
|
||||
#if !defined(BOOT)
|
||||
while(g_tmr10ms < (RESET_WAIT_DELAY_MS/10)) {}; //wait measured from the power-on
|
||||
#else
|
||||
delay(RESET_WAIT_DELAY_MS);
|
||||
delay_ms(RESET_WAIT_DELAY_MS);
|
||||
#endif
|
||||
}
|
||||
|
||||
LCD_Init();
|
||||
AspiCmd(0xAF); //dc2=1, IC into exit SLEEP MODE, dc3=1 gray=ON, dc4=1 Green Enhanc mode disabled
|
||||
delay(20); //needed for internal DC-DC converter startup
|
||||
delay_ms(20); //needed for internal DC-DC converter startup
|
||||
}
|
||||
|
||||
void lcdSetRefVolt(uint8_t val)
|
||||
|
||||
Reference in New Issue
Block a user