/******************************************************************** 程序名称:系统频率设置&精确延时 硬件环境:EKK-LM3S9B92-CD-572 软件环境:keil 4.12 创建日期:2010.11.7 修改日期:2010.11.8 作 者:牙小狼 QQ:398968891 Email:xiaolang.ya@gmail.com 版 本:R1.2 程序说明: 1、根据LED闪烁情况可以看出频率设置的效果。 2、延时函数在低频情况下可能有一定的误差,因为库函数的调用,以及延时的 计算会消耗一定的时间。 更新说明: 1、发现无法使用MAP_SysCtlDelay(),必须改为SysCtlDelay(),否则会跑死 原因暂时不明。 ********************************************************************/
//----------------------HEADER FILE 头文件-------------------------// #define TARGET_IS_TEMPEST_RC1 #include "../inc/hw_memmap.h" //提供内存地址映射的支持 #include "../inc/hw_types.h" //提供数据类型的支持 #include "../driverlib/gpio.h" //提供GPIO的API支持 #include "../driverlib/sysctl.h" //提供系统控制的API支持 #include "../driverlib/rom.h" //提供ROM内API的支持 #include "../driverlib/rom_map.h" //提供MAP_这种定义的支持
//--------------------MAVRO DEFINITION 宏定义----------------------// #define DELAY_US(n) SysCtlDelay(n * (MAP_SysCtlClockGet() / 3000000)) #define DELAY_MS(n) SysCtlDelay(n * (MAP_SysCtlClockGet() / 3000)) #define DELAY_S(n) SysCtlDelay(n * (MAP_SysCtlClockGet() / 3))
//-----------------FUNCTION PROTOTYPES 函数声明--------------------// void LED_blinking(unsigned long ultimes,unsigned long ulloop);
/******************************************************************** 函数名称:LED_blinking() 函数入口:ultimes:闪烁次数 ulloop:间隔的时钟周期 函数出口:无 函数说明:LED闪烁函数,实际效果和系统频率有关 ********************************************************************/ void LED_blinking(unsigned long ultimes,unsigned long ulloop) { unsigned long i,j; for(i=0x0000;i<ultimes;i++) { for(j=0x0000;j<ulloop;j++); MAP_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 1); for(j=0x0000;j<ulloop;j++); MAP_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 0); } } /******************************************************************** 函数名称:main() 函数入口:务 函数出口:无 函数说明:系统主函数 ********************************************************************/ int main(void) { MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); //使能PD端口 MAP_GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_0); //PD0设置为输出
MAP_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | \ SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); //外部频率16MHZ,PLL倍频至80HMZ LED_blinking(10,500000);
MAP_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | \ SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); //外部频率16MHZ,不分频 LED_blinking(10,500000);
MAP_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_OSC | \ SYSCTL_OSC_INT); //内部晶振4分频,即4MHZ LED_blinking(10,500000);
while (1) { MAP_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 1); DELAY_MS(500); MAP_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 0); DELAY_MS(500); //LED按照指定的时间间隔进行闪烁 } }
|