1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| #include <stdint.h> #include <stdbool.h> #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "inc/hw_ints.h" #include "inc/hw_memmap.h" #include "inc/hw_pwm.h" #include "inc/hw_timer.h" #include "driverlib/debug.h" #include "driverlib/timer.h" #include "driverlib/fpu.h" #include "driverlib/gpio.h" #include "driverlib/pin_map.h" #include "driverlib/rom.h" #include "driverlib/rom_map.h" #include "driverlib/sysctl.h" #include "driverlib/uart.h" #include "utils/uartstdio.h" #include "driverlib/systick.h" #include "driverlib/interrupt.h" #include "driverlib/pwm.h"
#define delay(ms) ROM_SysCtlDelay(clock*ms/3000)
int clock; void ConfigureUART();
void prt_f(float w){ if(w>0){ UARTprintf("%d.",(int)w); }else{ UARTprintf("0."); } int tem=(int)(w*10000000)%1000000; if(tem<1000000)UARTprintf("0"); if(tem<100000)UARTprintf("0"); if(tem<10000)UARTprintf("0"); if(tem<1000)UARTprintf("0"); if(tem<100)UARTprintf("0"); if(tem<10)UARTprintf("0"); if(tem<1)UARTprintf("0"); UARTprintf("%d",tem); return ; }
bool detection_queue[110]; int detection_index=0; bool state=false; long long duration[110]; int message_index=0; long long tick=0; int threshold=12;
void WTimer1AIntHandler(){ unsigned long ulstatus = TimerIntStatus(WTIMER1_BASE,TIMER_TIMA_TIMEOUT); TimerIntClear(WTIMER1_BASE, ulstatus); int ReadPin1 = GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4); int flag=((ReadPin1&GPIO_PIN_4) != GPIO_PIN_4); detection_queue[detection_index]=flag; int i=0,sum=0; for(i=0;i<=threshold;i++)sum+=(int)detection_queue[detection_index-i]; if(tick>threshold){ if(sum==threshold&&state==false){ state=true; duration[message_index]=tick; } if(sum==0&&state==true){ state=false; duration[message_index]=tick-duration[message_index]; UARTprintf("bottom up. message index is %d\nduration:%d\n",message_index,duration[message_index]); message_index++; message_index%=110; } } tick++; detection_index++; detection_index%=110; return ; }
void Configurebottom(){ ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER1); TimerConfigure(WTIMER1_BASE,TIMER_CFG_PERIODIC); TimerLoadSet64(WTIMER1_BASE, clock/500); TimerIntRegister(WTIMER1_BASE, TIMER_A, WTimer1AIntHandler); IntMasterEnable(); TimerIntEnable(WTIMER1_BASE, TIMER_TIMA_TIMEOUT); IntEnable(INT_WTIMER1A); TimerEnable(WTIMER1_BASE, TIMER_A); }
void ConfigureEverything(){ FPUEnable(); FPULazyStackingEnable(); SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN); clock=SysCtlClockGet(); ConfigureUART(); Configurebottom(); }
int main(){ ConfigureEverything(); }
void ConfigureUART(){ ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); ROM_GPIOPinConfigure(GPIO_PA0_U0RX); ROM_GPIOPinConfigure(GPIO_PA1_U0TX); ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); UARTStdioConfig(0, 115200, 16000000); }
|