Fixes #1964 and possibly #1963: TIM13 was used bootloader and delays.c, lcdInitFinish() was missing from lcdSetRefVolt(), simplified LCD init interface for Taranis, delaysInit() was missing from Bootloader

This commit is contained in:
Damjan Adamic
2014-12-31 18:54:37 +01:00
parent 9e434c49d5
commit 7b19afa96f
5 changed files with 19 additions and 51 deletions
+2 -28
View File
@@ -281,28 +281,6 @@ extern "C" void TIM8_TRG_COM_TIM14_IRQHandler()
TIM14->SR &= ~TIM_SR_UIF;
interrupt10ms();
}
void init_hw_timer()
{
// Timer13
RCC->APB1ENR |= RCC_APB1ENR_TIM13EN; // Enable clock
TIM13->ARR = 65535;
TIM13->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 10000000 - 1;// 0.1uS from 12MHz
TIM13->CCER = 0;
TIM13->CCMR1 = 0;
TIM13->EGR = 0;
TIM13->CR1 = 1;
}
// delay in units of 0.1 uS up to 6.5535 mS
void hw_delay(uint16_t time)
{
TIM13->CNT = 0;
TIM13->EGR = 1; // Re-start counter
while ( TIM13->CNT < time) {
// wait
}
}
#endif
FRESULT readBinDir(DIR *dj, FILINFO *fno)
@@ -507,13 +485,9 @@ int main()
#endif
#if defined(PCBTARANIS)
init_hw_timer(); //needed for lcdInitxxx()
lcdInitStart();
//nothing to do here
lcdInitFinish();
#else
lcdInit();
delaysInit(); //needed for lcdInit()
#endif
lcdInit();
#if defined(PCBSKY9X)
extern uint8_t OptrexDisplay;
+1 -3
View File
@@ -298,12 +298,10 @@ void lcd_img(coord_t x, coord_t y, const pm_uchar * img, uint8_t idx, LcdFlags a
void lcdSetRefVolt(unsigned char val);
void lcd_clear();
void lcdSetContrast();
void lcdInit();
#if defined(PCBTARANIS)
void lcdInitStart();
void lcdInitFinish();
void lcdOff();
#else
void lcdInit();
#define lcdOff()
#endif
+1 -1
View File
@@ -125,7 +125,7 @@ void boardInit()
keysInit();
adcInit();
delaysInit();
lcdInitStart();
lcdInit(); // delaysInit() must be called before
audioInit();
init2MhzTimer();
init5msTimer();
+6 -2
View File
@@ -111,10 +111,14 @@ extern uint16_t sessionTimer;
#define SLAVE_MODE() (g_model.trainerMode == TRAINER_MODE_SLAVE)
#define TRAINER_CONNECTED() (GPIO_ReadInputDataBit(GPIOTRNDET, PIN_TRNDET) == Bit_RESET)
void delaysInit(void);
#ifdef __cplusplus
extern "C" {
#endif
void delaysInit(void);
void delay_01us(uint16_t nb);
#ifdef __cplusplus
}
#endif
// SD driver
#if defined(SIMU)
+9 -17
View File
@@ -28,22 +28,16 @@
extern void hw_delay(uint16_t time);
#endif
#if !defined(BOOT)
bool lcdInitFinished = false;
#endif
bool lcdInitFinished = false;
void lcdInitFinish();
/*
In boot-loader: init_hw_timer() must be called before the first call to this function!
In opentx: delaysInit() must be called before the first call to this function!
delaysInit() must be called before the first call to this function!
*/
static void Delay(uint32_t ms)
{
while(ms--) {
#if !defined(BOOT)
delay_01us(10000);
#else
hw_delay(10000);
#endif
}
}
@@ -192,11 +186,9 @@ void lcdRefreshWait()
void lcdRefresh(bool wait)
{
#if !defined(BOOT)
if (!lcdInitFinished) {
lcdInitFinish();
}
#endif
//wait if previous DMA transfer still active
WAIT_FOR_DMA_END();
@@ -241,11 +233,9 @@ extern "C" void DMA1_Stream7_IRQHandler()
#else // #if defined(REVPLUS)
void lcdRefresh()
{
#if !defined(BOOT)
if (!lcdInitFinished) {
lcdInitFinish();
}
#endif
for (uint32_t y=0; y<LCD_H; y++) {
uint8_t *p = &displayBuf[y/2 * LCD_W];
@@ -371,7 +361,7 @@ void lcdOff()
Make sure that Delay() is functional before calling this function!
*/
void lcdInitStart()
void lcdInit()
{
LCD_BL_Config();
LCD_Hardware_Init();
@@ -385,13 +375,12 @@ void lcdInitStart()
}
/*
Finishes LCD initialization. Must be called after the lcdInitStart().
Finishes LCD initialization. It is called auto-magically when first LCD command is
issued by the other parts of the code.
*/
void lcdInitFinish()
{
#if !defined(BOOT)
lcdInitFinished = true;
#endif
#if defined(REVPLUS)
initLcdSpi();
@@ -425,6 +414,9 @@ void lcdInitFinish()
void lcdSetRefVolt(uint8_t val)
{
if (!lcdInitFinished) {
lcdInitFinish();
}
WAIT_FOR_DMA_END();
AspiCmd(0x81); //Set Vop
AspiCmd(val+CONTRAST_OFS); //0--255