From 57fb4d41f3d0f44f678c27061ee60dcd79bdbb63 Mon Sep 17 00:00:00 2001 From: bsongis Date: Fri, 1 Jun 2012 20:47:44 +0000 Subject: [PATCH] 200bytes flash saved in pulses --- src/pulses_avr.cpp | 79 ++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 48 deletions(-) diff --git a/src/pulses_avr.cpp b/src/pulses_avr.cpp index 180f99228..b8cddf352 100644 --- a/src/pulses_avr.cpp +++ b/src/pulses_avr.cpp @@ -46,6 +46,8 @@ uint8_t s_current_protocol = 255; uint8_t s_pulses_paused = 0; +uint16_t B3_comp_value; + #ifdef DSM2_SERIAL inline void DSM2_EnableTXD(void) { @@ -56,7 +58,6 @@ inline void DSM2_EnableTXD(void) void set_timer3_capture( void ) ; void set_timer3_ppm( void ) ; -void setupPulsesPPM16( uint8_t proto ) ; void startPulses() { @@ -192,36 +193,48 @@ ISR(TIMER1_COMPA_vect) //2MHz pulse generation #endif -FORCEINLINE void setupPulsesPPM() +void setupPulsesPPM(uint8_t proto) { int16_t PPM_range = g_model.extendedLimits ? 640*2 : 512*2; //range of 0.7..1.7msec //Total frame length = 22.5msec //each pulse is 0.7..1.7ms long with a 0.3ms stop tail //The pulse ISR is 2mhz that's why everything is multiplied by 2 - - uint16_t *ptr = (uint16_t *)pulses2MHz; - uint8_t p = 8+(g_model.ppmNCH*2); // channels count - uint16_t q = (g_model.ppmDelay*50+300)*2; //Stoplen *2 - uint32_t rest = 22500u*2-q; // Minimum Framelen=22.5 ms + 10000 to avoid int32_t in the next line + uint16_t *ptr = (proto == PROTO_PPM ? (uint16_t *)pulses2MHz : (uint16_t *) &pulses2MHz[PULSES_SIZE/2]); + uint8_t p = (proto == PROTO_PPM16 ? 16 : 8) + (g_model.ppmNCH * 2); //Channels *2 + uint16_t q = (g_model.ppmDelay*50+300)*2; // Stoplen *2 + uint32_t rest = 22500u*2 - q; // Minimum Framelen=22.5ms rest += (int32_t(g_model.ppmFrameLength))*1000; - for (uint8_t i=0; i