程序进不了TIMER0中断

2019-03-24 14:11发布

在startup.c中已注册Timer0AIntHandler中断,但调试时进不了中断

#include "C:/StellarisWare/inc/hw_ints.h"
#include "C:/StellarisWare/inc/hw_memmap.h"
#include "C:/StellarisWare/inc/hw_types.h"
// #include "C:/StellarisWare/driverlib/debug.h"
#include "C:/StellarisWare/driverlib/interrupt.h"
#include "C:/StellarisWare/driverlib/sysctl.h"
#include "C:/StellarisWare/driverlib/timer.h"
#include "C:/StellarisWare/grlib/grlib.h"
#include "C:/Program Files/IAR SystemsEmbedded Workbench 6.0 Kickstart/arm/examples/TexasInstruments/Stellaris/boards/dk-lm3s9b96/drivers/kitronix320x240x16_ssd2119_8bit.h"
#include "C:/Program Files/IAR SystemsEmbedded Workbench 6.0 Kickstart/arm/examples/TexasInstruments/Stellaris/boards/dk-lm3s9b96/drivers/set_pinout.h"
#include "C:/Program Files/IAR SystemsEmbedded Workbench 6.0 Kickstart/arm/examples/TexasInstruments/Stellaris/driverlib/gpio.h"
#include "C:/StellarisWare/driverlib/ssi.h"
#include "C:/StellarisWare/inc/hw_ssi.h"
#include "C:/StellarisWare/driverlib/can.h"
#include "C:/StellarisWare/inc/hw_can.h"
#include "C:/StellarisWare/driverlib/udma.h"
#include "C:/StellarisWare/inc/hw_gpio.h"
#include "C:/StellarisWare/driverlib/gpio.h"


//  定时器的中断服务函数
void Timer0AIntHandler(void)
{
    unsigned char ucVal;
    unsigned long ulStatus;

    ulStatus = TimerIntStatus(TIMER0_BASE, true);           //  读取中断状态
    TimerIntClear(TIMER0_BASE, ulStatus);                   //  清除中断状态,重要!

    if (ulStatus & TIMER_TIMA_TIMEOUT)                      //  如果是Timer超时中断
    {
        ucVal = GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_4 );             //  反转LED
        GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_4, ~ucVal);
    }
}

main(void)
{   
  
    //jtagWait();
    //
    //
    //设置系统时钟为50Mhz
    SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_16MHZ);
    SysCtlClockGet();
    PinoutSet();
    SysCtlPeripheralReset(SYSCTL_PERIPH_TIMER0);
   
   SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);                 //  使能Timer模块

    TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR |     //  配置Timer为16位周期定时器
                                TIMER_CFG_A_PERIODIC);

    GPIOPinTypeTimer(TIMER0_BASE,TIMER_A);//GPIO_PIN_4,GPIO_DIR_MODE_OUT);
    GPIODirModeSet(GPIO_PORTD_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT);
    GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
    GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_4, 0xff);
    TimerLoadSet(TIMER0_BASE, TIMER_A, 300000);              //  设置Timer初值,定时500ms
    TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);        //  使能Timer超时中断
    IntEnable(INT_TIMER0A);                                 //  使能Timer中断
    IntMasterEnable();                                      //  使能处理器中断
    TimerEnable(TIMER0_BASE, TIMER_A);                      //  使能Timer计数   
   
  while(1)
  {}
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
shower.xu
1楼-- · 2019-03-24 17:09
头文件引用好怪,这个是运行在LM3S9B96上面的么?
hb22s
2楼-- · 2019-03-24 21:24
 精彩回答 2  元偷偷看……
tekkon
3楼-- · 2019-03-25 01:46
GPIOPinTypeTimer(TIMER0_BASE,TIMER_A);  ???  你这个是要做什么?

SysCtlPeripheralEnable(GPIO_PORTD_BASE);  ???  你使用PD4点亮LED, 可是怎么没有看到时能GPIO_PORTD_BASE

你确定在startup.c中注册的Timer0AIntHandler没有问题? 又没有用过默认的 Timer0A_ISR( )?
hb22s
4楼-- · 2019-03-25 04:59
大家没遇到过这样的问题吧。
大侠,帮帮吧
hb22s
5楼-- · 2019-03-25 09:25
 精彩回答 2  元偷偷看……
tekkon
6楼-- · 2019-03-25 10:28
GPIOPinTypeTimer(TIMER0_BASE,TIMER_A);  ???  你这个是要做什么?你只是用定时中断没有用捕捉功能? 看看底下如何使用这个函数

GPIOPinTypeTimer(unsigned long ulPort, unsigned char ucPins);
//! param ulPort is the base address of the GPIO port.
//! param ucPins is the bit-packed representation of the pin(s).

一周热门 更多>

相关问题

    相关文章