Пример #1
0
// ----------------------------------------------------------------------------
void
xpcc::stm32::Timer1::setMode(Mode mode, SlaveMode slaveMode,
		SlaveModeTrigger slaveModeTrigger, MasterMode masterMode
#if defined(STM32F3XX)
		, MasterMode2 masterMode2
#endif /* defined(STM32F3XX) */
		)
{
	// disable timer
	TIM1->CR1 = 0;
	TIM1->CR2 = 0;
	
	if (slaveMode == SLAVE_ENCODER_1 || slaveMode == SLAVE_ENCODER_2 || slaveMode == SLAVE_ENCODER_3)
	{
		setPrescaler(1);
	}
	
	// ARR Register is buffered, only Under/Overflow generates update interrupt
	TIM1->CR1 = TIM_CR1_ARPE | TIM_CR1_URS | mode;
#if defined(STM32F3XX)
	TIM1->CR2 = masterMode | masterMode2;
#else
	TIM1->CR2 = masterMode;
#endif
	TIM1->SMCR = slaveMode|slaveModeTrigger;
}
Пример #2
0
			/**
			 * \brief	Initialize and enable the A/D converter
			 *
			 * Available on all ATmegas.
			 */
			static inline void
			initialize(Reference referenceVoltage,
					   Prescaler prescaler)
			{
				setReferenceVoltage(referenceVoltage);
				setPrescaler(prescaler);
				setEnableAdc(true);
			}
Пример #3
0
void
evgMxc::setFrequency(epicsFloat64 freq) {
    epicsUInt32 clkSpeed = (epicsUInt32)(getFrequency() *
                            pow(10.0, 6));
    epicsUInt32 preScaler = (epicsUInt32)((epicsFloat64)clkSpeed / freq);
    
    setPrescaler(preScaler);
}
Пример #4
0
// ----------------------------------------------------------------------------
uint16_t
xpcc::stm32::Timer1::setPeriod(uint32_t microseconds, bool autoApply)
{
	// This will be inaccurate for non-smooth frequencies (last six digits
	// unequal to zero)
	uint32_t cycles = microseconds * (
			((STM32_APB2_FREQUENCY==STM32_AHB_FREQUENCY)?1:2) * 
			STM32_APB2_FREQUENCY / 1000000UL);
	uint16_t prescaler = (cycles + 65535) / 65536;	// always round up
	uint16_t overflow = cycles / prescaler;
	
	overflow = overflow - 1;	// e.g. 36000 cycles are from 0 to 35999
	
	setPrescaler(prescaler);
	setOverflow(overflow);
	
	if (autoApply) {
		// Generate Update Event to apply the new settings for ARR
		TIM1->EGR |= TIM_EGR_UG;
	}
	
	return overflow;
}
Пример #5
0
void Timeout::start(){
  noInterrupts();
    setPrescaler(prescaler);
  interrupts();
}
Пример #6
0
void Timeout::kill(){
  setPrescaler(0);
}