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

📄 lib_tc.c

📁 基于AT91SAM7x256的硬件平台的WEB服务器源码(A&shy DS版本, ucOS_II+LWIP+自己编写的DNS查询工具)
💻 C
字号:
//*------------------------------------------------------------------------------------------------
//* 文件名				: lib_tc.c
//* 功能描述				: 定时器(Timer Counter)函数库
//* 作者    				: 焦海波
//* 版本					: 1.0
//* 建立日期、时间		: 2006/05/31 09:46
//* 最近修改日期、时间	: 
//* 修改原因				: 
//*------------------------------------------------------------------------------------------------
//*------------------------------------------ 头文件 -----------------------------------------------
#include	"/uCOS_II/os_cpu.h"
#include	"/at91sam7x256/include/AT91SAM7X256.h"
#include	"/at91sam7x256/include/lib_AT91SAM7X256.h"
#include	"lib_tc.h"
//*------------------------------------------ 常量定义 ---------------------------------------------
const TCDESC TC0_DESC =
{
	AT91C_BASE_TC0,
	AT91C_BASE_PIOB,
	AT91C_ID_TC0,
	AT91C_PB23_TIOA0,
	AT91C_PB24_TIOB0,
	AT91C_PB12_TCLK0
};
//*================================================================================================
//*											函	数	区
//*================================================================================================
//*------------------------------------------------------------------------------------------------
//* 函数名称	: at91_tc_get_status
//* 功能描述	: 读取定时器通道的状态
//* 入口参数	: <pstTCDesc>[in] 指向TCDESC结构的指针,在这里实际需要的是定时器基地址
//* 出口参数	: 返回指定通道的当前状态值
//*------------------------------------------------------------------------------------------------
ULONG at91_tc_get_status(const TCDESC *pstTCDesc)
{
	return(pstTCDesc->pstTCBaseAddr->TC_SR);
}
//*------------------------------------------------------------------------------------------------
//* 函数名称	: at91_tc_open
//* 功能描述	: 初始化定时器通道并使能定时器相关引脚为外围引脚
//* 入口参数	: <pstTCDesc>[in] 指向TCDESC结构的指针
//*			:    <ulMode>[in] 定时器模式
//*			:    <ulTIOA>[in] TIOA作为外围引脚使能
//*			:    <ulTIOB>[in] TIOB作为外围引脚使能
//* 出口参数	: 无
//*------------------------------------------------------------------------------------------------
void at91_tc_open(const TCDESC *pstTCDesc, ULONG ulMode, BOOLEAN blIsOpenTIOA, BOOLEAN blIsOpenTIOB)
{
    ULONG ulPeriphA = 0, ulPeriphB = 0;
    
    //* 定时器时钟使能
    AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << pstTCDesc->ubPerihpID);
    
	//* 使能TCLK、TIOA、TIOB为外围引脚
    ulPeriphB = pstTCDesc->ubTCLK;
    if(blIsOpenTIOA)
        ulPeriphA |= pstTCDesc->ubTIOA;
    if(blIsOpenTIOB)
        ulPeriphA |= pstTCDesc->ubTIOB;
	AT91F_PIO_CfgPeriph(pstTCDesc->pstPIOBaseAddr, ulPeriphA, ulPeriphB);

    //* 禁止时钟和中断
    pstTCDesc->pstTCBaseAddr->TC_CCR = AT91C_TC_CLKDIS;
    pstTCDesc->pstTCBaseAddr->TC_IDR = 0xFFFFFFFF;
    ulPeriphA = pstTCDesc->pstTCBaseAddr->TC_SR ;

    //* 设置定时器模式
    pstTCDesc->pstTCBaseAddr->TC_CMR = ulMode;

    //* 使能时钟
    pstTCDesc->pstTCBaseAddr->TC_CCR = AT91C_TC_CLKEN ;
}
//*------------------------------------------------------------------------------------------------
//* 函数名称	: at91_tc_write
//* 功能描述	: 写指定定时器的寄存器
//* 入口参数	: <pstTCDesc>[in] 指向TCDESC结构的指针
//*			:    <ulaReg>[in] 要写入的值
//* 出口参数	: 无
//*------------------------------------------------------------------------------------------------
void at91_tc_write(const TCDESC *pstTCDesc, ULONG ulaReg[])
{
    pstTCDesc->pstTCBaseAddr->TC_RA = ulaReg[0] ;
    pstTCDesc->pstTCBaseAddr->TC_RB = ulaReg[1] ;
    pstTCDesc->pstTCBaseAddr->TC_RC = ulaReg[2] ;
}
//*------------------------------------------------------------------------------------------------
//* 函数名称	: at91_tc_trig_cmd
//* 功能描述	: 在指定的定时器通道指定触发类型
//* 入口参数	:   <pstTCDesc>[in] 指向TCDESC结构的指针
//*			: <ubTriggerType>[in] 触发类型,该函数只支持TC_TRIG_CHANNEL(在指定的通道产生一个软件触发)
//*			:                     和TC_TRIG_BLOCK(为每个通道同时产生一个软件触发)两种类型
//* 出口参数	: 无
//*------------------------------------------------------------------------------------------------
void at91_tc_trig_cmd(const TCDESC *pstTCDesc, UBYTE ubTriggerType)
{
    switch (ubTriggerType)
    {
        case TC_TRIG_CHANNEL:
        
            pstTCDesc->pstTCBaseAddr->TC_CCR = AT91C_TC_SWTRG;
            break;

        case TC_TRIG_BLOCK	:
        
            AT91C_BASE_TCB->TCB_BCR = AT91C_TCB_SYNC;
            break;

        default				:
        	break;
    }
}

⌨️ 快捷键说明

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