#include "main.h"
void vGPIO_Config(void);
void vGPIO_PortFIntHandler(void);
void Timer0IntHander(void);
void timer_config(void);
unsigned long k;
char str[50];
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
/* 时钟配置,2.5分频,80Mhz,系统时钟使用PLL,使用外部主时钟源,外部晶振为16MHz */
ILI9341_init(); //液晶屏初始化
ILI9341_clear(GRAY); //清屏
BACK_COLOR=BLUE;
POINT_COLOR=BLACK;
vGPIO_Config();
timer_config();
while(1)
{
}
}
void Timer0IntHander(void)
{
TimerIntClear(TIMER0_BASE,TIMER_A);
sprintf(str,"%d",TimerValueGet(TIMER1_BASE,TIMER_A));
ILI9341_draw_string(75,75,str);
TimerLoadSet(TIMER1_BASE,TIMER_A,0);
}
void timer_config(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); //使能定时器模块Timer0
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); //cap
TimerConfigure(TIMER0_BASE,TIMER_CFG_PERIODIC); //配置定时器模块Timer0为Periodic周期性计数模式。
TimerConfigure(TIMER1_BASE,TIMER_CFG_SPLIT_PAIR|TIMER_CFG_A_CAP_COUNT_UP);
TimerLoadSet(TIMER0_BASE,TIMER_A,SysCtlClockGet()-1); //设定定时器模块Timer0的Load重装载值为系统时钟频率的一半再减一(为0.5秒)
TimerLoadSet(TIMER1_BASE,TIMER_A,0);
TimerControlEvent(TIMER1_BASE,TIMER_A,TIMER_EVENT_POS_EDGE);
IntRegister(INT_TIMER0A,Timer0IntHander); //注册中断函数
IntEnable(INT_TIMER0A); //使能定时器模块Timer0的定时器A的中断。
TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT); //使能单独的定时器中断源,第二个是中断源启用的中断事件的标识码,TIMER_TIMA_TIMEOUT的意思是定时器A(TimerA)溢出(重装载),以此为标志位,当TimerA重装载时就会触发中断。
IntMasterEnable(); //使能处理器中断,使处理器能够响应中断。
IntPrioritySet(INT_TIMER0A, 0); //设置中断优先级,TM4C123G的中断优先级有8个
TimerEnable(TIMER0_BASE,TIMER_A); //使能定时器
TimerEnable(TIMER1_BASE,TIMER_A);
TimerIntClear(TIMER0_BASE,TIMER_A);
}
/* GPIOF中断服务函数 */
void vGPIO_Config(void)
{ ILI9341_clear(YELLOW);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinTypeTimer(GPIO_PORTB_BASE,GPIO_PIN_4);
GPIOPinConfigure(GPIO_PB4_T1CCP0);
}