LM3S9B96 定时器的配置
lm3s9b96这款处理器的定时器,使用起来还是比较方便的。
最重要的就是设对定时器的工作模式(32位工作模式还是16位工作模式),定时周期。
下面以lm3s9b96的timer0为例,进行定时周期为1s的配置
#include "inc/lm3s9b96.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_ints.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"
#include "driverlib/sysctl.h"
/* 用于调试 PF1 <-> LED -----------------------------------------------------*/
#define LED_PERIPH SYSCTL_PERIPH_GPIOF
#define LED_PORT GPIO_PORTF_BASE
#define LED_PIN GPIO_PIN_1
#define LED_OFF 1 < 1
#define LED_ON ~(1 < 1) // 低电平点亮LED
//*****************************************************************************
//
// 延时函数
//
//*****************************************************************************
void Delay(volatile signed long nCount)
{
for(; nCount != 0; nCount--);
}
//*****************************************************************************
//
// LED初始化函数,用于调试timer, watchdog等
//
//*****************************************************************************
void LED_Init(void)
{
// 使能LED所在的GPIO端口
SysCtlPeripheralEnable(LED_PERIPH);
// 设置LED所在管脚为输出
GPIOPinTypeGPIOOutput(LED_PORT, LED_PIN);
// 熄灭LED(默认LED是点亮的,低电平点亮LED)
GPIOPinWrite(LED_PORT, LED_PIN, LED_OFF);
}
//*****************************************************************************
//
// timer0设置为1s溢出一次; TIMER_A初值:0x00F42400,向下递减计数
//
//*****************************************************************************
void Timer0_Init(void)
{
// 使能Timer0模块所在的GPIO端口
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
// 配置Timer0为32位周期定时器
TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER);
// 设置计数器为:(16000000 / 1)个时钟周期,即1s
TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet() / 1);
// 使能Timer0的A通道中断
IntEnable(INT_TIMER0A);
// 使能Timer0A超时中断
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
// 启动Timer0计数
TimerEnable(TIMER0_BASE, TIMER_A);
}
//*****************************************************************************
//
// 主函数
//
//*****************************************************************************
int main(void)
{
// Set the clocking to run directly from the crystal.
SysCtlClockSet(SYSCTL_SYSdiv_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
LED_Init();
Timer0_Init();
IntMasterEnable(); // 开总中断
while (1)
{
}
}
//*****************************************************************************
//
// 定时器0中断处理函数. 1s溢出一次
//
//*****************************************************************************
void Timer0AIntHandler(void)
{
// 清除中断状态,重要!
TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
GPIOPinWrite(LED_PORT, LED_PIN, (GPIOPinRead(LED_PORT, LED_PIN) ^ LED_PIN));
}
按照前面讲的中断映射表的配置,将startup_ewarm.c文件中添加两处代码。编译、运行即可。
LM3S9B96定时 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)