Hi everyone,
I've got the following code which is working great on WTIMER5, pin A which is PD6 (I'm using a Tiva-C launchpad btw). This is a freq counter, timegated by an external 1 sec signal. I'm feeding an 5 MHz signal into it and getting the correct result.
#define CAPTURE_TIMER_PH SYSCTL_PERIPH_WTIMER5
#define CAPTURE_TIMER_BASE WTIMER5_BASE
#define CAPTURE_TIMERA_INT INT_WTIMER5A
#define CAPTURE_TIMERB_INT INT_WTIMER5B
/* Edges to count from oscillator (5V tolerant!!!) */
/* WT5CCP0 - PD6 -#53*/
/* WT5CCP1 - PD7 -#10*/
#define EXTEDGE_PH SYSCTL_PERIPH_GPIOD
#define EXTEDGE_PIN_BASE GPIO_PORTD_BASE
#define EXTEDGE_PINA GPIO_PIN_6
#define EXTEDGE_PINB GPIO_PIN_7
#define EXTEDGE_PINA_CONFIG GPIO_PD6_WT5CCP0
#define EXTEDGE_PINB_CONFIG GPIO_PD7_WT5CCP1
void Init_Capture_Timer(void){
/*
* Enable Capture Timer peripherial
*/
SysCtlPeripheralEnable(CAPTURE_TIMER_PH);
/*
* Configure 24 bit capture timer
*/
TimerConfigure(CAPTURE_TIMER_BASE, TIMER_CFG_A_CAP_COUNT_UP);
/*
* Capture on positive edges
*/
TimerControlEvent(CAPTURE_TIMER_BASE, TIMER_A, TIMER_EVENT_POS_EDGE);
/*
* Load and Match registers
*/
TimerLoadSet(CAPTURE_TIMER_BASE, TIMER_A, 0xFFFFFFFF);
TimerMatchSet(CAPTURE_TIMER_BASE, TIMER_A, 0x00);
}
void Enable_Capture_Timer(void){
TimerEnable(CAPTURE_TIMER_BASE, TIMER_A);
}
void Disable_Capture_Timer(void){
TimerDisable(CAPTURE_TIMER_BASE, TIMER_A);
}
//Pin interrupt handler, asserted by an external 1 sec signal
void TimeGateIntHandler(void){
ui32EventCount = HWREG(CAPTURE_TIMER_BASE + TIMER_O_TAR);
HWREG(CAPTURE_TIMER_BASE + TIMER_O_TAV) = 0;
GPIOIntClear(TIMEGATE_PIN_BASE, TIMEGATE_PIN);
Task.Bits.FRQDRDY = 1;
}
Now I want to use the other capture pin (pin B) which is PD7. I changed the code to pin B, however it is not working.
void Init_Capture_Timer(void){
/*
* Enable Capture Timer peripherial
*/
SysCtlPeripheralEnable(CAPTURE_TIMER_PH);
/*
* Configure 24 bit capture timer
*/
TimerConfigure(CAPTURE_TIMER_BASE, TIMER_CFG_B_CAP_COUNT_UP);
/*
* Capture on positive edges
*/
TimerControlEvent(CAPTURE_TIMER_BASE, TIMER_B, TIMER_EVENT_POS_EDGE);
/*
* Load and Match registers
*/
TimerLoadSet(CAPTURE_TIMER_BASE, TIMER_B, 0xFFFFFFFF);
TimerMatchSet(CAPTURE_TIMER_BASE, TIMER_B, 0x00);
}
void Enable_Capture_Timer(void){
TimerEnable(CAPTURE_TIMER_BASE, TIMER_B);
}
void Disable_Capture_Timer(void){
TimerDisable(CAPTURE_TIMER_BASE, TIMER_B);
}
//Pin interrupt handler, asserted by an external 1 sec signal
void TimeGateIntHandler(void){
ui32EventCount = HWREG(CAPTURE_TIMER_BASE + TIMER_O_TBR);
HWREG(CAPTURE_TIMER_BASE + TIMER_O_TBV) = 0;
GPIOIntClear(TIMEGATE_PIN_BASE, TIMEGATE_PIN);
Task.Bits.FRQDRDY = 1;
}
I'm getting xFFFFFFFF in the ui32EventCount variable. I may miss out something obvious...but I can't find the problem.