3054|0

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【分享】系统频率的设置与精确延时问题 [复制链接]

/********************************************************************
程序名称:系统频率设置&精确延时
硬件环境: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按照指定的时间间隔进行闪烁
}
}

 
点赞 关注
个人签名人生本来就是一个不能解的方程式。而我是方程式里的-X

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表