|
//*****************************************************************************
// 本程序控制口袋實(shí)驗(yàn)板上的3個(gè)LED指示燈,移位閃爍點(diǎn)亮,K2、K3、K4為中斷按鍵,分別控制紅燈、藍(lán)燈、綠燈的翻轉(zhuǎn)
// 藍(lán)色LED(D2)--PF0 綠色LED(D3)-PA4 紅色LED(D4)-PD6
//*****************************************************************************
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"//一些位帶操作的宏定義
#include "inc/hw_gpio.h"// hw_gpio.h - Defines and Macros for GPIO hardware.
#include "driverlib/sysctl.h"//系統(tǒng)時(shí)鐘
#include "driverlib/gpio.h"//gpio 定義
#include "driverlib/gpio.c"//gpio 定義
#include "driverlib/interrupt.c"//gpio 定義
#include "driverlib/interrupt.h"
#include <math.h>
#include "inc/hw_ints.h"
#include "inc/hw_nvic.h"
void GPIO_PORTA_ISR(void)//中斷處理子函數(shù)
{
unsigned char ucVal;
unsigned long ulStatus;//中斷狀態(tài)標(biāo)識
ulStatus = GPIOIntStatus(GPIO_PORTA_BASE, true); // 讀取中斷狀態(tài)
GPIOIntClear(GPIO_PORTA_BASE, ulStatus); // 清除中斷狀態(tài),重要
switch (ulStatus ) // 如果KEY的中斷狀態(tài)有效
{
case 0x04:
ucVal = GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_0); // 翻轉(zhuǎn)LED(藍(lán))
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0, ~ucVal);
SysCtlDelay(10000000); // 延時(shí)約10ms,消除按鍵抖動
while (GPIOPinRead(GPIO_PORTA_BASE, GPIO_PIN_2) == 0x00); // 等待KEY抬起
SysCtlDelay(10000000); // 延時(shí)約10ms,消除松鍵抖動
break;
case 0x08:
ucVal = GPIOPinRead(GPIO_PORTA_BASE, GPIO_PIN_4); // 翻轉(zhuǎn)LED(綠)
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4, ~ucVal);
SysCtlDelay(10000000); // 延時(shí)約10ms,消除按鍵抖動
while (GPIOPinRead(GPIO_PORTA_BASE, GPIO_PIN_3) == 0x00); // 等待KEY抬起
SysCtlDelay(10000000); // 延時(shí)約10ms,消除松鍵抖動
break;
}
}
void GPIO_PORTF_ISR(void)//中斷處理子函數(shù)
{
unsigned char ucVal;
unsigned long ulStatus;//中斷狀態(tài)標(biāo)識
ulStatus = GPIOIntStatus(GPIO_PORTF_BASE, true); // 讀取中斷狀態(tài)
GPIOIntClear(GPIO_PORTF_BASE, ulStatus); // 清除中斷狀態(tài),重要
switch (ulStatus ) // 如果KEY的中斷狀態(tài)有效
{
case 0x10:
ucVal = GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_6); // 翻轉(zhuǎn)LED(紅)
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6, ~ucVal);
SysCtlDelay(10000000); // 延時(shí)約10ms,消除按鍵抖動
while (GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4) == 0x00); // 等待KEY抬起
SysCtlDelay(10000000); // 延時(shí)約10ms,消除松鍵抖動
break;
}
}
//*****************************************************************************
// main 函數(shù),每個(gè)工程項(xiàng)目內(nèi)有且只有1個(gè)
//*****************************************************************************
int main(void)
{
//設(shè)置系統(tǒng)時(shí)鐘為50MHz
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHZ);
// 端口GPIO F使能
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); // 使能 GPIO F模塊
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; // 開鎖 PORT F
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= GPIO_PIN_0; // 解鎖 F0 引腳
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0; // 重新上鎖
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //使能GPIO A模塊
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); //使能GPIO D模塊
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0); // PF0設(shè)置為輸出
GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_4); // PA4設(shè)置為輸出
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_6); // PD6設(shè)置為輸出
//初始化三個(gè)燈的狀態(tài)
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,1<<0);//藍(lán)燈滅
SysCtlDelay(10000000);
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_4,1<<4);//綠燈滅
SysCtlDelay(10000000);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_6,1<<6);//紅燈滅
SysCtlDelay(10000000);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0<<0);//藍(lán)燈亮
SysCtlDelay(10000000);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,1<<0); // 藍(lán)燈滅
SysCtlDelay(10000000);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,0<<4); //綠燈亮
SysCtlDelay(10000000);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_4,1<<4); // 口袋板綠燈滅
SysCtlDelay(10000000);
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,0<<6); //口袋板紅燈亮
SysCtlDelay(10000000);
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,1<<6); //口袋板紅燈滅
//中斷初始化
GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_2); // PA2(K4)設(shè)置為輸入
GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_3); // PA3(K3)設(shè)置為輸入
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_4); // PF4(K2)設(shè)置為輸入
GPIOIntTypeSet(GPIO_PORTA_BASE, GPIO_PIN_2, GPIO_LOW_LEVEL);//設(shè)置GPIOPA2中斷
GPIOIntTypeSet(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_LOW_LEVEL);//設(shè)置GPIOPA3中斷
GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_LOW_LEVEL);//設(shè)置GPIOPF4中斷
GPIOIntEnable(GPIO_PORTA_BASE, GPIO_PIN_2); // 使能KEY所在管腳的中斷
GPIOIntEnable(GPIO_PORTA_BASE, GPIO_PIN_3);
GPIOIntEnable(GPIO_PORTF_BASE, GPIO_PIN_4);
IntEnable(INT_GPIOA);// 使能GPIOF端口總中斷
IntEnable(INT_GPIOF);
IntMasterEnable(); // 使能處理器總中斷
while(1) // 等待按鍵中斷
{
}
}
// end of main
|
|