实验内容 :滴答定时器定时500Ms产生中断,在中断函数中使PE0所接的LED以0.1s周期闪烁
实验目的:熟悉滴答定时器的参数配置,GPIO管脚的高低电平操作。此滴答定时器常用于短时间的延时函数
//#include "main.h"
#include "inc\hw_memmap.h"
#include "inc\hw_ints.h"
#include "inc\hw_types.h"
#include "driverlib\sysctl.h"
#include "driverlib\gpio.h"
#include "driverlib\interrupt.h"
#include "driverlib\systick.h"
#include "type.h"
void ProtectJTAG(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);//2MA驱动能力,推挽方式 弱上拉
GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN);
while(GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_4) == 0)
{
;
}
}
void Delay(void) //延时100Ms
{
unsigned long i,j;
for(i=0;i<10;i++)
{
for(j=500000;j>0;j--);
}
}
void Systick_Init(void)
{
SysTickPeriodSet(500*SysCtlClockGet()/1000);//定时时钟为500mS
SysTickEnable();//使能系统时钟
SysTickIntEnable();//使能系统时钟中断
}
void GpioLedBlink(void) //PE0闪烁
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
GPIODirModeSet(GPIO_PORTE_BASE,GPIO_PIN_0,GPIO_DIR_MODE_OUT);
GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0,0x01);
Delay();
GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0,~0x01);
Delay();
}
void SysTick_ISR(void)//定时器中断处理函数
{
GpioLedBlink();
}
void main(void)
{
ProtectJTAG();
SysCtlClockSet( SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ );
Systick_Init();
while(1)
{
}
}
/*******************************************************************
**关于SysCtlDelay(ulcount),滴答定时器用作延时函数的说明,
**ulcount:延时周期计数 值,
**延时长度=3*ulcount*系统时钟周期。
*******************************************************************/
滴答定时器的中断无需清除,在调用其中断函数的时候系统会自动的清除起中断标志。在初始化时只需要设定其定时时间,打开相应的中断控制位
SysTick 的主要目的是为 RTOS 提供一个周期性中断,而它也可以用作其它简单定时目的。SysTick 中断处理程序并不需要清除 SysTick 中断源。当调用 SysTick 中断处理程序时,它将会由 NVIC 自动清除 SysTick 中断源。