From 865a74dd0f02b46c6cc37a5c33314baaf90fa6e2 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Sun, 3 Jul 2011 17:11:47 +0200 Subject: Moved peripheral classes to seperate files. --- ppmsum.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 ppmsum.cpp (limited to 'ppmsum.cpp') diff --git a/ppmsum.cpp b/ppmsum.cpp new file mode 100644 index 0000000..7b77036 --- /dev/null +++ b/ppmsum.cpp @@ -0,0 +1,53 @@ +#include "ppmsum.h" + +PPMSum* PPMSum::self = 0; + +template<> +void interrupt() { + PPMSum::self->irq(); +} + +void PPMSum::irq() { + int16_t sr = TIM4.SR; + TIM4.SR = 0; + + if(sr & 0x06) { + GPIOA.ODR = 1 << 5; + } else { + GPIOA.ODR = 0; + } + + + if(sr & 0x01) { + // Timeout. + + // TODO: Indicate failsafe. + + } else if(sr & 0x02) { + // Period. + + if(TIM4.CCR1 > 5000) { + index = 0; + } else { + index++; + } + + } else if(sr & 0x04) { + // Pulsewidth. + + channels[index] = TIM4.CCR2; + } +} + +void PPMSum::enable() { + RCC.enable(RCC.TIM4); + TIM4.PSC = 36; + TIM4.CCMR1 = 0x0201; + TIM4.SMCR = 0x54; + TIM4.CCER = 0x31; + TIM4.DIER = 0x07; + + Interrupt::enable(Interrupt::TIM4); + + TIM4.CR1 = 0x05; +} -- cgit v1.2.3