我现在用EasyARM101板子初步学习lm3s101 编写了一个程序就是功能不能实现 请问问题出在什么地方? 程序如下:
#include "hw_memmap.h" #include "hw_types.h" #include "gpio.h" #include "sysctl.h" #include "timer.h" #include"interrupt.h"
#define PINS1 GPIO_PIN_4 #define PINS2 GPIO_PIN_5
//------------------------------------------------------------------------------------ // 函数名称 Timer0A // 函数功能 定时器0中断处理程序。工作在32位单次触发模式下。 // 输入参数 无。 // 输出参数 无。 //------------------------------------------------------------------------------------ void Timer0A(void) {
TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 清除定时器0中断。
TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet()); // 重载定时器的值。
GPIOPinWrite(GPIO_PORTB_BASE,PINS1,GPIOPinRead(GPIO_PORTB_BASE, PINS1) ^ PINS1); // 翻转GPIO B4 端口。 TimerEnable(TIMER0_BASE, TIMER_A); // 使能定时器0。
}
//------------------------------------------------------------------------------------ // 函数名称 Timer1A // 函数功能 定时器1中断处理程序。工作在32位周期触发模式下。 // 输入参数 无。 // 输出参数 无。 //------------------------------------------------------------------------------------ void Timer1A(void) {
TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT); // 清除定时器1中断。
GPIOPinWrite(GPIO_PORTB_BASE, PINS2,GPIOPinRead(GPIO_PORTB_BASE, PINS2) ^ PINS2); // 翻转GPIO B5 端口 }
//------------------------------------------------------------------------------------ // // 该范例程序演示了如何使用定时器产生周期性中断。其中一个定时器被设置为每秒产生一次中 // 断,另一个定时器设置为每秒产生两次中断;每个中断处理器在每一次中断时都翻转一次相应 // 的GPIO(B4和B5端口);同时,LED指示灯会指示每次中断以及中断的速率。 // 在本范例中,定时器0被设置为32位的可编程单次触发模式,定时器1则设置为32位的可编 // 程周期触发模式。 // //------------------------------------------------------------------------------------ int main(void) { SysCtlClockSet( SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ ); // 设定晶振为时钟源。 SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ); // 使能定时器0外设。 SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER1 ); // 使能定时器1外设。
SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOB ); // 使能GPIO B口外设。
IntMasterEnable(); // 处理器使能。
GPIODirModeSet(GPIO_PORTB_BASE, PINS1 | PINS2,GPIO_DIR_MODE_OUT); // 设置 GPIO B0和B1为输出口。 GPIOPinWrite(GPIO_PORTB_BASE, PINS1 | PINS2,0); // 初始化IO口。
TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_OS); // 设置定时器0为单次触发模式。 TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER); // 设置定时器1为周期触发模式。
TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet()); // 设置定时器装载值。定时1秒。 TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet()/2); // 设置定时器装载值。定时0.5秒。
TimerIntRegister(TIMER0_BASE,TIMER_A,Timer0A); TimerIntRegister(TIMER1_BASE,TIMER_A,Timer1A);
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 设置定时器为溢出中断。 TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
TimerEnable(TIMER0_BASE, TIMER_A); TimerEnable(TIMER1_BASE, TIMER_A);
while(1); }
|