Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Nucleo_Encoder_16_bits.cpp
- Committer:
- irfantitok
- Date:
- 2018-12-19
- Revision:
- 3:d43c60d01569
- Parent:
- 2:3fcf36c1b1af
- Child:
- 4:9ce0e451aeff
File content as of revision 3:d43c60d01569:
#include "Nucleo_Encoder_16_bits.h"
namespace mbed
{
Nucleo_Encoder_16_bits::Nucleo_Encoder_16_bits(TIM_TypeDef * _TIM)
{
TIM = _TIM;
// Initialisation of the TIM module as an encoder counter
EncoderInit(&encoder, &timer, _TIM, 0xffff, TIM_ENCODERMODE_TI12);
// Update (aka over- and underflow) interrupt enabled
TIM->DIER |= 0x0001;
// The initialisation process generates an update interrupt, so we'll have to clear the update flag before anything else
TIM->SR &= 0xfffe;
}
Nucleo_Encoder_16_bits::Nucleo_Encoder_16_bits(TIM_TypeDef * _TIM, uint32_t _maxcount, uint32_t _encmode)
{
TIM = _TIM;
// Initialisation of the TIM module as an encoder counter
EncoderInit(&encoder, &timer, _TIM, _maxcount, _encmode);
// Update (aka over- and underflow) interrupt enabled
TIM->DIER |= 0x0001;
// The initialisation process generates an update interrupt, so we'll have to clear the update flag before anything else
TIM->SR &= 0xfffe;
}
Nucleo_Encoder_16_bits::Nucleo_Encoder_16_bits(TIM_Encoder_InitTypeDef * _encoder, TIM_HandleTypeDef * _timer, TIM_TypeDef * _TIM, uint32_t _maxcount, uint32_t _encmode)
{
timer = *_timer;
encoder = *_encoder;
TIM = _TIM;
// Initialisation of the TIM module as an encoder counter
EncoderInit(&encoder, &timer, _TIM, _maxcount, _encmode);
// Update (aka over- and underflow) interrupt enabled
TIM->DIER |= 0x0001;
// The initialisation process generates an update interrupt, so we'll have to clear the update flag before anything else
TIM->SR &= 0xfffe;
}
int32_t Nucleo_Encoder_16_bits::GetCounter(bool reset)
{
int16_t count = TIM->CNT;
if(reset){
switch((uint32_t)TIM){
case TIM1_BASE :
TIM1->CNT = 0;
break;
case TIM2_BASE :
TIM2->CNT = 0;
break;
case TIM3_BASE :
TIM3->CNT = 0;
break;
case TIM4_BASE :
TIM4->CNT = 0;
break;
case TIM5_BASE :
TIM5->CNT = 0;
break;
}
}
else{
switch((uint32_t)TIM)
{
case TIM1_BASE :
return (int32_t)count;
case TIM2_BASE :
return (int32_t)count;
case TIM3_BASE :
return (int32_t)count;
case TIM4_BASE :
return (int32_t)count;
case TIM5_BASE :
return (int32_t)count;
}
}
return (int32_t)count;
}
TIM_HandleTypeDef* Nucleo_Encoder_16_bits::GetTimer()
{
return &timer;
}
}