FRDM-K64 USB air mouse demo

Dependencies:   FXOS8700Q USBDevice mbed

Fork of FRDM-K64_USB by Augusto Panecatl

USB air mouse demo modified USB Analog Joystick with Low Power Mode Demo

Committer:
julioefajardo
Date:
Tue Jun 23 02:53:31 2015 +0000
Revision:
2:cb6377d909e0
Parent:
1:b9ea91c4c533
Joystick USB with Low Power Mode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
APanecatl 0:d50fb46005fd 1 #include "mbed.h"
APanecatl 0:d50fb46005fd 2 #include "USBMouse.h"
julioefajardo 2:cb6377d909e0 3 #include "FXOS8700Q.h"
APanecatl 0:d50fb46005fd 4
julioefajardo 1:b9ea91c4c533 5 DigitalIn RightClick(PTC6);
julioefajardo 1:b9ea91c4c533 6 DigitalIn LeftClick(PTA4);
julioefajardo 2:cb6377d909e0 7 DigitalIn Click(PTC11);
julioefajardo 1:b9ea91c4c533 8 DigitalOut BlueLed(LED3);
julioefajardo 2:cb6377d909e0 9 DigitalOut GreenLed(LED2);
julioefajardo 2:cb6377d909e0 10 Ticker flipper;
APanecatl 0:d50fb46005fd 11 USBMouse mouse;
julioefajardo 1:b9ea91c4c533 12
julioefajardo 1:b9ea91c4c533 13 AnalogIn AnIn0(A0);
julioefajardo 1:b9ea91c4c533 14 AnalogIn AnIn1(A1);
julioefajardo 1:b9ea91c4c533 15
julioefajardo 2:cb6377d909e0 16 FXOS8700Q_acc acc( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); // Proper Ports and I2C Address for K64F Freedom board
julioefajardo 2:cb6377d909e0 17
julioefajardo 2:cb6377d909e0 18 Serial pc(USBTX, USBRX);
julioefajardo 2:cb6377d909e0 19
julioefajardo 2:cb6377d909e0 20 void flip() {
julioefajardo 2:cb6377d909e0 21 GreenLed = !GreenLed;
julioefajardo 2:cb6377d909e0 22 }
julioefajardo 2:cb6377d909e0 23
julioefajardo 2:cb6377d909e0 24 void LLW_IRQHandler(void){
julioefajardo 2:cb6377d909e0 25 if (LLWU_F2 & LLWU_F2_WUF11_MASK) {
julioefajardo 2:cb6377d909e0 26 LLWU_F2 |= LLWU_F2_WUF11_MASK; // write one to clear the flag
julioefajardo 2:cb6377d909e0 27 }
julioefajardo 2:cb6377d909e0 28 }
julioefajardo 2:cb6377d909e0 29
julioefajardo 2:cb6377d909e0 30 void LLW_Init(void){
julioefajardo 2:cb6377d909e0 31 LLWU_F2 |= LLWU_F2_WUF11_MASK;
julioefajardo 2:cb6377d909e0 32 LLWU_PE3 = 0x80;
julioefajardo 2:cb6377d909e0 33 LLWU_ME = 0x01;
julioefajardo 2:cb6377d909e0 34 LLWU_RST = 0x01;
julioefajardo 2:cb6377d909e0 35 }
julioefajardo 2:cb6377d909e0 36
julioefajardo 2:cb6377d909e0 37 void Enter_VLLS0(void){
julioefajardo 2:cb6377d909e0 38 volatile unsigned int dummyread;
julioefajardo 2:cb6377d909e0 39 int i;
julioefajardo 2:cb6377d909e0 40 SMC_PMPROT = SMC_PMPROT_AVLLS_MASK;
julioefajardo 2:cb6377d909e0 41 if ((SMC_PMSTAT & SMC_PMSTAT_PMSTAT_MASK)== 4){
julioefajardo 2:cb6377d909e0 42 SMC_PMCTRL &= ~SMC_PMCTRL_RUNM_MASK; // go back to RUN mode temporarily
julioefajardo 2:cb6377d909e0 43 for (i=0;i<0xff;i++)
julioefajardo 2:cb6377d909e0 44 {
julioefajardo 2:cb6377d909e0 45 if ((SMC_PMSTAT & SMC_PMSTAT_PMSTAT_MASK)== 1)
julioefajardo 2:cb6377d909e0 46 break;
julioefajardo 2:cb6377d909e0 47 }
julioefajardo 2:cb6377d909e0 48 }
julioefajardo 2:cb6377d909e0 49 /* Set the STOPM field to 0b100 for VLLS0 mode */
julioefajardo 2:cb6377d909e0 50 SMC_PMCTRL &= ~SMC_PMCTRL_STOPM_MASK;
julioefajardo 2:cb6377d909e0 51 SMC_PMCTRL |= SMC_PMCTRL_STOPM(0x4);
julioefajardo 2:cb6377d909e0 52 /* set VLLSM = 00 * and PORPO = 1 */
julioefajardo 2:cb6377d909e0 53 SMC_VLLSCTRL &= ~SMC_VLLSCTRL_VLLSM_MASK;
julioefajardo 2:cb6377d909e0 54 SMC_VLLSCTRL = SMC_VLLSCTRL_VLLSM(0) | SMC_VLLSCTRL_PORPO_MASK;
julioefajardo 2:cb6377d909e0 55 /*wait for write to complete to SMC before stopping core */
julioefajardo 2:cb6377d909e0 56 dummyread = SMC_VLLSCTRL;
julioefajardo 2:cb6377d909e0 57 dummyread++;
julioefajardo 2:cb6377d909e0 58 /* Now execute the stop instruction to go into VLLS0 */
julioefajardo 2:cb6377d909e0 59 /* Set the SLEEPDEEP bit to enable deep sleep mode (STOP) */
julioefajardo 2:cb6377d909e0 60 //SCB->SCR |= SCB_SCR_SLEEPDEEP_MASK;
julioefajardo 2:cb6377d909e0 61 SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
julioefajardo 2:cb6377d909e0 62 __wfi();
julioefajardo 2:cb6377d909e0 63 }
julioefajardo 2:cb6377d909e0 64
APanecatl 0:d50fb46005fd 65 int main()
APanecatl 0:d50fb46005fd 66 {
julioefajardo 2:cb6377d909e0 67 float faX, faY, faZ;
julioefajardo 1:b9ea91c4c533 68 float posx, posy;
julioefajardo 2:cb6377d909e0 69 float pastx, pasty;
APanecatl 0:d50fb46005fd 70 int16_t x = 0;
APanecatl 0:d50fb46005fd 71 int16_t y = 0;
julioefajardo 2:cb6377d909e0 72 //Initializations
julioefajardo 2:cb6377d909e0 73 acc.enable();
julioefajardo 2:cb6377d909e0 74 LLW_Init();
julioefajardo 2:cb6377d909e0 75 //Interrupts
julioefajardo 2:cb6377d909e0 76 flipper.attach(&flip, 0.1);
julioefajardo 2:cb6377d909e0 77 NVIC_EnableIRQ(LLW_IRQn);
APanecatl 0:d50fb46005fd 78
APanecatl 0:d50fb46005fd 79 while (1)
APanecatl 0:d50fb46005fd 80 {
julioefajardo 1:b9ea91c4c533 81 if(LeftClick) mouse.release(MOUSE_LEFT);
julioefajardo 1:b9ea91c4c533 82 else mouse.press(MOUSE_LEFT);
julioefajardo 1:b9ea91c4c533 83
julioefajardo 1:b9ea91c4c533 84 if(RightClick) mouse.release(MOUSE_RIGHT);
julioefajardo 1:b9ea91c4c533 85 else mouse.press(MOUSE_RIGHT);
julioefajardo 1:b9ea91c4c533 86
julioefajardo 1:b9ea91c4c533 87 BlueLed = Click;
APanecatl 0:d50fb46005fd 88
julioefajardo 2:cb6377d909e0 89 acc.getX(&faX);
julioefajardo 2:cb6377d909e0 90 if(faX>0.5f) Enter_VLLS0();
julioefajardo 2:cb6377d909e0 91 //pc.printf("X=%1.4f \r",faX);
julioefajardo 2:cb6377d909e0 92
julioefajardo 1:b9ea91c4c533 93 posx=AnIn0.read();
julioefajardo 1:b9ea91c4c533 94 posy=AnIn1.read();
julioefajardo 2:cb6377d909e0 95 x = -800*(posx-pastx);
julioefajardo 2:cb6377d909e0 96 y = 800*(posy-pasty);
julioefajardo 1:b9ea91c4c533 97
APanecatl 0:d50fb46005fd 98 mouse.move(x, y);
julioefajardo 1:b9ea91c4c533 99
julioefajardo 2:cb6377d909e0 100 pastx = posx;
julioefajardo 2:cb6377d909e0 101 pasty = posy;
julioefajardo 1:b9ea91c4c533 102
julioefajardo 1:b9ea91c4c533 103 wait(0.01);
APanecatl 0:d50fb46005fd 104 }
APanecatl 0:d50fb46005fd 105 }