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.
时间: 2024-10-04 17:16:21