MSPM0_ValvanoWare  1.0
ECE445L starter code
Files | Macros | Functions
InputCapture

Input capture measures period. More...

Files

file  InputCapture.h
 Software driver functions for input capture.
 

Macros

#define INPUTCAPTUREUSELFCLK   2
 use INPUTCAPTUREUSELFCLK to select 32768 Hz LFCLK
 
#define INPUTCAPTUREUSEMFCLK   4
 use INPUTCAPTUREUSEMFCLK to select MFCLK (not tested)
 
#define INPUTCAPTUREUSEBUSCLK   8
 use INPUTCAPTUREUSEBUSCLK to select BUSCLK
 

Functions

void InputCapture_Init (uint32_t timerClkSrc, uint32_t timerClkPrescale, uint32_t priority)
 Initialize input capture. More...
 
void InputCapture_InitDual (uint32_t timerClkSrc, uint32_t timerClkPrescale, uint32_t priority)
 

Detailed Description

Input capture measures period.

Input capture pins
Pin TimerDescription
PA12TIMG0interrupts on rising edge of PA12

Function Documentation

◆ InputCapture_Init()

void InputCapture_Init ( uint32_t  timerClkSrc,
uint32_t  timerClkPrescale,
uint32_t  priority 
)

Initialize input capture.

Arm interrupts on rising edge of PA12
Let P be the period of the selected clock
resolution = P*(timerClkPrescale+1)
precision = 16 bits
range = 65535*resolution (max)
timerClkDivRatio = 1
timerClkFreq = (timerClkSrc / (timerClkDivRatio * (timerClkPrescale + 1)))
resolution = (timerClkDivRatio * (timerClkPrescale + 1)))/timerClkSrc
User defines their own ISR like the following

uint32_t Data[20];
uint32_t Index=0;
uint32_t Time,Last,Period;
uint32_t iidx,count=0;
void TIMG0_IRQHandler(void){
count++;
iidx = TIMG0->CPU_INT.IIDX;// this will acknowledge
if((iidx) == 5){ // 5 means capture CCD0
Time = TIMG0->COUNTERREGS.CC_01[0]; // time now
Period = (Last-Time)&0xFFFF; // elapsed time since last
Last = Time;
if(Index < 20){
Data[Index] = Period;
Index++;
}
}
}
  • timerClkSrc
    • 2 for 32768 Hz LFCLK
    • 4 for MFCLK (not tested)
    • 8 for BUSCLK
  • For example
    • source=LFCLK, prescale=255, resolution = 7.8125ms
    • source=BUSCLK, prescale=47, resolution = 1us
Parameters
timerClkSrccould be LFCLK, MFCLK, or BUSCLK
timerClkPrescaleis prescale divide clock by timerClkPrescale+1, 0 to 255
priorityis 0(highest),1,2 or 3(lowest)
Returns
none
Note
Will invoke LaunchPad_Init