📄 lib_tc.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 + -