From 39118453daf31937e5c885935663a76cfe7e0c7c Mon Sep 17 00:00:00 2001 From: bsongis Date: Tue, 17 Jun 2014 15:37:53 +0200 Subject: [PATCH] Code cleanup on Sky9x pulses --- radio/src/gui/menu_model.cpp | 43 ++++---- radio/src/opentx.h | 16 +-- radio/src/pulses/ppm_arm.cpp | 4 +- radio/src/targets/sky9x/board_sky9x.h | 17 ++-- radio/src/targets/sky9x/pulses_driver.cpp | 118 +++++++++++++++++----- 5 files changed, 136 insertions(+), 62 deletions(-) diff --git a/radio/src/gui/menu_model.cpp b/radio/src/gui/menu_model.cpp index ebea503a7..a53a47e74 100644 --- a/radio/src/gui/menu_model.cpp +++ b/radio/src/gui/menu_model.cpp @@ -915,14 +915,11 @@ enum menuModelSetupItems { ITEM_MODEL_EXTERNAL_MODULE_CHANNELS, ITEM_MODEL_EXTERNAL_MODULE_BIND, ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE, -#if defined(PCBSKY9X) && !defined(REVX) +#if defined(PCBSKY9X) && defined(REVB) ITEM_MODEL_EXTRA_MODULE_LABEL, ITEM_MODEL_EXTRA_MODULE_CHANNELS, ITEM_MODEL_EXTRA_MODULE_BIND, #endif - ITEM_MODEL_TRAINER_LABEL, - ITEM_MODEL_TRAINER_CHANNELS, - ITEM_MODEL_TRAINER_SETTINGS, #else ITEM_MODEL_PPM1_PROTOCOL, ITEM_MODEL_PPM1_PARAMS, @@ -977,10 +974,10 @@ void onModelSetupBitmapMenu(const char *result) #if defined(PCBTARANIS) #define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_TRAINER_LABEL ? TRAINER_MODULE : (k>=ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE)) -#elif defined(PCBSKY9X) && defined(REVX) - #define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_TRAINER_LABEL ? TRAINER_MODULE : EXTERNAL_MODULE) +#elif defined(PCBSKY9X) && defined(REVB) + #define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_EXTRA_MODULE_LABEL ? EXTRA_MODULE : EXTERNAL_MODULE) #else - #define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_TRAINER_LABEL ? TRAINER_MODULE : (k>=ITEM_MODEL_EXTRA_MODULE_LABEL ? EXTRA_MODULE : EXTERNAL_MODULE)) + #define CURRENT_MODULE_EDITED(k) (EXTERNAL_MODULE) #endif void menuModelSetup(uint8_t event) @@ -993,7 +990,6 @@ void menuModelSetup(uint8_t event) #define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8) #define INTERNAL_MODULE_CHANNELS_ROWS() IF_INTERNAL_MODULE_ON(1) #define EXTERNAL_MODULE_CHANNELS_ROWS() IF_EXTERNAL_MODULE_ON(IS_MODULE_DSM2(EXTERNAL_MODULE) ? (uint8_t)0 : (uint8_t)1) - #define TRAINER_CHANNELS_ROWS() IF_TRAINER_ON(1) #define PORT_CHANNELS_ROWS(x) (x==INTERNAL_MODULE ? INTERNAL_MODULE_CHANNELS_ROWS() : (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS() : TRAINER_CHANNELS_ROWS())) #define FAILSAFE_ROWS(x) ((g_model.moduleData[x].rfProtocol==RF_PROTO_X16 || g_model.moduleData[x].rfProtocol==RF_PROTO_LR12) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW) #define MODEL_SETUP_MAX_LINES (1+ITEM_MODEL_SETUP_MAX) @@ -1005,18 +1001,22 @@ void menuModelSetup(uint8_t event) #define IF_EXTERNAL_MODULE_ON(x) (g_model.externalModule == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x)) #define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8) #define EXTERNAL_MODULE_CHANNELS_ROWS() IF_EXTERNAL_MODULE_ON(IS_MODULE_DSM2(EXTERNAL_MODULE) ? (uint8_t)0 : (uint8_t)1) - #define TRAINER_CHANNELS_ROWS() (1) - #define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS() : TRAINER_CHANNELS_ROWS()) + #define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS() : 0) #define FAILSAFE_ROWS(x) ((g_model.moduleData[x].rfProtocol==RF_PROTO_X16 || g_model.moduleData[x].rfProtocol==RF_PROTO_LR12) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW) #define CURSOR_ON_CELL (true) #define MODEL_SETUP_MAX_LINES (1+ITEM_MODEL_SETUP_MAX) #define POT_WARN_ITEMS() ((g_model.nPotsToWarn >> 6) ? (uint8_t)NUM_POTS : (uint8_t)0) -#if defined(REVX) - #define EXTRA_MODULE_ROWS -#else +#if defined(PCBTARANIS) || (defined(PCBSKY9X) && defined(REVB)) #define EXTRA_MODULE_ROWS LABEL(ExtraModule), 1, 2, +#else + #define EXTRA_MODULE_ROWS #endif - MENU_TAB({ 0, 0, CASE_PCBTARANIS(0) 2, CASE_PERSISTENT_TIMERS(0) 0, 0, 2, CASE_PERSISTENT_TIMERS(0) 0, 0, 0, 1, 0,CASE_PCBTARANIS(LABEL(Throttle)) 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, 6, NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1, LABEL(ExternalModule), (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, EXTERNAL_MODULE_CHANNELS_ROWS(), (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), EXTRA_MODULE_ROWS LABEL(Trainer), TRAINER_CHANNELS_ROWS(), 2}); +#if defined(PCBTARANIS) + #define TRAINER_MODULE_ROWS LABEL(Trainer), IF_TRAINER_ON(1), 2 +#else + #define TRAINER_MODULE_ROWS +#endif + MENU_TAB({ 0, 0, CASE_PCBTARANIS(0) 2, CASE_PERSISTENT_TIMERS(0) 0, 0, 2, CASE_PERSISTENT_TIMERS(0) 0, 0, 0, 1, 0, CASE_PCBTARANIS(LABEL(Throttle)) 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, 6, NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1, LABEL(ExternalModule), (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, EXTERNAL_MODULE_CHANNELS_ROWS(), (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), EXTRA_MODULE_ROWS TRAINER_MODULE_ROWS }); #elif defined(CPUM64) #define CURSOR_ON_CELL (true) #define MODEL_SETUP_MAX_LINES ((IS_PPM_PROTOCOL(protocol)||IS_DSM2_PROTOCOL(protocol)||IS_PXX_PROTOCOL(protocol)) ? 1+ITEM_MODEL_SETUP_MAX : ITEM_MODEL_SETUP_MAX) @@ -1426,21 +1426,22 @@ void menuModelSetup(uint8_t event) } } break; +#endif +#if defined(PCBTARANIS) case ITEM_MODEL_TRAINER_LABEL: lcd_putsLeft(y, STR_TRAINER); break; -#endif - -#if defined(PCBTARANIS) case ITEM_MODEL_INTERNAL_MODULE_CHANNELS: #elif defined(PCBSKY9X) && !defined(REVX) case ITEM_MODEL_EXTRA_MODULE_CHANNELS: #endif #if defined(CPUARM) case ITEM_MODEL_EXTERNAL_MODULE_CHANNELS: +#if defined(PCBTARANIS) case ITEM_MODEL_TRAINER_CHANNELS: +#endif { uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); ModuleData & moduleData = g_model.moduleData[moduleIdx]; @@ -1457,7 +1458,11 @@ void menuModelSetup(uint8_t event) break; case 1: CHECK_INCDEC_MODELVAR(event, moduleData.channelsCount, -4, min(MAX_CHANNELS(moduleIdx), 32-8-moduleData.channelsStart)); - if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.externalModule == MODULE_TYPE_PPM) || (k == ITEM_MODEL_TRAINER_CHANNELS)) + if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.externalModule == MODULE_TYPE_PPM) +#if defined(PCBTARANIS) + || (k == ITEM_MODEL_TRAINER_CHANNELS) +#endif + ) SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); break; } @@ -1474,7 +1479,9 @@ void menuModelSetup(uint8_t event) #endif #if defined(CPUARM) case ITEM_MODEL_EXTERNAL_MODULE_BIND: +#if defined(PCBTARANIS) case ITEM_MODEL_TRAINER_SETTINGS: +#endif { uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); ModuleData & moduleData = g_model.moduleData[moduleIdx]; diff --git a/radio/src/opentx.h b/radio/src/opentx.h index b9991cdc5..f8e39290f 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -496,14 +496,7 @@ enum PotType { #define MAX_EXTERNAL_MODULE_CHANNELS() ((g_model.externalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[1].rfProtocol] : maxChannelsModules[g_model.externalModule]) #define MAX_CHANNELS(idx) (idx==INTERNAL_MODULE ? MAX_INTERNAL_MODULE_CHANNELS() : (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS())) #define IS_PXX_RANGE_CHECK_ENABLE() (pxxFlag[INTERNAL_MODULE] == PXX_SEND_RANGECHECK || pxxFlag[EXTERNAL_MODULE] == PXX_SEND_RANGECHECK) -#elif defined(PCBSKY9X) && defined(REVX) - #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)) - #define IS_MODULE_XJT(idx) (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_XJT) - #define IS_MODULE_DSM2(idx) (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_DSM2) - #define MAX_EXTERNAL_MODULE_CHANNELS() ((g_model.externalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol] : maxChannelsModules[g_model.externalModule]) - #define MAX_CHANNELS(idx) (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS()) - #define IS_PXX_RANGE_CHECK_ENABLE() (pxxFlag[EXTERNAL_MODULE] == PXX_SEND_RANGECHECK) -#elif defined(PCBSKY9X) +#elif defined(PCBSKY9X) && defined(REVB) #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || idx==EXTRA_MODULE || (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)) #define IS_MODULE_XJT(idx) (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_XJT) #define IS_MODULE_DSM2(idx) (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_DSM2) @@ -511,6 +504,13 @@ enum PotType { #define MAX_EXTRA_MODULE_CHANNELS() (0) // Only PPM #define MAX_CHANNELS(idx) (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : (idx==EXTRA_MODULE ? MAX_EXTRA_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS())) #define IS_PXX_RANGE_CHECK_ENABLE() (pxxFlag[EXTERNAL_MODULE] == PXX_SEND_RANGECHECK) +#else + #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)) + #define IS_MODULE_XJT(idx) (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_XJT) + #define IS_MODULE_DSM2(idx) (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_DSM2) + #define MAX_EXTERNAL_MODULE_CHANNELS() ((g_model.externalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol] : maxChannelsModules[g_model.externalModule]) + #define MAX_CHANNELS(idx) (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS()) + #define IS_PXX_RANGE_CHECK_ENABLE() (pxxFlag[EXTERNAL_MODULE] == PXX_SEND_RANGECHECK) #endif #include "lcd.h" diff --git a/radio/src/pulses/ppm_arm.cpp b/radio/src/pulses/ppm_arm.cpp index b78731f8e..851798463 100644 --- a/radio/src/pulses/ppm_arm.cpp +++ b/radio/src/pulses/ppm_arm.cpp @@ -56,7 +56,7 @@ void setupPulsesPPM(unsigned int port) // Don't enable interru #if defined(PCBSKY9X) register Pwm *pwmptr = PWM; - uint32_t pwmCh = (port == 0 ? 3 : 1); + uint32_t pwmCh = (port == EXTERNAL_MODULE ? 3 : 1); pwmptr->PWM_CH_NUM[pwmCh].PWM_CDTYUPD = (g_model.moduleData[port].ppmDelay * 50 + 300) * 2; //Stoplen *2 if (g_model.moduleData[port].ppmPulsePol) pwmptr->PWM_CH_NUM[pwmCh].PWM_CMR |= 0x00000200 ; // CPOL @@ -81,7 +81,7 @@ void setupPulsesPPM(unsigned int port) // Don't enable interru if (port == TRAINER_MODULE) { TIM3->CCR2 = rest - 1000 ; // Update time TIM3->CCR4 = (g_model.moduleData[port].ppmDelay*50+300)*2; - if(!g_model.moduleData[TRAINER_MODULE].ppmPulsePol) + if (!g_model.moduleData[TRAINER_MODULE].ppmPulsePol) TIM3->CCER |= TIM_CCER_CC4P; else TIM3->CCER &= ~TIM_CCER_CC4P; diff --git a/radio/src/targets/sky9x/board_sky9x.h b/radio/src/targets/sky9x/board_sky9x.h index 86387943d..5f3382d79 100644 --- a/radio/src/targets/sky9x/board_sky9x.h +++ b/radio/src/targets/sky9x/board_sky9x.h @@ -191,17 +191,14 @@ extern uint32_t readTrims(); #define DBLKEYS_PRESSED_LFT_DWN(i) ((in & (0x40 + 0x08)) == (0x40 + 0x08)) // Pulses driver -#define init_no_pulses(port) init_main_ppm(3000, 0) -#define disable_no_pulses(port) disable_ppm(0) -void init_main_ppm(uint32_t period, uint32_t out_enable); -#define init_ppm(port) init_main_ppm(3000, 1) +void init_no_pulses(uint32_t port); +void disable_no_pulses(uint32_t port); +void init_ppm(uint32_t port); void disable_ppm(uint32_t port); -void init_ssc(); -void disable_ssc(); -#define init_pxx(port) init_main_ppm(5000, 0); init_ssc() -#define disable_pxx(port) disable_ssc() -#define init_dsm2(port) init_main_ppm(5000, 0); init_ssc() -#define disable_dsm2(port) disable_ssc() +void init_pxx(uint32_t port); +void disable_pxx(uint32_t port); +void init_dsm2(uint32_t port); +void disable_dsm2(uint32_t port); // SD driver #if defined(SIMU) diff --git a/radio/src/targets/sky9x/pulses_driver.cpp b/radio/src/targets/sky9x/pulses_driver.cpp index 86f93bb90..f3aabf7a5 100644 --- a/radio/src/targets/sky9x/pulses_driver.cpp +++ b/radio/src/targets/sky9x/pulses_driver.cpp @@ -48,10 +48,9 @@ void init_main_ppm(uint32_t period, uint32_t out_enable) register Pio *pioptr ; register Pwm *pwmptr ; - setupPulsesPPM(0) ; + setupPulsesPPM(EXTERNAL_MODULE) ; - if ( out_enable ) - { + if (out_enable) { pioptr = PIOA ; pioptr->PIO_ABCDSR[0] &= ~PIO_PA17 ; // Peripheral C pioptr->PIO_ABCDSR[1] |= PIO_PA17 ; // Peripheral C @@ -61,12 +60,12 @@ void init_main_ppm(uint32_t period, uint32_t out_enable) pwmptr = PWM ; // PWM3 for PPM output pwmptr->PWM_CH_NUM[3].PWM_CMR = 0x0000000B ; // CLKA - if (g_model.moduleData[0].ppmPulsePol) + if (g_model.moduleData[EXTERNAL_MODULE].ppmPulsePol) pwmptr->PWM_CH_NUM[3].PWM_CMR |= 0x00000200 ; // CPOL pwmptr->PWM_CH_NUM[3].PWM_CPDR = period ; // Period in half uS pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = period ; // Period in half uS - pwmptr->PWM_CH_NUM[3].PWM_CDTY = g_model.moduleData[0].ppmDelay*100+600; // Duty in half uS - pwmptr->PWM_CH_NUM[3].PWM_CDTYUPD = g_model.moduleData[0].ppmDelay*100+600; // Duty in half uS + pwmptr->PWM_CH_NUM[3].PWM_CDTY = g_model.moduleData[EXTERNAL_MODULE].ppmDelay*100+600; // Duty in half uS + pwmptr->PWM_CH_NUM[3].PWM_CDTYUPD = g_model.moduleData[EXTERNAL_MODULE].ppmDelay*100+600; // Duty in half uS pwmptr->PWM_ENA = PWM_ENA_CHID3 ; // Enable channel 3 pwmptr->PWM_IER1 = PWM_IER1_CHID3 ; @@ -77,12 +76,12 @@ void init_main_ppm(uint32_t period, uint32_t out_enable) #if !defined(REVA) // PWM1 for PPM2 pwmptr->PWM_CH_NUM[1].PWM_CMR = 0x0000000B ; // CLKB - if (g_model.moduleData[0].ppmPulsePol) + if (g_model.moduleData[EXTRA_MODULE].ppmPulsePol) pwmptr->PWM_CH_NUM[1].PWM_CMR |= 0x00000200 ; // CPOL pwmptr->PWM_CH_NUM[1].PWM_CPDR = period ; // Period pwmptr->PWM_CH_NUM[1].PWM_CPDRUPD = period ; // Period - pwmptr->PWM_CH_NUM[1].PWM_CDTY = g_model.moduleData[0].ppmDelay*100+600 ; // Duty - pwmptr->PWM_CH_NUM[1].PWM_CDTYUPD = g_model.moduleData[0].ppmDelay*100+600 ; // Duty + pwmptr->PWM_CH_NUM[1].PWM_CDTY = g_model.moduleData[EXTRA_MODULE].ppmDelay*100+600 ; // Duty + pwmptr->PWM_CH_NUM[1].PWM_CDTYUPD = g_model.moduleData[EXTRA_MODULE].ppmDelay*100+600 ; // Duty pwmptr->PWM_ENA = PWM_ENA_CHID1 ; // Enable channel 1 #endif @@ -90,11 +89,41 @@ void init_main_ppm(uint32_t period, uint32_t out_enable) NVIC_EnableIRQ(PWM_IRQn) ; } +void init_no_pulses(uint32_t port) +{ + if (port == EXTERNAL_MODULE) { + init_main_ppm(3000, 0); + } + else { + // TODO + } +} + +void disable_no_pulses(uint32_t port) +{ + if (port == EXTERNAL_MODULE) { + disable_ppm(0); + } + else { + // TODO + } +} + +void init_ppm(uint32_t port) +{ + if (port == EXTERNAL_MODULE) { + init_main_ppm(3000, 1); + } + else { + // TODO + } +} + void disable_ppm(uint32_t port) { register Pio *pioptr ; - if (port == 0) { + if (port == EXTERNAL_MODULE) { pioptr = PIOA ; pioptr->PIO_PER = PIO_PA17 ; // Assign A17 to PIO PWM->PWM_IDR1 = PWM_IDR1_CHID3 ; @@ -102,7 +131,6 @@ void disable_ppm(uint32_t port) else { pioptr = PIOC ; pioptr->PIO_PER = PIO_PC17 ; // Assign A17 to PIO - PWM->PWM_IDR1 = PWM_IDR1_CHID1 ; NVIC_DisableIRQ(PWM_IRQn) ; } @@ -138,6 +166,48 @@ void disable_ssc() sscptr->SSC_CR = SSC_CR_TXDIS ; } +void init_pxx(uint32_t port) +{ + if (port == EXTERNAL_MODULE) { + init_main_ppm(5000, 0); + init_ssc(); + } + else { + // TODO + } +} + +void disable_pxx(uint32_t port) +{ + if (port == EXTERNAL_MODULE) { + disable_ssc(); + } + else { + // TODO + } +} + +void init_dsm2(uint32_t port) +{ + if (port == EXTERNAL_MODULE) { + init_main_ppm(5000, 0); + init_ssc(); + } + else { + // TODO + } +} + +void disable_dsm2(uint32_t port) +{ + if (port == EXTERNAL_MODULE) { + disable_ssc(); + } + else { + // TODO + } +} + #if !defined(SIMU) extern "C" void PWM_IRQHandler(void) { @@ -149,8 +219,8 @@ extern "C" void PWM_IRQHandler(void) pwmptr = PWM; reason = pwmptr->PWM_ISR1 ; if (reason & PWM_ISR1_CHID3) { - switch (s_current_protocol[0]) // Use the current, don't switch until set_up_pulses - { + // Use the current protocol, don't switch until set_up_pulses + switch (s_current_protocol[EXTERNAL_MODULE]) { case PROTO_PXX: // Alternate periods of 15.5mS and 2.5 mS period = pwmptr->PWM_CH_NUM[3].PWM_CPDR; @@ -162,13 +232,13 @@ extern "C" void PWM_IRQHandler(void) } pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = period; // Period in half uS if (period != 5000) { // 2.5 mS - setupPulses(0); + setupPulses(EXTERNAL_MODULE); } else { // Kick off serial output here sscptr = SSC; - sscptr->SSC_TPR = CONVERT_PTR_UINT(pxxStream[0]); - sscptr->SSC_TCR = (uint8_t *)pxxStreamPtr[0] - (uint8_t *)pxxStream[0]; + sscptr->SSC_TPR = CONVERT_PTR_UINT(pxxStream[EXTERNAL_MODULE]); + sscptr->SSC_TCR = (uint8_t *)pxxStreamPtr[EXTERNAL_MODULE] - (uint8_t *)pxxStream[EXTERNAL_MODULE]; sscptr->SSC_PTCR = SSC_PTCR_TXTEN; // Start transfers } break; @@ -198,10 +268,10 @@ extern "C" void PWM_IRQHandler(void) break; default: - pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = ppmStream[0][ppmStreamIndex[0]++]; // Period in half uS - if (ppmStream[0][ppmStreamIndex[0]] == 0) { - ppmStreamIndex[0] = 0; - setupPulses(0); + pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = ppmStream[EXTERNAL_MODULE][ppmStreamIndex[EXTERNAL_MODULE]++]; // Period in half uS + if (ppmStream[EXTERNAL_MODULE][ppmStreamIndex[EXTERNAL_MODULE]] == 0) { + ppmStreamIndex[EXTERNAL_MODULE] = 0; + setupPulses(EXTERNAL_MODULE); } break; @@ -209,10 +279,10 @@ extern "C" void PWM_IRQHandler(void) } if (reason & PWM_ISR1_CHID1) { - pwmptr->PWM_CH_NUM[1].PWM_CPDRUPD = ppmStream[1][ppmStreamIndex[1]++] ; // Period in half uS - if (ppmStream[1][ppmStreamIndex[1]] == 0) { - ppmStreamIndex[1] = 0; - setupPulsesPPM(1); + pwmptr->PWM_CH_NUM[1].PWM_CPDRUPD = ppmStream[EXTRA_MODULE][ppmStreamIndex[EXTRA_MODULE]++] ; // Period in half uS + if (ppmStream[EXTRA_MODULE][ppmStreamIndex[EXTRA_MODULE]] == 0) { + ppmStreamIndex[EXTRA_MODULE] = 0; + setupPulsesPPM(EXTRA_MODULE); } } }