⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmr270.c

📁 dm270 source code
💻 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 + -