|
楼主 |
发表于 2010-12-15 09:24:12
|
显示全部楼层
/******************************************************************************
定时/计数器TM00驱动
******************************************************************************/
void TM00_Init(void)
{
TMC00 = TM0_CLEAR_BY_MATCH_CR00; //=0X0C 定时器模式
TMMK000 = 1; // disable INTTM000 000中断屏蔽
TMIF000 = 0; // clear INTTM000 flag 000中断标志清零
TMMK010 = 1; // disable INTTM010 010中断屏蔽
TMIF010 = 0; // clear INTTM010 flag 010中断标志清零
TMPR000 = 1; //set INTTM000 low priority 000中断优先级 低
//TM00 interval timer
PRM00 = TM0_INTER_CLOCK_2; //=0x00 /分频系数选择
CRC00 = TM0_CR00_COMPARE; //=0X00 即cr000 cr010作比较器用,比较器和触发器选择
CR000 = 40000; //初始值cr000
CR010 = TM00_CR010_VALUE; //初始值cr010
TM00_Start();
}
void TM00_Start(void)
{
TMIF000 = 0; // clear INTTM000 flag
TMMK000 = 0; // enable INTTM000
TMC00 &= (UCHAR)~TM0_OPERATE;
TMC00 |= TM0_CLEAR_BY_MATCH_CR00;
}
void TM00_Stop(void)
{
TMC00 = TM0_OPERATE_DISABLE;
TMMK000 = 1; // disable INTTM000
TMIF000 = 0; // clear INTTM000 flag
}
MD_STATUS TM00_ChangeTimerCondition(USHORT* array_reg, UCHAR array_num)
{
MD_STATUS status = MD_OK;
switch (array_num)
{
case 1:
CR000 = array_reg[0];
break;
case 2:
CR000 = array_reg[0];
CR010 = array_reg[1];
break;
default:
status = MD_ARGERROR;
break;
}
return (status);
}
/******************************************************************************
定时/计数器50驱动
******************************************************************************/
void TM50_Init(void)
{
TCE50 = 0; //关闭TM50控制,并清零TM50
TMMK50 = 1; //屏蔽掉TM50中断
TMIF50 = 0; //清除TM50中断标志
TMPR50 = 1; //中断优先级设置,为低
TCL50 = TM5_INTER_CLOCK_6; //定时器时钟配置,有TCL502 TCL501 TCL500配置低3位,分频系数分别为Fprs/2^0 ,2^1 ,2^2 ,2^6, 2^8 ,2^13
CR50 = 0x09; //定时器初值设置,需要定时器停止操作的时候才能更改此值,如果已经设置好了定时值,就不需要再次修改相同的值,除非有不同的值,输入才再次修改,会一直保持写入的值。
TMC50 = 0X00; //TMC50 = TM5_OPT_MODE_OTHER | TM5_OUTPUT_FF_DISABLE;
TM50_Start();
}
void TM50_Start(void)
{
TMIF50 = 0; /* clear INTTM50 flag */
TMMK50 = 0; /* enable INTTM50 */
TCE50 = 1; /* enable TM50 counter */
}
void TM50_Stop(void)
{
TCE50 = 0; /* disable TM50 counter */
TMMK50 = 1; /* disable INTTM50 */
TMIF50 = 0; /* clear INTTM50 flag */
}
#pragma vector = INTTM50_vect
__interrupt void MD_INTTM50(void)
{
;
}
/******************************************************************************
定时/计数器 51驱动
******************************************************************************/
void TM51_Init(void)
{
TCE51 = 0; // disable TM51 counter
TMMK51 = 1; // disable INTTM51
TMIF51 = 0; // clear INTTM51 flag
TMPR51 = 1; //set INTTM51 low priority
// TM51 interval mode
TCL51 = TM5_INTER_CLOCK_5;
CR51 = TM51_CR51_VALUE;
TMC51 = TM5_OPT_MODE_OTHER;
TM51_Start();
}
void TM51_Start(void)
{
TMIF51 = 0; // clear INTTM51 flag
TMMK51 = 0; // enable INTTM51
TCE51 = 1; // enable TM51 counter
}
void TM51_Stop(void)
{
TCE51 = 0; // disable TM51 counter
TMMK51 = 1; // disable INTTM51
TMIF51 = 0; // clear INTTM51 flag
}
#pragma vector = INTTM51_vect
__interrupt void MD_INTTM51(void)
{
} |
|