From fb7525e42d6b708b097926911a16345fdfaf93f4 Mon Sep 17 00:00:00 2001 From: bsongis Date: Mon, 10 Dec 2012 08:11:05 +0000 Subject: [PATCH] [sky9x] REVC support --- src/Makefile | 7 +- src/board_sky9x.cpp | 159 +++++++++++++++++++------------------ src/board_sky9x.h | 11 ++- src/eeprom_arm.cpp | 2 +- src/general_menus.cpp | 4 +- src/model_menus.cpp | 9 ++- src/open9x.cpp | 18 ++--- src/open9x.h | 12 +-- src/simu.cpp | 18 ++--- src/sky9x/lcd_driver.cpp | 90 ++++++++++----------- src/sky9x/sound_driver.cpp | 48 ++++++----- src/statistics_views.cpp | 2 +- 12 files changed, 200 insertions(+), 180 deletions(-) diff --git a/src/Makefile b/src/Makefile index 00c28db33..4011b11d8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -55,7 +55,7 @@ PCB = STD # PCB revision # Values: REVA, REVB -PCBREV = REVB +PCBREV = # Enable JETI-Telemetry or FrSky Telemetry reception on UART0 # For this option you need to modify your hardware! @@ -245,9 +245,12 @@ ifeq ($(PCB), SKY9X) ifeq ($(PCBREV), REVA) CPPDEFS += -DREVA LDSCRIPT = sky9x/sam3s2c_flash.ld - else + else ifeq ($(PCBREV), REVB) CPPDEFS += -DREVB LDSCRIPT = sky9x/sam3s4c_flash.ld + else + CPPDEFS += -DREVC + LDSCRIPT = sky9x/sam3s4c_flash.ld endif TRGT = arm-none-eabi- MCU = cortex-m3 diff --git a/src/board_sky9x.cpp b/src/board_sky9x.cpp index 56041a004..0c676947f 100644 --- a/src/board_sky9x.cpp +++ b/src/board_sky9x.cpp @@ -60,14 +60,17 @@ volatile uint32_t lcdInputs; #define CPU_INT int32_t #define CPU_UINT uint32_t -#ifdef REVB +#if !defined(REVA) inline void init_soft_power() { // Configure RF_power (PC17) configure_pins( PIO_PC17, PIN_ENABLE | PIN_INPUT | PIN_PORTC | PIN_NO_PULLUP | PIN_PULLDOWN ) ; configure_pins( PIO_PA8, PIN_ENABLE | PIN_INPUT | PIN_PORTA | PIN_PULLUP ) ; // Enable bit A8 (Soft Power) } +#endif +#if defined(REVC) +bool bootloader_allowed = true; #endif uint32_t check_soft_power() @@ -76,7 +79,17 @@ uint32_t check_soft_power() return e_power_on; #endif -#ifdef REVB +#if defined(REVC) + if ( PIOC->PIO_PDSR & PIO_PC17 ) // Power on + { + return e_power_on ; + } + + if ( PIOA->PIO_PDSR & PIO_PA8 ) // Trainer plugged in + { + return e_power_trainer ; + } +#elif defined(REVB) if ( PIOC->PIO_PDSR & PIO_PC17 ) // Power on { return e_power_on ; @@ -111,7 +124,7 @@ uint32_t check_soft_power() // turn off soft power void soft_power_off() { -#ifdef REVB +#if !defined(REVA) configure_pins( PIO_PA8, PIN_ENABLE | PIN_OUTPUT | PIN_LOW | PIN_PORTA | PIN_NO_PULLUP ) ; #endif } @@ -128,9 +141,7 @@ extern "C" void sam_boot( void ) ; // PC21, PC19, PC15 (PPM2 output) inline void config_free_pins() { -#ifdef REVB - configure_pins( PIO_PB14, PIN_ENABLE | PIN_INPUT | PIN_PORTB | PIN_PULLUP ) ; -#else +#if defined(REVA) register Pio * pioptr = PIOA ; pioptr->PIO_PER = 0x03800000L ; // Enable bits A25,24,23 pioptr->PIO_ODR = 0x03800000L ; // Set as input @@ -145,37 +156,33 @@ inline void config_free_pins() pioptr->PIO_PER = 0x01700000L ; // Enable bits C24,22,21,20 pioptr->PIO_ODR = 0x01700000L ; // Set as input pioptr->PIO_PUER = 0x01700000L ; // Enable pullups +#else + configure_pins( PIO_PB14, PIN_ENABLE | PIN_INPUT | PIN_PORTB | PIN_PULLUP ) ; #endif } // Assumes PMC has already enabled clocks to ports inline void setup_switches() { -#ifdef REVB - configure_pins( 0x01808087, PIN_ENABLE | PIN_INPUT | PIN_PORTA | PIN_PULLUP ) ; -#else +#if defined(REVA) register Pio *pioptr = PIOA ; pioptr->PIO_PER = 0xF8008184 ; // Enable bits pioptr->PIO_ODR = 0xF8008184 ; // Set bits input pioptr->PIO_PUER = 0xF8008184 ; // Set bits with pullups -#endif -#ifdef REVB - configure_pins( 0x00000030, PIN_ENABLE | PIN_INPUT | PIN_PORTB | PIN_PULLUP ) ; -#else pioptr = PIOB ; pioptr->PIO_PER = 0x00000010 ; // Enable bits pioptr->PIO_ODR = 0x00000010 ; // Set bits input pioptr->PIO_PUER = 0x00000010 ; // Set bits with pullups -#endif -#ifdef REVB - configure_pins( 0x91114900, PIN_ENABLE | PIN_INPUT | PIN_PORTC | PIN_PULLUP ) ; -#else pioptr = PIOC ; pioptr->PIO_PER = 0x10014900 ; // Enable bits pioptr->PIO_ODR = 0x10014900 ; // Set bits input pioptr->PIO_PUER = 0x10014900 ; // Set bits with pullups +#else + configure_pins( 0x01808087, PIN_ENABLE | PIN_INPUT | PIN_PORTA | PIN_PULLUP ) ; + configure_pins( 0x00000030, PIN_ENABLE | PIN_INPUT | PIN_PORTB | PIN_PULLUP ) ; + configure_pins( 0x91114900, PIN_ENABLE | PIN_INPUT | PIN_PORTC | PIN_PULLUP ) ; #endif } @@ -484,10 +491,10 @@ inline void init_adc() padc = ADC ; padc->ADC_MR = 0x14110000 | timer ; // 0001 0100 0001 0001 xxxx xxxx 0000 0000 padc->ADC_ACR = ADC_ACR_TSON ; // Turn on temp sensor -#ifdef REVB - padc->ADC_CHER = 0x0000E33E ; // channels 1,2,3,4,5,8,9,13,14,15 -#else +#if defined(REVA) padc->ADC_CHER = 0x0000E23E ; // channels 1,2,3,4,5,9,13,14,15 +#else + padc->ADC_CHER = 0x0000E33E ; // channels 1,2,3,4,5,8,9,13,14,15 #endif padc->ADC_CGR = 0 ; // Gain = 1, all channels padc->ADC_COR = 0 ; // Single ended, 0 offset, all channels @@ -517,17 +524,17 @@ void init_pwm() MATRIX->CCFG_SYSIO |= 0x00000020L ; // Disable TDO let PB5 work! /* Configure PIO */ -#ifdef REVB - configure_pins( PIO_PA16, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_C | PIN_PORTA | PIN_NO_PULLUP ) ; -#else +#if defined(REVA) register Pio *pioptr = PIOB ; pioptr->PIO_PER = 0x00000020L ; // Enable bit B5 pioptr->PIO_ODR = 0x00000020L ; // set as input +#else + configure_pins( PIO_PA16, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_C | PIN_PORTA | PIN_NO_PULLUP ) ; #endif configure_pins( PIO_PC18, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_NO_PULLUP ) ; -#ifdef REVB +#if !defined(REVA) configure_pins( PIO_PC15, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_NO_PULLUP ) ; configure_pins( PIO_PC22, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_NO_PULLUP ) ; #endif @@ -548,7 +555,7 @@ void init_pwm() pwmptr->PWM_CH_NUM[0].PWM_CDTYUPD = 40 ; // Duty pwmptr->PWM_ENA = PWM_ENA_CHID0 ; // Enable channel 0 -#ifdef REVB +#if !defined(REVA) // PWM1 for PPM2 output 100Hz test pwmptr->PWM_CH_NUM[1].PWM_CMR = 0x0000000C ; // CLKB pwmptr->PWM_CH_NUM[1].PWM_CPDR = 100 ; // Period @@ -558,7 +565,7 @@ void init_pwm() pwmptr->PWM_ENA = PWM_ENA_CHID1 ; // Enable channel 1 #endif -#ifdef REVB +#if !defined(REVA) // PWM2 for HAPTIC drive 100Hz test pwmptr->PWM_CH_NUM[2].PWM_CMR = 0x0000000C ; // CLKB pwmptr->PWM_CH_NUM[2].PWM_CPDR = 100 ; // Period @@ -587,10 +594,10 @@ void init_pwm() // LCD_D7 PC1 #define LCD_DATA 0x000000FFL -#ifdef REVB -#define LCD_A0 0x00000080L -#else +#if defined(REVA) #define LCD_A0 0x00008000L +#else +#define LCD_A0 0x00000080L #endif #define LCD_RnW 0x00002000L #define LCD_E 0x00001000L @@ -678,13 +685,13 @@ void board_init() PMC->PMC_PCER0 = (1<PIO_PER = PIO_PA21 ; // Enable bit A21 (EXT3) pioptr->PIO_OER = PIO_PA21 ; // Set bit A21 as output pioptr->PIO_SODR = PIO_PA21 ; // Set bit A21 ON +#else + init_soft_power() ; #endif // pioptr->PIO_PUER = 0x80000000 ; // Enable pullup on bit A31 (EXIT) @@ -695,7 +702,7 @@ void board_init() // pioptr->PIO_OER = 0x80000000L ; // Set bit C31 as output // pioptr->PIO_SODR = 0x80000000L ; // Set bit C31 -#ifndef REVB +#if defined(REVA) // Configure RF_power (PC17) and PPM-jack-in (PC19), neither need pullups pioptr->PIO_PER = 0x000A0000L ; // Enable bit C19, C17 pioptr->PIO_ODR = 0x000A0000L ; // Set bits C19 and C17 as input @@ -704,25 +711,25 @@ void board_init() config_free_pins() ; // Next section configures the key inputs on the LCD data -#ifdef REVB - pioptr->PIO_PER = 0x0000003BL ; // Enable bits 1,3,4,5, 0 - pioptr->PIO_OER = PIO_PC0 ; // Set bit 0 output - pioptr->PIO_ODR = 0x0000003AL ; // Set bits 1, 3, 4, 5 input - pioptr->PIO_PUER = 0x0000003AL ; // Set bits 1, 3, 4, 5 with pullups -#else +#if defined(REVA) pioptr->PIO_PER = 0x0000003DL ; // Enable bits 2,3,4,5, 0 pioptr->PIO_OER = PIO_PC0 ; // Set bit 0 output pioptr->PIO_ODR = 0x0000003CL ; // Set bits 2, 3, 4, 5 input pioptr->PIO_PUER = 0x0000003CL ; // Set bits 2, 3, 4, 5 with pullups +#else + pioptr->PIO_PER = 0x0000003BL ; // Enable bits 1,3,4,5, 0 + pioptr->PIO_OER = PIO_PC0 ; // Set bit 0 output + pioptr->PIO_ODR = 0x0000003AL ; // Set bits 1, 3, 4, 5 input + pioptr->PIO_PUER = 0x0000003AL ; // Set bits 1, 3, 4, 5 with pullups #endif pioptr = PIOB ; -#ifdef REVB - pioptr->PIO_PUER = PIO_PB5 ; // Enable pullup on bit B5 (MENU) - pioptr->PIO_PER = PIO_PB5 ; // Enable bit B5 -#else +#if defined(REVA) pioptr->PIO_PUER = PIO_PB6 ; // Enable pullup on bit B6 (MENU) pioptr->PIO_PER = PIO_PB6 ; // Enable bit B6 +#else + pioptr->PIO_PUER = PIO_PB5 ; // Enable pullup on bit B5 (MENU) + pioptr->PIO_PER = PIO_PB5 ; // Enable bit B5 #endif setup_switches() ; @@ -790,7 +797,17 @@ uint32_t read_keys() y |= 0x02 << KEY_EXIT; if (PIOB->PIO_PDSR & 0x000000020) y |= 0x02 << KEY_ENTER; -#elif defined(REVB) +#elif defined(REVA) + y = (x & 0x00000060); + if (x & 0x00000008) + y |= 0x10; + if (x & 0x00000010) + y |= 0x08; + if (PIOA->PIO_PDSR & 0x80000000) + y |= 0x04; // EXIT + if (PIOB->PIO_PDSR & 0x000000040) + y |= 0x02; // MENU +#else y = (x & 0x00000020); // RIGHT if (x & 0x00000004) y |= 0x02 << KEY_UP; // UP @@ -802,16 +819,6 @@ uint32_t read_keys() y |= 0x02 << KEY_EXIT; // EXIT if (PIOB->PIO_PDSR & 0x000000020) y |= 0x02 << KEY_MENU; // MENU -#else - y = (x & 0x00000060); - if (x & 0x00000008) - y |= 0x10; - if (x & 0x00000010) - y |= 0x08; - if (PIOA->PIO_PDSR & 0x80000000) - y |= 0x04; // EXIT - if (PIOB->PIO_PDSR & 0x000000040) - y |= 0x02; // MENU #endif return y ; @@ -827,40 +834,40 @@ uint32_t read_trims() trima = PIOA->PIO_PDSR; // TRIM_LH_DOWN PA7 (PA23) -#ifdef REVB - if ((trima & 0x00800000) == 0) -#else +#if defined(REVA) if ( ( trima & 0x0080 ) == 0 ) +#else + if ((trima & 0x00800000) == 0) #endif { trims |= 1; } // TRIM_LV_DOWN PA27 (PA24) -#ifdef REVB - if ((trima & 0x01000000) == 0) -#else +#if defined(REVA) if ( ( trima & 0x08000000 ) == 0 ) +#else + if ((trima & 0x01000000) == 0) #endif { trims |= 4; } // TRIM_RV_UP PA30 (PA1) -#ifdef REVB - if ((trima & 0x00000002) == 0) -#else +#if defined(REVA) if ( ( trima & 0x40000000 ) == 0 ) +#else + if ((trima & 0x00000002) == 0) #endif { trims |= 0x20; } // TRIM_RH_DOWN PA29 (PA0) -#ifdef REVB - if ((trima & 0x00000001) == 0) -#else +#if defined(REVA) if ( ( trima & 0x20000000 ) == 0 ) +#else + if ((trima & 0x00000001) == 0) #endif { trims |= 0x40; @@ -1020,12 +1027,12 @@ extern uint32_t keyState(EnumKeys enuk) c = PIOC->PIO_PDSR ; switch ((uint8_t) enuk) { -#ifdef REVB - case SW_ELE: - xxx = c & 0x80000000; // ELE_DR PC31 -#else +#if defined(REVA) case SW_ELE: xxx = a & 0x00000100; // ELE_DR PA8 +#else + case SW_ELE: + xxx = c & 0x80000000; // ELE_DR PC31 #endif break; @@ -1055,12 +1062,12 @@ extern uint32_t keyState(EnumKeys enuk) xxx = c & 0x00010000; // SW_GEAR PC16 break; -#ifdef REVB - case SW_THR: - xxx = c & 0x00100000; // SW_TCUT PC20 -#else +#if defined(REVA) case SW_THR: xxx = a & 0x10000000; // SW_TCUT PA28 +#else + case SW_THR: + xxx = c & 0x00100000; // SW_TCUT PC20 #endif break; @@ -1114,7 +1121,7 @@ void read_9_adc() Analog_values[6] = ADC->ADC_CDR13; Analog_values[7] = ADC->ADC_CDR14; -#ifdef REVB +#if defined(REVA) Analog_values[8] = ADC->ADC_CDR8 ; #endif @@ -1293,7 +1300,7 @@ void usb_mode() sam_boot() ; } -#if defined(REVB) +#if !defined(REVA) uint16_t getCurrent() { static uint16_t Current ; diff --git a/src/board_sky9x.h b/src/board_sky9x.h index a241d92dd..e3e5b9ac3 100644 --- a/src/board_sky9x.h +++ b/src/board_sky9x.h @@ -91,7 +91,7 @@ extern uint32_t read_keys(); #define DBLKEYS_PRESSED_RGT_UP(i) ((in & (0x20 + 0x10)) == (0x20 + 0x10)) #define DBLKEYS_PRESSED_LFT_DWN(i) ((in & (0x40 + 0x08)) == (0x40 + 0x08)) -#if defined(REVB) +#if !defined(REVA) extern uint16_t Current_analogue; extern uint16_t Current_max; extern uint32_t Current_accumulator; @@ -99,6 +99,15 @@ extern uint32_t Current_used; extern uint16_t sessionTimer; #endif +#if defined(REVC) +extern bool bootloader_allowed; +#define SKIP_INIT() (check_soft_power() == e_power_off || (bootloader_allowed && usbPlugged())) +#define BOOTLOADER_REQ() (bootloader_allowed && usbPlugged()) +#else +#define SKIP_INIT() (check_soft_power() >= e_power_usb) +#define BOOTLOADER_REQ() (check_soft_power() == e_power_usb) +#endif + #define SLAVE_MODE() (check_soft_power() == e_power_trainer) #define JACK_PPM_OUT() PIOC->PIO_PDR = PIO_PC22 #define JACK_PPM_IN() PIOC->PIO_PER = PIO_PC22 diff --git a/src/eeprom_arm.cpp b/src/eeprom_arm.cpp index 6a44c62ec..96fccf6b1 100644 --- a/src/eeprom_arm.cpp +++ b/src/eeprom_arm.cpp @@ -542,7 +542,7 @@ void eeReadAll() modelDefault(0); - if (check_soft_power() < e_power_usb) { // Usb on or power off + if (!SKIP_INIT()) { /* we remove all models */ for (uint32_t i=0; i 1) m_posHorz = 1; int8_t x = limit((int8_t)0, (int8_t)g_model.ppmNCH, (int8_t)2); @@ -833,10 +833,13 @@ void menuModelSetup(uint8_t event) if (attr && (editMode>0 || p1valdiff || (protocol>PROTO_PPMSIM && !IS_DSM2_PROTOCOL(protocol)))) { switch (m_posHorz) { case 0: - CHECK_INCDEC_MODELVAR(event, g_model.protocol,0, PROTO_MAX-1); + CHECK_INCDEC_MODELVAR(event, g_model.protocol, 0, PROTO_MAX-1); +#if defined(DSM2_SERIAL) + if (checkIncDec_Ret) resetProto(); +#endif break; case 1: -#ifdef DSM2 +#if defined(DSM2) if (protocol == PROTO_DSM2) CHECK_INCDEC_MODELVAR(event, g_model.ppmNCH, 0, 2); else diff --git a/src/open9x.cpp b/src/open9x.cpp index d9b14c8e6..473e995e6 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -1194,7 +1194,7 @@ void doSplash() #endif if (keyDown() || (tsum!=inacSum)) return; // wait for key release - if (check_soft_power() > e_power_trainer) return; // usb and power off + if (SKIP_INIT()) return; #if !defined(PCBSTD) if (curTime < get_tmr10ms()) { @@ -1263,7 +1263,7 @@ void checkTHR() int16_t v = thrAnaIn(thrchn); - if (check_soft_power() > e_power_trainer || v<=lowLim || keyDown()) + if (SKIP_INIT() || v<=lowLim || keyDown()) break; checkBacklight(); @@ -1307,7 +1307,7 @@ void checkSwitches() last_bad_switches = switches_states; } - if (keyDown() || check_soft_power() > e_power_trainer) return; // Usb on or power off + if (keyDown() || SKIP_INIT()) return; // Usb on or power off checkBacklight(); @@ -1325,7 +1325,7 @@ void alert(const pm_char * t, const pm_char *s MESSAGE_SOUND_ARG) { SIMU_SLEEP(1); - if (check_soft_power() >= e_power_usb) return; // Usb on or power off + if (SKIP_INIT()) return; if (keyDown()) return; // wait for key release @@ -1484,7 +1484,7 @@ uint8_t checkTrim(uint8_t event) #endif } -#if defined(PCBSKY9X) && defined(REVB) +#if defined(PCBSKY9X) && !defined(REVA) uint16_t Current_analogue; uint16_t Current_max; uint32_t Current_accumulator; @@ -1525,7 +1525,7 @@ uint16_t anaIn(uint8_t chan) // Google Translate (German): // if table already, then it must also be worthwhile #if defined(PCBSKY9X) static const uint8_t crossAna[]={1,5,7,0,4,6,2,3,8}; -#if defined(REVB) +#if !defined(REVA) if ( chan == 8 ) { return Current_analogue ; } @@ -2511,7 +2511,7 @@ FORCEINLINE void doMixerCalculations() getADC(); -#if defined(PCBSKY9X) && defined(REVB) && !defined(SIMU) +#if defined(PCBSKY9X) && !defined(REVA) && !defined(SIMU) Current_analogue = ( Current_analogue * 31 + s_anaFilt[8] ) >> 5 ; if (Current_analogue > Current_max) Current_max = Current_analogue ; @@ -3382,7 +3382,7 @@ inline void open9xInit(OPEN9X_INIT_ARGS) startPulses(); - if (check_soft_power() <= e_power_trainer) { + if (!SKIP_INIT()) { wdt_enable(WDTO_500MS); } } @@ -3533,7 +3533,7 @@ int main(void) #endif #if defined(PCBSKY9X) - if (check_soft_power() == e_power_usb) { + if (BOOTLOADER_REQ()) { soft_power_off(); // Only turn power off if necessary #if defined(HAPTIC) diff --git a/src/open9x.h b/src/open9x.h index 47e8e2622..0dfc8c248 100644 --- a/src/open9x.h +++ b/src/open9x.h @@ -721,14 +721,14 @@ enum PowerState { uint32_t keyState(EnumKeys enuk); uint32_t check_soft_power(); #else +bool keyState(EnumKeys enuk); #if defined(PCBGRUVIN9X) uint8_t check_soft_power(); #else #define check_soft_power() (e_power_on) #endif - -bool keyState(EnumKeys enuk); #endif + void readKeysAndTrims(); uint16_t evalChkSum(); @@ -911,13 +911,13 @@ extern void backlightOn(); #if defined (PCBSKY9X) #define __BACKLIGHT_ON (PWM->PWM_CH_NUM[0].PWM_CDTY = g_eeGeneral.backlightBright) #define __BACKLIGHT_OFF (PWM->PWM_CH_NUM[0].PWM_CDTY = 100) -#ifdef REVB -#define NUMBER_ANALOG 9 -#else +#if defined(REVA) #define NUMBER_ANALOG 8 +#else +#define NUMBER_ANALOG 9 +#endif extern uint16_t Analog_values[NUMBER_ANALOG] ; void read_9_adc(void ) ; -#endif #elif defined (PCBGRUVIN9X) #define SPEAKER_ON TCCR0A |= (1 << COM0A0) #define SPEAKER_OFF TCCR0A &= ~(1 << COM0A0) diff --git a/src/simu.cpp b/src/simu.cpp index 9d2466409..e729a902e 100644 --- a/src/simu.cpp +++ b/src/simu.cpp @@ -239,7 +239,15 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*) if(hasFocus()) { -#if defined(PCBX9D) || defined(REVB) +#if defined(PCBSKY9X) && defined(REVA) +#define ERSKY9X_RETURN_MASK (0x40) +#define ERSKY9X_EXIT_MASK (0x80000000) +#define ERSKY9X_EXIT_PIO PIOA +#define ERSKY9X_UP_MASK (0x08 >> 1) +#define ERSKY9X_RIGHT_MASK (0x20 >> 1) +#define ERSKY9X_DOWN_MASK (0x10 >> 1) +#define ERSKY9X_LEFT_MASK (0x40 >> 1) +#else #define ERSKY9X_RETURN_MASK (0x20) #define ERSKY9X_EXIT_MASK (0x01000000) #define ERSKY9X_EXIT_PIO PIOC @@ -249,14 +257,6 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*) #define ERSKY9X_LEFT_MASK (0x10 >> 1) #define ERSKY9X_MENU_MASK (0x04 >> 1) #define ERSKY9X_PAGE_MASK (0x40 >> 1) -#else -#define ERSKY9X_RETURN_MASK (0x40) -#define ERSKY9X_EXIT_MASK (0x80000000) -#define ERSKY9X_EXIT_PIO PIOA -#define ERSKY9X_UP_MASK (0x08 >> 1) -#define ERSKY9X_RIGHT_MASK (0x20 >> 1) -#define ERSKY9X_DOWN_MASK (0x10 >> 1) -#define ERSKY9X_LEFT_MASK (0x40 >> 1) #endif static uint64_t keys1[]={ KEY_Return, INP_B_KEY_MEN, INP_L_KEY_MEN, (uint64_t)PIOB, ERSKY9X_RETURN_MASK, diff --git a/src/sky9x/lcd_driver.cpp b/src/sky9x/lcd_driver.cpp index 75c12a965..985c13137 100644 --- a/src/sky9x/lcd_driver.cpp +++ b/src/sky9x/lcd_driver.cpp @@ -49,7 +49,7 @@ // LCD_D7 PC1 #define LCD_DATA 0x000000FFL -#ifdef REVB +#if !defined(REVA) #define LCD_A0 0x00000080L #else #define LCD_A0 0x00008000L @@ -60,7 +60,7 @@ #define LCD_RES 0x08000000L // Lookup table for prototype board -#ifndef REVB +#if defined(REVA) const uint8_t Lcd_lookup[] = { 0x00,0x01,0x80,0x81,0x40,0x41,0xC0,0xC1,0x20,0x21,0xA0,0xA1,0x60,0x61,0xE0,0xE1, @@ -87,18 +87,18 @@ void lcdSendCtl(uint8_t val) register Pio *pioptr ; // register uint32_t x ; -#ifdef REVB - pioptr = PIOC ; - pioptr->PIO_CODR = LCD_CS1 ; // Select LCD - PIOA->PIO_CODR = LCD_A0 ; - pioptr->PIO_CODR = LCD_RnW ; // Write - pioptr->PIO_ODSR = val ; -#else +#if defined(REVA) pioptr = PIOC ; pioptr->PIO_CODR = LCD_CS1 ; // Select LCD pioptr->PIO_CODR = LCD_A0 ; // Control pioptr->PIO_CODR = LCD_RnW ; // Write pioptr->PIO_ODSR = Lcd_lookup[val] ; +#else + pioptr = PIOC ; + pioptr->PIO_CODR = LCD_CS1 ; // Select LCD + PIOA->PIO_CODR = LCD_A0 ; + pioptr->PIO_CODR = LCD_RnW ; // Write + pioptr->PIO_ODSR = val ; #endif pioptr->PIO_SODR = LCD_E ; // Start E pulse @@ -109,12 +109,12 @@ void lcdSendCtl(uint8_t val) // Wait } pioptr->PIO_CODR = LCD_E ; // End E pulse -#ifdef REVB - PIOA->PIO_SODR = LCD_A0 ; // Data -#else +#if defined(REVA) pioptr->PIO_SODR = LCD_A0 ; // Data +#else + PIOA->PIO_SODR = LCD_A0 ; // Data #endif - pioptr->PIO_SODR = LCD_CS1 ; // Deselect LCD + pioptr->PIO_SODR = LCD_CS1 ; // Deselect LCD } void lcd_init() @@ -123,7 +123,14 @@ void lcd_init() // /home/thus/txt/datasheets/lcd/KS0713.pdf // ~/txt/flieger/ST7565RV17.pdf from http://www.glyn.de/content.asp?wdid=132&sid= -#ifdef REVB +#if defined(REVA) + pioptr = PIOC ; + pioptr->PIO_PER = 0x0C00B0FFL ; // Enable bits 27,26,15,13,12,7-0 + pioptr->PIO_CODR = LCD_E | LCD_RnW | LCD_A0 ; + pioptr->PIO_SODR = LCD_RES | LCD_CS1 ; + pioptr->PIO_OER = 0x0C00B0FFL ; // Set bits 27,26,15,13,12,7-0 output + pioptr->PIO_OWER = 0x000000FFL ; // Allow write to ls 8 bits in ODSR +#else configure_pins( LCD_A0, PIN_ENABLE | PIN_LOW | PIN_OUTPUT | PIN_PORTA | PIN_NO_PULLUP ) ; pioptr = PIOC ; pioptr->PIO_PER = 0x0C0030FFL ; // Enable bits 27,26,13,12,7-0 @@ -131,13 +138,6 @@ void lcd_init() pioptr->PIO_SODR = LCD_RES | LCD_CS1 ; pioptr->PIO_OER = 0x0C0030FFL ; // Set bits 27,26,13,12,7-0 output pioptr->PIO_OWER = 0x000000FFL ; // Allow write to ls 8 bits in ODSR -#else - pioptr = PIOC ; - pioptr->PIO_PER = 0x0C00B0FFL ; // Enable bits 27,26,15,13,12,7-0 - pioptr->PIO_CODR = LCD_E | LCD_RnW | LCD_A0 ; - pioptr->PIO_SODR = LCD_RES | LCD_CS1 ; - pioptr->PIO_OER = 0x0C00B0FFL ; // Set bits 27,26,15,13,12,7-0 output - pioptr->PIO_OWER = 0x000000FFL ; // Allow write to ls 8 bits in ODSR #endif pioptr->PIO_CODR = LCD_RES ; // Reset LCD @@ -166,14 +166,14 @@ void lcd_init() lcdSendCtl(0xAF); //DON = 1: display ON // g_eeGeneral.contrast = 0x22; -#ifdef REVB - pioptr->PIO_ODR = 0x0000003AL ; // Set bits 1, 3, 4, 5 input - pioptr->PIO_PUER = 0x0000003AL ; // Set bits 1, 3, 4, 5 with pullups - pioptr->PIO_ODSR = 0 ; // Drive D0 low -#else +#if defined(REVA) pioptr->PIO_ODR = 0x0000003CL ; // Set bits 2, 3, 4, 5 input pioptr->PIO_PUER = 0x0000003CL ; // Set bits 2, 3, 4, 5 with pullups pioptr->PIO_ODSR = 0 ; // Drive D0 low +#else + pioptr->PIO_ODR = 0x0000003AL ; // Set bits 1, 3, 4, 5 input + pioptr->PIO_PUER = 0x0000003AL ; // Set bits 1, 3, 4, 5 with pullups + pioptr->PIO_ODSR = 0 ; // Drive D0 low #endif } @@ -195,12 +195,12 @@ void lcdSetRefVolt(uint8_t val) } lcdSendCtl(val); -#ifdef REVB - pioptr->PIO_ODR = 0x0000003AL ; // Set bits 1, 3, 4, 5 input - pioptr->PIO_PUER = 0x0000003AL ; // Set bits 1, 3, 4, 5 with pullups -#else +#if defined(REVA) pioptr->PIO_ODR = 0x0000003CL ; // Set bits 2, 3, 4, 5 input pioptr->PIO_PUER = 0x0000003CL ; // Set bits 2, 3, 4, 5 with pullups +#else + pioptr->PIO_ODR = 0x0000003AL ; // Set bits 1, 3, 4, 5 input + pioptr->PIO_PUER = 0x0000003AL ; // Set bits 1, 3, 4, 5 with pullups #endif pioptr->PIO_ODSR = lcdInputs; // Drive D0 low @@ -215,14 +215,14 @@ void refreshDisplay() register uint32_t x; register uint32_t z; register uint32_t ebit; -#ifndef REVB +#if defined(REVA) register uint8_t *lookup; lookup = (uint8_t *) Lcd_lookup; #endif ebit = LCD_E; -#ifdef REVB +#if !defined(REVA) pioptr = PIOA; pioptr->PIO_PER = 0x00000080; // Enable bit 7 (LCD-A0) pioptr->PIO_OER = 0x00000080;// Set bit 7 output @@ -233,10 +233,10 @@ void refreshDisplay() lcdLock = 1 ; pioptr = PIOC; -#ifdef REVB - pioptr->PIO_OER = 0x0C0030FFL; // Set bits 27,26,15,13,12,7-0 output -#else +#if defined(REVA) pioptr->PIO_OER = 0x0C00B0FFL; // Set bits 27,26,15,13,12,7-0 output +#else + pioptr->PIO_OER = 0x0C0030FFL; // Set bits 27,26,15,13,12,7-0 output #endif for (y = 0; y < 8; y++) { lcdSendCtl(g_eeGeneral.optrexDisplay ? 0 : 0x04); @@ -247,10 +247,10 @@ void refreshDisplay() PIOA->PIO_SODR = LCD_A0; // Data pioptr->PIO_CODR = LCD_RnW; // Write -#ifdef REVB - x = *p; -#else +#if defined(REVA) x = lookup[*p]; +#else + x = *p; #endif for (z = 0; z < DISPLAY_W; z += 1) { @@ -267,10 +267,10 @@ void refreshDisplay() pioptr->PIO_SODR = ebit; // Start E pulse // Need a delay here (250nS) p += 1; -#ifdef REVB - x = *p; -#else +#if defined(REVA) x = lookup[*p]; +#else + x = *p; #endif // TC0->TC_CHANNEL[0].TC_CCR = 5 ; // Enable clock and trigger it (may only need trigger) // while ( TC0->TC_CHANNEL[0].TC_CV < 3 ) // Value depends on MCK/2 (used 6MHz) @@ -283,12 +283,12 @@ void refreshDisplay() } pioptr->PIO_ODSR = 0xFF ; // Drive lines high -#ifdef REVB - pioptr->PIO_PUER = 0x0000003AL ; // Set bits 1, 3, 4, 5 with pullups - pioptr->PIO_ODR = 0x0000003AL ; // Set bits 1, 3, 4, 5 input -#else +#if defined(REVA) pioptr->PIO_PUER = 0x0000003CL ; // Set bits 2, 3, 4, 5 with pullups pioptr->PIO_ODR = 0x0000003CL ; // Set bits 2, 3, 4, 5 input +#else + pioptr->PIO_PUER = 0x0000003AL ; // Set bits 1, 3, 4, 5 with pullups + pioptr->PIO_ODR = 0x0000003AL ; // Set bits 1, 3, 4, 5 input #endif pioptr->PIO_ODSR = lcdInputs; // Drive D0 low diff --git a/src/sky9x/sound_driver.cpp b/src/sky9x/sound_driver.cpp index 960625534..bfd8bdfc8 100644 --- a/src/sky9x/sound_driver.cpp +++ b/src/sky9x/sound_driver.cpp @@ -62,18 +62,28 @@ void startSound() init_twi() ; pioptr = PIOA ; -#ifdef REVB - pioptr->PIO_CODR = 0x02000000L ; // Set bit A25 OFF - pioptr->PIO_PER = 0x02000000L ; // Enable bit A25 (Stock buzzer) - pioptr->PIO_OER = 0x02000000L ; // Set bit A25 as output -#else +#if defined(REVA) pioptr->PIO_CODR = 0x00010000L ; // Set bit A16 OFF pioptr->PIO_PER = 0x00010000L ; // Enable bit A16 (Stock buzzer) pioptr->PIO_OER = 0x00010000L ; // Set bit A16 as output +#else + pioptr->PIO_CODR = 0x02000000L ; // Set bit A25 OFF + pioptr->PIO_PER = 0x02000000L ; // Enable bit A25 (Stock buzzer) + pioptr->PIO_OER = 0x02000000L ; // Set bit A25 as output #endif } -#ifdef REVB +#if defined(REVA) +void buzzer_on() +{ + PIOA->PIO_SODR = 0x00010000L ; // Set bit A16 ON +} + +void buzzer_off() +{ + PIOA->PIO_CODR = 0x00010000L ; // Set bit A16 ON +} +#else void buzzer_on() { PIOA->PIO_SODR = 0x02000000L ; // Set bit A25 ON @@ -83,16 +93,6 @@ void buzzer_off() { PIOA->PIO_CODR = 0x02000000L ; // Set bit A25 ON } -#else -void buzzer_on() -{ - PIOA->PIO_SODR = 0x00010000L ; // Set bit A16 ON -} - -void buzzer_off() -{ - PIOA->PIO_CODR = 0x00010000L ; // Set bit A16 ON -} #endif void buzzer_sound( uint8_t time ) @@ -153,7 +153,7 @@ void start_timer1() } -// Configure DAC1 (or DAC0 for REVB) +// Configure DAC0 (or DAC1 for REVA) // Not sure why PB14 has not be allocated to the DAC, although it is an EXTRA function // So maybe it is automatically done void initDac() @@ -162,16 +162,14 @@ void initDac() PMC->PMC_PCER0 |= 0x40000000L ; // Enable peripheral clock to DAC dacptr = DACC ; -#ifdef REVB +#if defined(REVA) + dacptr->DACC_MR = 0x0B010215L ; // 0000 1011 0000 0001 0000 0010 0001 0101 + dacptr->DACC_CHER = 2 ; // Enable channel 1 +#else dacptr->DACC_MR = 0x0B000215L ; // 0000 1011 0000 0001 0000 0010 0001 0101 -#else - dacptr->DACC_MR = 0x0B010215L ; // 0000 1011 0000 0001 0000 0010 0001 0101 -#endif -#ifdef REVB - dacptr->DACC_CHER = 1 ; // Enable channel 0 -#else - dacptr->DACC_CHER = 2 ; // Enable channel 1 + dacptr->DACC_CHER = 1 ; // Enable channel 0 #endif + dacptr->DACC_CDR = 2048 ; // Half amplitude // Data for PDC must NOT be in flash, PDC needs a RAM source. dacptr->DACC_TPR = CONVERT_PTR(Sine_values); diff --git a/src/statistics_views.cpp b/src/statistics_views.cpp index 9e14dc9d0..986336c05 100644 --- a/src/statistics_views.cpp +++ b/src/statistics_views.cpp @@ -121,7 +121,7 @@ void menuStatisticsDebug(uint8_t event) } #if defined(PCBSKY9X) -#if defined(REVB) +#if !defined(REVA) lcd_putsLeft(1*FH, STR_CPU_CURRENT); putsTelemetryValue(MENU_DEBUG_COL_OFS, 1*FH, getCurrent(), UNIT_MILLIAMPS, 0); uint32_t current_scale = 488 + g_eeGeneral.currentCalib;