LM3S9b96 系统延时和计数延时
函数原型:
void SysCtlDelay (unsigned long ulCount)
参数:
ulCount 是要执行的延时循环反复的次数。
描述:
该函数提供了一个产生恒定长度延时的方法。它是用用汇编写的,以保持跨越工具链的
延时一致,从而避免了在应用上依据工具链来调节延时的要求。
循环占用3个周期/循环。
返回:
无。
void Delay(unsigned long nCount)
{
for(; nCount != 0; nCount--);
}
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
/* 用于调试 PF1 <-> LED -----------------------------------------------------*/
#define LED_PERIPH SYSCTL_PERIPH_GPIOF
#define LED_PORT GPIO_PORTF_BASE
#define LED_PIN GPIO_PIN_1
#define LED_OFF 1 << 1
#define LED_ON ~(1 << 1) // 低电平点亮LED
void Delay(unsigned long nCount)
{
for(; nCount != 0; nCount--);
}
int main(void)
{
// Set the clocking to run directly from the crystal.
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
SysCtlPeripheralEnable(LED_PERIPH); // 使能LED所在的GPIO端口
GPIOPinTypeGPIOOutput(LED_PORT, LED_PIN); // 设置LED所在管脚为输出
while (1)
{
GPIOPinWrite(LED_PORT, LED_PIN, LED_ON); // 点亮LED
Delay(0xfff); // 实验测得延时2.5ms
GPIOPinWrite(LED_PORT, LED_PIN, LED_OFF); // 熄灭LED
Delay(0xfff); // 实验测得延时2.5ms
/*
GPIOPinWrite(LED_PORT, LED_PIN, LED_ON); // 点亮LED
SysCtlDelay(SysCtlClockGet() / 3000); // 精确延时1ms
GPIOPinWrite(LED_PORT, LED_PIN, LED_OFF); // 熄灭LED
SysCtlDelay(SysCtlClockGet() / 3000); // 精确延时1ms
*/
}
}
系统时钟 | 16M | 50M |
计数延时:Delay(0xfff); | 2.5ms | 819us |
系统延时:SysCtlDelay(SysCtlClockGet() / 3000); | 1ms | 1ms |
//*****************************************************************************
//
// 精确延时nms
//
//*****************************************************************************
void Delay(DWORD nms)
{
SysCtlDelay((SysCtlClockGet() / 3000) * nms);
}
评论