📄 tmr270.c
字号:
/*
DM270 ARM Evaluation Software
(c)Texas Instruments 2003
*/
/**
\file tmr270.c
\brief Timer Related APIs
*/
#include <tmr270.h>
#include <clkc270.h>
/**
\brief Timer Configuration
Configure timer 'timerID' according to configuration data set in \c 'tmrConfig' \n
In case of \c TMR_FREE_RUN mode, make sure timer interrupt is setup using INTC APIs \n
In case of \c TMR_ONE_SHOT mode, call TMR_start() to trigger timer operation \n
In either case, use TMR_stop() to stop timer operation \n
Use TMR_getCount(), to get current timer count (divisor) value
\param timerID timer ID, 0: TMR_0, 1:TMR_1, 2:TMR_2, 3:TMR_3
\param tmrConfig Timer configuration data, see structure TMR_ConfigData
\return if success, \c E_PASS, else error code
\see TMR_ConfigData
\par Example:
\code
TMR_ConfigData tmr0Config;
STATUS status;
tmr0Config.mode = TMR_ONE_SHOT;
tmr0Config.prescalar = 27
tmr0Config.div = 1000
tmr0Config.referenceClock = TMR_REF_CLK_PLLIN
status = TMR_setConfig( TMR_0, tmr0Config )
\endcode
*/
STATUS TMR_setConfig( Uint16 timerID, TMR_ConfigData *tmrConfig) {
STATUS status=E_PASS;
if(tmrConfig==NULL)
return E_INVALID_INPUT;
switch(timerID) {
case TMR_0:
TMR0_RSET( TMMD0, tmrConfig->mode );
TMR0_RSET( TMPRSCL0, tmrConfig->prescalar );
TMR0_RSET( TMDIV0, tmrConfig->div );
if(tmrConfig->referenceClock==TMR_REF_CLK_PLLIN)
status = CLKC_moduleSelectClockSource(CLK_TMR0, CLKC_PLL_IN);
else
status = CLKC_moduleSelectClockSource(CLK_TMR0, CLKC_ARM_IN);
break;
case TMR_1:
TMR1_RSET( TMMD1, tmrConfig->mode );
TMR1_RSET( TMPRSCL1, tmrConfig->prescalar );
TMR1_RSET( TMDIV1, tmrConfig->div );
if(tmrConfig->referenceClock==TMR_REF_CLK_PLLIN)
status = CLKC_moduleSelectClockSource(CLK_TMR1, CLKC_PLL_IN);
else
status = CLKC_moduleSelectClockSource(CLK_TMR1, CLKC_ARM_IN);
break;
case TMR_2:
TMR2_RSET( TMMD2, tmrConfig->mode );
TMR2_RSET( TMPRSCL2, tmrConfig->prescalar );
TMR2_RSET( TMDIV2, tmrConfig->div );
if(tmrConfig->referenceClock==TMR_REF_CLK_PLLIN)
status = CLKC_moduleSelectClockSource(CLK_TMR2, CLKC_PLL_IN);
else
status = CLKC_moduleSelectClockSource(CLK_TMR2, CLKC_ARM_IN);
break;
case TMR_3:
TMR3_RSET( TMMD3, tmrConfig->mode );
TMR3_RSET( TMPRSCL3, tmrConfig->prescalar );
TMR3_RSET( TMDIV3, tmrConfig->div );
if(tmrConfig->referenceClock==TMR_REF_CLK_PLLIN)
status = CLKC_moduleSelectClockSource(CLK_TMR3, CLKC_PLL_IN);
else
status = CLKC_moduleSelectClockSource(CLK_TMR3, CLKC_ARM_IN);
break;
default:
status=E_INVALID_INPUT;
break;
}
return status;
}
/**
\brief Start Timer
Trigger timer \c 'timerID' to begin counting. \n
Make sure timer is setup using TMR_setConfig()
\param timerID timer ID, 0: TMR_0, 1:TMR_1, 2:TMR_2, 3:TMR_3
\return if success, \c E_PASS, else error code
*/
STATUS TMR_start(Uint16 timerID) {
STATUS status=E_PASS;
switch(timerID) {
case TMR_0:
TMR0_RSET(TMTRG0, 1);
break;
case TMR_1:
TMR1_RSET(TMTRG1, 1);
break;
case TMR_2:
TMR2_RSET(TMTRG2, 1);
break;
case TMR_3:
TMR3_RSET(TMTRG3, 1);
break;
default:
status=E_INVALID_INPUT;
break;
}
return status;
}
/**
\brief Stop timer \c 'timerID'
\param timerID timer ID, 0: TMR_0, 1:TMR_1, 2:TMR_2, 3:TMR_3
\return if success, \c E_PASS, else error code
*/
STATUS TMR_stop(Uint16 timerID) {
STATUS status=E_PASS;
switch(timerID) {
case TMR_0:
TMR0_RSET(TMMD0, 0);
break;
case TMR_1:
TMR1_RSET(TMMD1, 0);
break;
case TMR_2:
TMR2_RSET(TMMD2, 0);
break;
case TMR_3:
TMR3_RSET(TMMD3, 0);
break;
default:
status=E_INVALID_INPUT;
break;
}
return status;
}
/**
\brief Returns timer \c 'timerID' count (divisor) value
\param timerID timer ID, 0: TMR_0, 1:TMR_1, 2:TMR_2, 3:TMR_3
\return count value
*/
Uint16 TMR_getCount(Uint16 timerID) {
switch(timerID) {
case TMR_0:
return TMR0_RGET(TMCNT0);
case TMR_1:
return TMR1_RGET(TMCNT1);
case TMR_2:
return TMR2_RGET(TMCNT2);
case TMR_3:
return TMR3_RGET(TMCNT3);
default:
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -