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);
}


評論