2883|4

5310

帖子

453

TA的资源

五彩晶圆(高级)

楼主
 

TIVA C Launchpad (EK-LM4F120XL LaunchPad)让LED闪起来! [复制链接]

TIVA C Launchpad (EK-LM4F120XL LaunchPad)让LED闪起来!
根据LB4教程,使用定时器中断,使GPIOF口连接的LED闪起来!

添加相关头文件
#include "driverlib/interrupt.h"
#include "driverlib/timer.h"
#include "driverlib/systick.h"

主程序

1、配置系统时钟
2、使能LED连接端口,配置输出
3、配置定时器0,1,W0,都为周期触发!
4、使能全局中断
5、使能定时器中断

int
main(void)
{
    long  Period;

    //
    // The FPU should be enabled because some compilers will use floating-
    // point registers, even for non-floating-point code.  If the FPU is not
    // enabled this will cause a fault.  This also ensures that floating-
    // point operations could be added to this application and would work
    // correctly and use the hardware floating-point unit.  Finally, lazy
    // stacking is enabled for interrupt handlers.  This allows floating-
    // point instructions to be used within interrupt handlers, but at the
    // expense of extra stack usage.
    //
    FPUEnable();
    FPULazyStackingEnable();

    //
    // Set the clocking to run directly from the crystal.
    //配置系统时钟 16M

    ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);

    //
    // Enable the peripherals used by this example.
    //
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);


    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
    ROM_TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
    Period=(ROM_SysCtlClockGet()/10)/2;
    ROM_TimerLoadSet(TIMER0_BASE, TIMER_A, Period-1);

    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);
    ROM_TimerConfigure(TIMER1_BASE, TIMER_CFG_PERIODIC);
    ROM_TimerLoadSet(TIMER1_BASE, TIMER_A, ROM_SysCtlClockGet() / 1);


        ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER0);// 使能宽64位定时器0外设
        ROM_TimerConfigure(WTIMER0_BASE,TIMER_CFG_PERIODIC);//配置64位宽的定时器0
        ROM_TimerLoadSet64(WTIMER0_BASE,ROM_SysCtlClockGet()/1);


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


    // Setup the interrupts for the timer timeouts.
    //
    ROM_IntEnable(INT_TIMER0A);
    ROM_IntEnable(INT_TIMER1A);
        ROM_IntEnable(INT_WTIMER0A);//使能64位宽的定时器0中断

    ROM_TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
    ROM_TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
        ROM_TimerIntEnable(WTIMER0_BASE,TIMER_TIMA_TIMEOUT);
    //
    // Enable the timers.
    //
    ROM_TimerEnable(TIMER0_BASE, TIMER_A);
    ROM_TimerEnable(TIMER1_BASE, TIMER_A);
        ROM_TimerEnable(WTIMER0_BASE,TIMER_A);//使能64位宽的定时器0


    //
    // Loop forever while the timers run.
    //
    while(1)
    {

    }
}
 
点赞 关注

回复
举报

5310

帖子

453

TA的资源

五彩晶圆(高级)

沙发
 
定时器0中断

//*****************************************************************************
//
// The interrupt handler for the first timer interrupt.
//
//*****************************************************************************
void
Timer0IntHandler(void)
{
        static unsigned char i=0;
    //
    // Clear the timer interrupt.
    //
    ROM_TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);

    if(i==0)
    {
            i=1;
            ROM_GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0);
    }
    else
    {        i=0;
            ROM_GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,4);
    }
}
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

板凳
 
定时器1中断
//*****************************************************************************
//
// The interrupt handler for the second timer interrupt.
//
//*****************************************************************************
void
Timer1IntHandler(void)
{static unsigned char i=0;
    //
    // Clear the timer interrupt.
    //
    ROM_TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT);

    if(i==0)
        {
                i=1;
                ROM_GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,0);
        }
        else
        {        i=0;
                ROM_GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,8);
        }
}
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

4
 
宽定时器0中断
void
WTimer0IntHandler(void)
{static unsigned char i=0;
    //
    // Clear the timer interrupt.
    //

    ROM_TimerIntClear(WTIMER0_BASE,TIMER_TIMA_TIMEOUT);

    if(i==0)
        {
                i=1;
                ROM_GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,0);
        }
        else
        {        i=0;
                ROM_GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1,2);
        }
}
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

5
 
修改startup_ccs.c文件

函数声明
extern void Timer0IntHandler(void);
extern void Timer1IntHandler(void);
extern void WTimer0IntHandler(void);


修改向量表函数

Timer0IntHandler,                      // Timer 0 subtimer A
    IntDefaultHandler,                      // Timer 0 subtimer B
    Timer1IntHandler,                      // Timer 1 subtimer A
    IntDefaultHandler,                      // Timer 1 subtimer B


WTimer0IntHandler,                      // Wide Timer 0 subtimer A
    IntDefaultHandler,                      // Wide Timer 0 subtimer B
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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