#include "inc/tm4c123gh6pm.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"
void Timer0A_init(uint32_t fre);
void Timer0IntHandler(void);
void RGB_GPIO_Init(void);
uint16_t Timer0A_cnt = 0;
int main(void)
{
//5分频,使用PLL,外部晶振16M,system时钟源选择 main osc。系统时钟200/5 = 40 MHZ
SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
RGB_GPIO_Init();
Timer0A_init(1000);
//让RGB led循环闪烁,1s转换一次
while(1)
{
if(Timer0A_cnt == 1000-1)
{
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_1);
}
if(Timer0A_cnt == 2000-1)
{
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_2);
}
if(Timer0A_cnt == 3000-1)
{
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_3);
}
}
}
void RGB_GPIO_Init(void)
{
//使能GPIOF外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//设置为输出
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
}
void Timer0A_init(uint32_t fre)
{
//使能TIMER0外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
//TimerConfigure(TIMER0_BASE, TIMER_CFG_ONE_SHOT); //单次计数模式
//TimerConfigure(TIMER0_BASE, TIMER_CFG_A_PERIODIC);//单周期计数模式
TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC); //周期性计数模式
//一般来说定时器加载值为SysCtlClockGet()/N-1,定时时间为1/N秒。
TimerLoadSet(TIMER0_BASE, TIMER_A,(SysCtlClockGet() / fre) - 1);
//使能Timer0A的中断
IntEnable(INT_TIMER0A);
//配置中断源,配置为超时时产生中断
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
//使能对处理器的中断
IntMasterEnable();
//为Timer0A注册中断处理函数
TimerIntRegister(TIMER0_BASE,TIMER_A,Timer0IntHandler);
//使能TIMER0A
TimerEnable(TIMER0_BASE, TIMER_A);
}
void Timer0IntHandler(void)
{
//清除标志位
TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
Timer0A_cnt ++;
if(Timer0A_cnt == 3000)
{
Timer0A_cnt = 0;
}
}
#include
#include
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"
void Timer0A_init(uint32_t fre);
void Timer0IntHandler(void);
void RGB_GPIO_Init(void);
uint16_t Timer0A_cnt = 0;
int main(void)
{
//5分频,使用PLL,外部晶振16M,system时钟源选择 main osc。系统时钟200/5 = 40 MHZ
SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
RGB_GPIO_Init();
Timer0A_init(1000);
//让RGB led循环闪烁,1s转换一次
while(1)
{
if(Timer0A_cnt == 1000-1)
{
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_1);
}
if(Timer0A_cnt == 2000-1)
{
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_2);
}
if(Timer0A_cnt == 3000-1)
{
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_3);
}
}
}
void RGB_GPIO_Init(void)
{
//使能GPIOF外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//设置为输出
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
}
void Timer0A_init(uint32_t fre)
{
//使能TIMER0外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
//TimerConfigure(TIMER0_BASE, TIMER_CFG_ONE_SHOT); //单次计数模式
//TimerConfigure(TIMER0_BASE, TIMER_CFG_A_PERIODIC);//单周期计数模式
TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC); //周期性计数模式
//一般来说定时器加载值为SysCtlClockGet()/N-1,定时时间为1/N秒。
TimerLoadSet(TIMER0_BASE, TIMER_A,(SysCtlClockGet() / fre) - 1);
//使能Timer0A的中断
IntEnable(INT_TIMER0A);
//配置中断源,配置为超时时产生中断
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
//使能对处理器的中断
IntMasterEnable();
//为Timer0A注册中断处理函数
TimerIntRegister(TIMER0_BASE,TIMER_A,Timer0IntHandler);
//使能TIMER0A
TimerEnable(TIMER0_BASE, TIMER_A);
}
void Timer0IntHandler(void)
{
//清除标志位
TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
Timer0A_cnt ++;
if(Timer0A_cnt == 3000)
{
Timer0A_cnt = 0;
}
}
举报