|
如题,我正在用IAR FOR ARM 6.10学习LPC2132,IAR下2132的例子很多,几乎把2132所有的内部驱动都写了,但有的函数我还是不会用,有正在使用的
或已经会用的人吗,请指点一下或我们一起研究。。。。。
如:定时器的初始化函数,我一直没弄明白第二个参数怎么弄。。还有CTCR这几寄存器怎么一直没有设置,在周功的书上也没找到。。。
用自己写的程序好呢,还是用IAR自带的呢,请过来人指点
/*************************************************************************
* Function Name: TIMER_Init
* Parameters: LPC_TimerChannel_t DevNum
* unsigned int precision -- the timer precision (Unit: us), general setting is 10 us
* Return: int
* 0: success
* non-zero: error number
* Description: Initialize Timer, Set the PR register that represent the precision of timer.
*
*************************************************************************/
int TIMER_Init(LPC_TimerChannel_t DevNum, unsigned long precision)
{
int i;
//all registers are set to 0;
switch (DevNum)
{
case TIMER0:
// Set globe variable
Timer0Config.Precision = precision;
// PR = Precision(us) * Pclk
if(precision)
{
Timer0Config.Prescaler = (precision * SYS_GetFpclk()) / 1000000;
}
else
{
Timer0Config.Prescaler = 1;
}
for (i=0; i<CH_MAXNUM; ++i)
{
Timer0Config.MatchCH.Enable = false;
Timer0Config.MatchCH.Action = 0;
Timer0Config.MatchCH.TimeValue =0;
Timer0Config.MatchCH.Fnpr = NULL;
Timer0Config.MatchCH.FnprArg = (void *)0;
Timer0Config.CaptureCH.Enable = false;
Timer0Config.CaptureCH.TriggerType= 0;
Timer0Config.CaptureCH.EnableInt = 0;
Timer0Config.CaptureCH.Fnpr = NULL;
Timer0Config.CaptureCH.FnprArg = (void *)0;
Timer0Config.CaptureCH.CPValue= 0;
Timer0Config.ExtAction= DONOTHING;
Timer0Config.ExtBitValue= 0;
}
// Clear interrupts flags
T0IR=0xFF;
// Disable counting
T0TCR=0;
// Clear timer counter
T0TC=0;
// PR = Prescaler - 1
T0PR= Timer0Config.Prescaler - 1;
// Clear prescaler timer counter
T0PC=0;
// Reset Compare modules
T0MCR=0;
T0MR0=0;
T0MR1=0;
T0MR2=0;
T0MR3=0;
// Reset Capture modules
T0CCR=0;
// Reset External Compare module
T0EMR=0;
break;
case TIMER1:
// Set globe variable
Timer1Config.Precision = precision;
// PR = Precision(us) * Pclk
if(precision)
{
Timer1Config.Prescaler = (precision * SYS_GetFpclk()) / 1000000;
}
else
{
Timer1Config.Prescaler = 1;
}
for (i=0; i<CH_MAXNUM; ++i)
{
Timer1Config.MatchCH.Enable = false;
Timer1Config.MatchCH.Action = 0;
Timer1Config.MatchCH.TimeValue =0;
Timer1Config.MatchCH.Fnpr = NULL;
Timer1Config.MatchCH.FnprArg = (void *)0;
Timer1Config.CaptureCH.Enable = false;
Timer1Config.CaptureCH.TriggerType= 0;
Timer1Config.CaptureCH.EnableInt = 0;
Timer1Config.CaptureCH.Fnpr = NULL;
Timer1Config.CaptureCH.FnprArg = (void *)0;
Timer1Config.CaptureCH.CPValue= 0;
Timer1Config.ExtAction= DONOTHING;
Timer1Config.ExtBitValue= 0;
}
// Clear interrupts flags
T1IR=0xFF;
// Disable counting
T1TCR=0;
// Clear timer counter
T1TC=0;
// PR = Prescaler - 1
T1PR=Timer1Config.Prescaler - 1;
// Clear prescaler timer counter
T1PC=0;
// Reset Compare modules
T1MCR=0;
T1MR0=0;
T1MR1=0;
T1MR2=0;
T1MR3=0;
// Reset Capture modules
T1CCR=0;
// Reset External Compare module
T1EMR=0;
break;
default:
return 1;
}
return 0;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|