?? main.c
字號:
#include <hw_types.h>
#include <hw_memmap.h>
#include <hw_ints.h>
#include <interrupt.h>
#include <sysctl.h>
#include <gpio.h>
#include <pwm.h>
#include <timer.h>
unsigned char flag=0;
unsigned long timerint;
void jtagWait(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
GPIODirModeSet(GPIO_PORTC_BASE,GPIO_PIN_5,GPIO_DIR_MODE_IN);
if(GPIOPinRead(GPIO_PORTC_BASE,GPIO_PIN_5)==0x20)
{
for(;;);
}
SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOC);
}
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);
jtagWait();
LcdInit();
KeyInit();
//用B0作為控制,B2作為接收
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_0);
GPIOPinTypeGPIOInput(GPIO_PORTB_BASE,GPIO_PIN_2);
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0,0);
//使用定時器0計時
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);
//以中斷方式控制
GPIOPinIntEnable(GPIO_PORTB_BASE,GPIO_PIN_2);
IntMasterEnable();
unsigned char key;
unsigned char str[8];
unsigned long i,j;
unsigned long time,dis;
while(1){
//按任意鍵開始
key=KeyRelease();
if(key==16)continue;
GPIOIntTypeSet(GPIO_PORTB_BASE,GPIO_PIN_2,GPIO_HIGH_LEVEL); //設(shè)B2允許高電平中斷
//發(fā)一個略大于10us
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0,1);
for(i=0;i<20;i++);
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0,0);
//正式開啟B2中斷
flag=2;
IntEnable(INT_GPIOB);
//等待計時結(jié)束,將會兩次進入中斷程序
while(flag!=1);
//計時完畢,計算顯示
time=3000000-147-timerint; //147為測得沒有高電平的指令運行所需的時間
dis=time*340/12000; //*聲速/2/6000
for(j=0;j<8;j++) str[j]='0';
str[8]='\0';
j=time;
i=1;
while(j>=10){
str[8-i]=j%10+48;
j=j/10;
i++;
}
str[8-i]=j+48;
LcdPst(0,1);
LcdWriteWord(&str);
for(j=0;j<8;j++) str[j]='0';
str[8]='\0';
j=dis;
i=1;
while(j>=10){
str[8-i]=j%10+48;
j=j/10;
i++;
}
str[8-i]=j+48;
LcdPst(0,2);
LcdWriteWord(&str);
}
}
void GPIO_Port_B_ISR(void)
{
unsigned long ulStatus;
ulStatus = GPIOPinIntStatus(GPIO_PORTB_BASE, true);
GPIOPinIntClear(GPIO_PORTB_BASE, ulStatus);
if (ulStatus & GPIO_PIN_2)
{
if(flag==2){ //高電平進入中斷,開定時器,開始計時,設(shè)為低電平中斷
TimerLoadSet(TIMER0_BASE, TIMER_A,3000000);
TimerEnable(TIMER0_BASE, TIMER_A);
GPIOIntTypeSet(GPIO_PORTB_BASE,GPIO_PIN_2,GPIO_LOW_LEVEL);
flag=0;
}else{
IntDisable(INT_GPIOB); 低電平進入中斷,關(guān)定時器,讀取,示意計時完畢
timerint=TimerValueGet(TIMER0_BASE, TIMER_A);
TimerDisable(TIMER0_BASE,TIMER_A);
flag=1;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -