1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-21 15:25:17 +03:00

Code cleanup on Sky9x pulses

This commit is contained in:
bsongis 2014-06-17 15:37:53 +02:00
parent 9e64801384
commit 39118453da
5 changed files with 136 additions and 62 deletions

View file

@ -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<int8_t>(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];

View file

@ -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"

View file

@ -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;

View file

@ -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)

View file

@ -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);
}
}
}