Having issues setting up Input Capture to measure a Duty cycle. The pulse I'm trying to capture is ~2uS in length, approximately 28uS between pulses. I've got the TimeUnit_LDD set to a 48mhz counter frequency, Channel 0 capture on both edges with Interrupts enabled with a high priority.
My OnChannel0 ISR routine stores 10 samples and then would calculate the duty cycle from those numbers.
void TU2_OnChannel0(LDD_TUserData *UserDataPtr)
{
static uint32_t captureValues[10] = {0};
static int captureIndex = 0;
TU2_GetCaptureValue(TU2_DeviceData, 0, &captureValues[captureIndex]);
captureIndex++;
if(captureIndex == 10){
// TODO: Calculate duty cycle here
Duty_Cycle = 0;
// Reset the index to start a new measure.
captureIndex = 0;
TU2_ResetCounter(TU2_DeviceData);
}
}
If I breakpoint in the if(captureIndex ==10) what I end up seeing is my captureValues array being populated with pairs of values like the following:
[991, 991, 2358, 2358, 3725, 3725, 5092, 5092, 6460, 6460]
The time between the even slotted numbers seems to be equivalent to the 28uS period between rising edges I expect. The odd slots are supposed to correspond to the falling edge 2uS later, but I end up with the same counter value as the preceding even slot. The interrupt appears to be happening twice, as my indexes increment.