guxingganyue 发表于 2011-7-12 09:49:27

有谁在用IAR FOR ARM 6.10啊,根目录下的例子里的定时器有关的函数怎么使用啊???????????

如题,我正在用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;
}

biansf2001 发表于 2011-7-12 10:10:11

STM32的飘过

songhaicun 发表于 2011-11-18 21:16:55

我用的也是LPC2132,仿照周立功里的程序,为啥每次到中断IRQEnable();时总出现错误啊,望高手指点呐.
!ourdev_696589RM2YR4.txt(文件大小:3K) (原文件名:Timer0_Int.txt)

songhaicun 发表于 2011-11-19 16:07:45

为何编译时出错在interrupt_function() ;
Error: Cannot call a __thumb function from arm mode 。ourdev_696798ST12EU.txt(文件大小:6K) (原文件名:TIMELED.txt)

guxingganyue 发表于 2011-11-19 20:38:35

汇报最终结果:放弃了iar目录下的定时器文件,自己按照周立功的写了一个

使用起来还行
页: [1]
查看完整版本: 有谁在用IAR FOR ARM 6.10啊,根目录下的例子里的定时器有关的函数怎么使用啊???????????