LM3S1138入門8,軟復(fù)位
基于《Stellaris外設(shè)驅(qū)動庫》的SysCtl例程:軟件復(fù)位示例
掌握庫函數(shù)SysCtlReset()的用法。
程序運(yùn)行后,LED1和LED2交替閃爍數(shù)次,以表明正常工作了。稍后,由于執(zhí)行函數(shù)SysCtlReset()而導(dǎo)致芯片復(fù)位重來,LED1和LED2又會交替閃爍數(shù)次。如此反復(fù)。
主函數(shù):
// 包含必要的頭文件
#include "LED.H"
#include
#include
#include
#include
#include
#include
// 將較長的標(biāo)識符定義成較短的形式
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define SysCtlPeriDisable SysCtlPeripheralDisable
#define GPIOPinTypeIn GPIOPinTypeGPIOInput
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
#define GPIOPinTypeOD GPIOPinTypeGPIOOutputOD
// 定義KEY
#define KEY_PERIPH SYSCTL_PERIPH_GPIOG
#define KEY_PORT GPIO_PORTG_BASE
#define KEY_PIN GPIO_PIN_5
// 防止JTAG失效
void JTAG_Wait(void)
{
SysCtlPeriEnable(KEY_PERIPH); // 使能KEY所在的GPIO端口
GPIOPinTypeIn(KEY_PORT , KEY_PIN); // 設(shè)置KEY所在管腳為輸入
if ( GPIOPinRead(KEY_PORT , KEY_PIN) == 0x00 ) // 如果復(fù)位時按下KEY,則進(jìn)入
{
for (;;); // 死循環(huán),以等待JTAG連接
}
SysCtlPeriDisable(KEY_PERIPH); // 禁止KEY所在的GPIO端口
}
// 定義全局的系統(tǒng)時鐘變量
unsigned long TheSysClock = 12000000UL;
// 延時
void Delay(unsigned long ulVal)
{
while ( --ulVal != 0 );
}
// 主函數(shù)(程序入口)
int main(void)
{
int i;
JTAG_Wait(); // 防止JTAG失效,重要!
LED_Init(LED1 | LED2); // 初始化LED1和LED2
LED_On(LED1); // 點(diǎn)亮LED1
LED_Off(LED2); // 熄滅LED2
for ( i = 0; i < 6; i++ ) // 使LED閃爍數(shù)次,表明已復(fù)位
{
LED_Toggle(LED1 | LED2);
Delay(200 * (TheSysClock / 4000));
}
LED_Off(LED1 | LED2); // 熄滅LED
Delay(3500 * (TheSysClock / 4000)); // 延遲一段時間
SysCtlReset(); // 軟件復(fù)位
for (;;) // 不會執(zhí)行到這里
{
}
}