1.#define的使用

#define SQUARE_DUTY 0.5

2.FPU的开启:浮点运算

FPUEnable();
FPULazyStackingEnable();

3.定时器初始化

    //
    // Timer init
    //        
      SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);   //使能外设
      TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);//周期计时模式

两个步骤:外部设备使能,设置定时器的类型

4.定时周期设置

    //
    // Timer delay period 
    //    
      ui32Period = (SysCtlClockGet()/4/83000);                //设置计数上限,这里的设置可以产生83kHz的信号
      TimerLoadSet(TIMER0_BASE, TIMER_A, ui32Period -1);      //设置计数范围

这里因为占空比是25%,所以/4,如果占空比是50%,那么/2。

SysCtlClockGet()获得的是系统的频率,也就是40*1000*1000,一个定时周期中灯只能选择暗或者亮,持续时间为1s,所以一暗一亮构成一个周期2s,f=0.5。
SysCtlClockGet()*f=20M,用20M/想要获得的频率,就是ui32Period的值。

5.定时器中断设置
//
// interrupt enable--timer0A
//
   IntEnable(INT_TIMER0A);                            //在系统层使能定时器中断
   TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);   //允许处理某个定时器的中断请求
IntMasterEnable();   //使能系统总中断开关
TimerIntRegister(TIMER0_BASE, TIMER_BOTH, Timer0IntHandler); //注册中断处理函数
void Timer0IntHandler(void)
{
    // 清除定时器中断标志位
    TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
if(k==0)
{
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, 1<<4);
}
else
{
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, 0<<4);
}
k++;
if(k==4)
{
    k=0;
}
}

6.开启定时器

    //
    // timer0 enable--This will start the timer and interrupts
    //        
        TimerEnable(TIMER0_BASE, TIMER_A);

 7.不知道为什么需要这个,是为了提高精度?

// 建立并使能系统滴答定时器,作为延时循环的时钟参考(1s)(秒级延时不准确)
ROM_SysTickPeriodSet(ROM_SysCtlClockGet()); //设置SysTick计数器的周期值
ROM_SysTickEnable(); //使能SysTick计数器,开始倒计数

8.




posted on 2015-10-26 23:37  planet  阅读(2559)  评论(0编辑  收藏  举报