5336|16

13

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

程序进不了TIMER0中断 [复制链接]

在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 Systems\Embedded Workbench 6.0 Kickstart/arm/examples/TexasInstruments/Stellaris/boards/dk-lm3s9b96/drivers/kitronix320x240x16_ssd2119_8bit.h"
#include "C:/Program Files/IAR Systems\Embedded Workbench 6.0 Kickstart/arm/examples/TexasInstruments/Stellaris/boards/dk-lm3s9b96/drivers/set_pinout.h"
#include "C:/Program Files/IAR Systems\Embedded 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)
  {}
}

最新回复

  详情 回复 发表于 2016-7-20 18:17
 
点赞 关注

回复
举报

2002

帖子

24

TA的资源

五彩晶圆(高级)

沙发
 
头文件引用好怪,这个是运行在LM3S9B96上面的么?
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(高级)

4
 
GPIOPinTypeTimer(TIMER0_BASE,TIMER_A);  ???  你这个是要做什么?

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

你确定在startup.c中注册的Timer0AIntHandler没有问题? 又没有用过默认的 Timer0A_ISR( )?
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

5
 
大家没遇到过这样的问题吧。
大侠,帮帮吧
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

6
 
SysCtlPeripheralEnable(GPIO_PORTD_BASE);  在pinoutset()中设置了。
Timer0AIntHandler注册没有问题。(函数说明了,也注册了)

点评

GPIOPinTypeTimer(TIMER0_BASE,TIMER_A); ??? 你这个是要做什么?你只是用定时中断没有用捕捉功能? 看看底下如何使用这个函数 GPIOPinTypeTimer(unsigned long ulPort, unsigned char ucPins); //! \\param  详情 回复 发表于 2012-6-15 21:03
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(高级)

7
 

回复 6楼 hb22s 的帖子

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).
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

8
 
函数原型:
void
GPIOPinTypeTimer(unsigned long ulPort,
unsigned char ucPins)
参数:
ulPort是GPIO端口的基址。
ucPins是管脚的位组合(bit-packed)表示。
描述:
CCP管脚必须正确配置,以便定时器外设能够正常工作。这个函数为这些管脚提供了典型配置;其它配置也能正常工作,这取决于板的设置(例如使用了片内上拉)。
管脚用一个位组合(bit-packed)的字节来指定,在这个字节中,置位的位用来识别被访问的管脚,字节的位0代表GPIO端口管脚0、位1代表GPIO端口管脚1等等。
注:这个函数不能将任意管脚都变成一个定时器管脚;它只配置一个定时器管脚来进行正确操作

该如何配置?
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

9
 
自带的TIMER例程可没有GPIOPinTypeTimer函数设置!
GPIOPinTypeTimer(TIMER0_BASE,TIMER_A); 是从周立功的例程中COPY的

点评

你只是用超时中断,根本不需要GPIOPinTypeTimer() //GPIOPinTypeTimer()试试 你的头文件很tricky 你可以copy一个9b96的官方例程到别的文件夹然后试着修改 这样会省去你很多烦恼  详情 回复 发表于 2012-6-15 21:35
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(高级)

10
 

回复 9楼 hb22s 的帖子

你只是用超时中断,根本不需要GPIOPinTypeTimer()
//GPIOPinTypeTimer()试试

你的头文件很tricky   你可以copy一个9b96的官方例程到别的文件夹然后试着修改  这样会省去你很多烦恼
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

11
 
谢谢tekkon!
可惜现在在家,试不了!明天接着试吧。
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

12
 
除了这些,还可能有别的原因吗,tekkon?
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

13
 
试试这个,我实验通过



  1. static unsigned short g_ulCounter;


    //*****************************************************************************
    //
    // The interrupt handler for the Timer0A interrupt.
    //
    //*****************************************************************************
    void
    Timer0AIntHandler(void)
    {
    //
    // Clear the timer interrupt flag.
    //
    TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);

    //
    // Update the periodic interrupt counter.
    //

    if(g_ulCounter++==500)
    {
    g_ulCounter=0;
    LED_Blink(LED_3);
    }

    }

    void TimerA_init(void)
    {

    // The Timer0 peripheral must be enabled for use.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);

    //
    // Configure Timer0A as a 16-bit periodic timer.
    //
    TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR |
    TIMER_CFG_A_PERIODIC);

    //
    // Set the Timer0A load value to 2ms.
    //
    TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet() / 500);

    //
    // Enable processor interrupts.
    //
    IntMasterEnable();

    //
    // Configure the Timer0A interrupt for timer timeout.
    //
    TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);

    //
    // Enable the Timer0A interrupt on the processor (NVIC).
    //
    IntEnable(INT_TIMER0A);

    //
    // Initialize the interrupt counter.
    //
    g_ulCounter = 0;

    //
    // Enable Timer0A.
    //
    TimerEnable(TIMER0_BASE, TIMER_A);

    }
复制代码

 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

14
 
再传一份清风老大写的timer说明,供参考
3.6 定时器.pdf (551.77 KB, 下载次数: 24)
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

15
 
谢谢楼主!

点评

你才是楼主:pleased:  详情 回复 发表于 2012-6-15 22:33
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

16
 
原帖由 hb22s 于 2012-6-15 22:27 发表 谢谢楼主!

你才是楼主
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

17
 
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表