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

📄 cntmr.c

📁 microwindows移植到S3C44B0的源码
💻 C
字号:
/* cntmr.c - GT counters/timers functions *//* Copyright - Galileo technology. 9/3/2000 *//*DESCRIPTIONThis file contains function which serves the user with a complete interfaceto the GT internal counters and timers, please advise: each counter/timer unitcan function only as a counter or a timer at current time.Counter/timer 0 is 32 bit wide.Counters/timers 1-3 are 24 bit wide.*//* includes */#ifdef __linux__#include <asm/galileo/evb64120A/cntmr.h>#include <asm/galileo/evb64120A/core.h>#else#include "cntmr.h"#include "core.h"#endif/********************************************************************* cntTmrStart - Starts a counter/timer with given an initiate value.** INPUTS:  unsigned int countNum - Selects one of the 8 counters/timers.*          unsigned int countValue - Initial value for count down. *          CNT_TMR_OP_MODES opMode - Set Mode, Counter or Timer.** RETURNS: false if one of the parameters is erroneous, true otherwise.*********************************************************************/bool cntTmrStart(CNTMR_NUM countNum, unsigned int countValue,		 CNT_TMR_OP_MODES opMode){	unsigned int command = 1;	unsigned int value;	if (countNum > LAST_CNTMR)		return false;	else {		GT_REG_READ(TIMER_COUNTER_CONTROL, &value);		cntTmrDisable(countNum);		GT_REG_WRITE((TIMER_COUNTER0 + (4 * countNum)),			     countValue);		command = command << countNum * 2;		value = value | command;		command = command << 1;		switch (opMode) {		case TIMER:	/* The Timer/Counter bit set to logic '1' */			value = value | command;			break;		case COUNTER:	/* The Timer/Counter bit set to logic '0' */			value = value & ~command;			break;		default:			return false;		}		GT_REG_WRITE(TIMER_COUNTER_CONTROL, value);		return true;	}}/********************************************************************* cntTmrDisable - Disables the timer/counter operation and return its *                 value.** INPUTS:  unsigned int countNum - Selects one of the 8 counters/timers.* RETURNS: The counter/timer value (unsigned int), if any of the arguments are *          erroneous return 0.*********************************************************************/unsigned int cntTmrDisable(CNTMR_NUM countNum){	unsigned int command = 1;	unsigned int regValue;	unsigned int value;	GT_REG_READ(TIMER_COUNTER_CONTROL, &value);	if (countNum > LAST_CNTMR)		return 0;	GT_REG_READ(TIMER_COUNTER0 + 4 * countNum, &regValue);	command = command << countNum * 2;	/* Disable the timer/counter */	value = value & ~command;	GT_REG_WRITE(TIMER_COUNTER_CONTROL, value);	return regValue;}/********************************************************************* cntTmrRead - Reads a timer or a counter value. (This operation can be*              perform while the counter/timer is active).** RETURNS: The counter/timer value. If wrong input value, return 0.*********************************************************************/unsigned int cntTmrRead(CNTMR_NUM countNum){	unsigned int value;	if (countNum > LAST_CNTMR)		return 0;	else		GT_REG_READ(TIMER_COUNTER0 + countNum * 4, &value);	return value;}/********************************************************************* cntTmrEnable - Set enable-bit of timer/counter.*                Be aware: If the counter/timer is active, this function*                          will terminate with an false.** INPUTS:  unsigned int countNum - Selects one of the 8 counters/timers.* RETURNS: false if one of the parameters is erroneous, true otherwise.*********************************************************************/bool cntTmrEnable(CNTMR_NUM countNum){	unsigned int command = 1;	unsigned int value;	GT_REG_READ(TIMER_COUNTER_CONTROL, &value);	if (countNum > LAST_CNTMR)		return false;	else {		command = command << countNum * 2;		if ((command & value) != 0)	/* ==> The counter/timer is enabled */			return false;	/* doesn't make sense to Enable an "enabled" counter */		value = value | command;		GT_REG_WRITE(TIMER_COUNTER_CONTROL, value);		return true;	}}/********************************************************************* cntTmrLoad - loading value for timer number countNum.*              Be aware: If this function try to load value to an enabled*                        counter/timer it terminate with false.** INPUTS:  unsigned int countNum - Selects one of the 8 counters/timers.*          unsigned int countValue - The value for load the register.* RETURNS: false if one of the parameters is erroneous, true otherwise.*********************************************************************/bool cntTmrLoad(unsigned int countNum, unsigned int countValue){	unsigned int command = 1;	unsigned int value;	GT_REG_READ(TIMER_COUNTER_CONTROL, &value);	if (countNum > LAST_CNTMR)		return false;	else {		command = command << countNum * 2;		value = value & command;		if (value != 0) {	/* ==> The counter/timer is enabled */			return false;	/* can't reload value when counter/timer is enabled */		} else {			GT_REG_WRITE((TIMER_COUNTER0 + (4 * countNum)),				     countValue);			return true;		}	}}/********************************************************************* cntTmrSetMode - Configurate the Mode of the channel to work as a counter*                 or as a timer. (for more details on the different between*                 those two modes is written in the Data Sheet).*                 NOTE: This function only set the counter/timer mode and*                 don't enable it. *                 Be aware: If this function try to load value to an enabled*                           counter/timer it terminate with false.* * INPUTS:  unsigned int countNum - Selects one of the 8 counters/timers.*          CNT_TMR_OP_MODES opMode - TIMER or COUNTER mode.* RETURNS: false if one of the parameters is erroneous true otherwise .*********************************************************************/bool cntTmrSetMode(CNTMR_NUM countNum, CNT_TMR_OP_MODES opMode){	unsigned int command = 1;	unsigned int value;	GT_REG_READ(TIMER_COUNTER_CONTROL, &value);	if (countNum > LAST_CNTMR)		return false;	else {		command = command << countNum * 2;		value = value & command;		if (value != 0) {	/* ==> The counter/timer is enabled */			return false;	/* can't set the Mode when counter/timer is enabled */		} else {			command = command << 1;			switch (opMode) {			case TIMER:				value = value | command;	/* The Timer/Counter bit set to logic '1' */				break;			case COUNTER:				value = value & ~command;	/*The Timer/Counter bit set to logic '0' */				break;			default:				return false;			}			GT_REG_WRITE(TIMER_COUNTER_CONTROL, value);			return true;		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -