interrupt handling

Dependencies:  

Committer:
soumi_ghsoh
Date:
Thu Apr 02 21:10:48 2015 +0000
Revision:
6:3c510c297e2f
Parent:
5:93c612f43ec2
Child:
7:96baf1b2fd07
Added ReadNFC(), InventoryReqNFC()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rwclough 1:1eb96189824d 1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
rwclough 2:bd5afc5aa139 2 Filename: main.cpp
rwclough 1:1eb96189824d 3 Description: Interface nRF51-DK eval board to TRF7970 eval board
rwclough 1:1eb96189824d 4 to test the suitability of the TRF7970 NFC chip
rwclough 1:1eb96189824d 5 for use in Gymtrack products.
rwclough 1:1eb96189824d 6 The nRF51-DK board has an nRF51422 MCU.
rwclough 1:1eb96189824d 7 Copyright (C) 2015 Gymtrack, Inc.
rwclough 1:1eb96189824d 8 Author: Ron Clough
rwclough 1:1eb96189824d 9 Date: 2015-02-26
rwclough 1:1eb96189824d 10
rwclough 1:1eb96189824d 11 Changes:
rwclough 1:1eb96189824d 12 Rev Date Who Details
rwclough 1:1eb96189824d 13 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rwclough 1:1eb96189824d 14 0.0 2015-02-26 RWC Original version.
rwclough 1:1eb96189824d 15
rwclough 1:1eb96189824d 16 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
rwclough 0:5622c60e9d3a 17
rwclough 1:1eb96189824d 18 #include "mbed.h"
soumi_ghsoh 5:93c612f43ec2 19
soumi_ghsoh 5:93c612f43ec2 20 //#include "NFC_7970.h"
rwclough 1:1eb96189824d 21 #include "readerComm.h"
rwclough 2:bd5afc5aa139 22 #include "interruptStuff.h"
soumi_ghsoh 6:3c510c297e2f 23 #include "HardwareTimer.h"
rwclough 1:1eb96189824d 24 SPI spi(p25, p28, p29); // MOSI, MISO, SCLK
soumi_ghsoh 5:93c612f43ec2 25 // Slave Select (SS)
rwclough 1:1eb96189824d 26 Serial pc(USBTX, USBRX); // Serial communication over USB with PC
rwclough 3:eaae5433ab45 27 DigitalOut heartbeatLED(LED4); // "Heartbeat" LED
rwclough 3:eaae5433ab45 28 DigitalOut debug2LED(LED2); // "Debug2" LED
rwclough 3:eaae5433ab45 29 DigitalOut ISO15693LED(LED3); // "Detected ISO15693 tag" LED
rwclough 3:eaae5433ab45 30 DigitalOut debug1LED(LED1); // "Debug1" LED
rwclough 4:9ab0d84bbd07 31 DigitalInOut ook_ask(p6); // Control ASK/OOK pin on TRF7970
rwclough 1:1eb96189824d 32 DigitalOut mod(p5); // Control MOD pin on TRF7970
rwclough 0:5622c60e9d3a 33
rwclough 3:eaae5433ab45 34 DigitalOut testPin(p1);
rwclough 3:eaae5433ab45 35
rwclough 2:bd5afc5aa139 36 uint8_t buffer[2];
rwclough 2:bd5afc5aa139 37 int8_t rxtxState = 1; // Transmit/Receive byte count
rwclough 2:bd5afc5aa139 38 uint8_t buf[300];
rwclough 2:bd5afc5aa139 39 uint8_t irqRegister = 0x01; // Interrupt register
rwclough 3:eaae5433ab45 40 volatile uint8_t irqFlag = 0x00;
rwclough 2:bd5afc5aa139 41 uint8_t rxErrorFlag = 0x00;
rwclough 3:eaae5433ab45 42 uint8_t readerMode; // Determines how interrupts will be handled
rwclough 2:bd5afc5aa139 43 int16_t nfc_state;
rwclough 2:bd5afc5aa139 44 uint8_t nfc_protocol;
rwclough 2:bd5afc5aa139 45 uint8_t active;
rwclough 2:bd5afc5aa139 46 uint8_t tagFlag;
rwclough 3:eaae5433ab45 47 uint8_t irqCount = 0;
rwclough 0:5622c60e9d3a 48
rwclough 4:9ab0d84bbd07 49 uint8_t debugBuffer[1000]; // Capture data for analysis
rwclough 4:9ab0d84bbd07 50 uint8_t bufIdx=0;
soumi_ghsoh 5:93c612f43ec2 51 extern uint8_t turnRFOn[2];
rwclough 4:9ab0d84bbd07 52
soumi_ghsoh 5:93c612f43ec2 53 extern uint8_t testcommand[2];
soumi_ghsoh 6:3c510c297e2f 54
rwclough 0:5622c60e9d3a 55
rwclough 2:bd5afc5aa139 56 int main()
soumi_ghsoh 6:3c510c297e2f 57 {
soumi_ghsoh 6:3c510c297e2f 58 pc.baud(115200);
soumi_ghsoh 6:3c510c297e2f 59 PowerUpNFC();
soumi_ghsoh 6:3c510c297e2f 60 SpiInit(); //spi=1Mhz
soumi_ghsoh 6:3c510c297e2f 61 NFCInit();
soumi_ghsoh 6:3c510c297e2f 62 wait_ms(1);
soumi_ghsoh 6:3c510c297e2f 63 RegisterReInitNFC();
soumi_ghsoh 6:3c510c297e2f 64 RegistersReadNFC();
soumi_ghsoh 5:93c612f43ec2 65 //
soumi_ghsoh 6:3c510c297e2f 66 testPin=0;
soumi_ghsoh 6:3c510c297e2f 67 while(1)
soumi_ghsoh 6:3c510c297e2f 68 {InventoryReqNFC();
soumi_ghsoh 6:3c510c297e2f 69 //ReadNFC();
soumi_ghsoh 6:3c510c297e2f 70 //wait_ms(20);
soumi_ghsoh 6:3c510c297e2f 71 }
soumi_ghsoh 6:3c510c297e2f 72 }
soumi_ghsoh 5:93c612f43ec2 73
soumi_ghsoh 5:93c612f43ec2 74
soumi_ghsoh 5:93c612f43ec2 75
soumi_ghsoh 5:93c612f43ec2 76
soumi_ghsoh 5:93c612f43ec2 77
soumi_ghsoh 5:93c612f43ec2 78
soumi_ghsoh 5:93c612f43ec2 79
soumi_ghsoh 5:93c612f43ec2 80
soumi_ghsoh 5:93c612f43ec2 81
soumi_ghsoh 5:93c612f43ec2 82
soumi_ghsoh 5:93c612f43ec2 83
soumi_ghsoh 5:93c612f43ec2 84
soumi_ghsoh 5:93c612f43ec2 85
soumi_ghsoh 5:93c612f43ec2 86
soumi_ghsoh 5:93c612f43ec2 87
soumi_ghsoh 5:93c612f43ec2 88
soumi_ghsoh 5:93c612f43ec2 89
soumi_ghsoh 5:93c612f43ec2 90
soumi_ghsoh 5:93c612f43ec2 91
soumi_ghsoh 5:93c612f43ec2 92
soumi_ghsoh 5:93c612f43ec2 93
soumi_ghsoh 5:93c612f43ec2 94
soumi_ghsoh 5:93c612f43ec2 95
soumi_ghsoh 5:93c612f43ec2 96
soumi_ghsoh 5:93c612f43ec2 97
soumi_ghsoh 5:93c612f43ec2 98
soumi_ghsoh 5:93c612f43ec2 99 //// Setup LEDs
soumi_ghsoh 5:93c612f43ec2 100 // heartbeatLED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 101 // ISO15693LED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 102 // debug1LED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 103 // debug2LED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 104
soumi_ghsoh 5:93c612f43ec2 105 //for (uint8_t i=0; i<4; i++) {
soumi_ghsoh 5:93c612f43ec2 106 // heartbeatLED = LED_ON;
soumi_ghsoh 5:93c612f43ec2 107 // ISO15693LED = LED_ON;
soumi_ghsoh 5:93c612f43ec2 108 // debug1LED = LED_ON;
soumi_ghsoh 5:93c612f43ec2 109 // wait_ms(100);
soumi_ghsoh 5:93c612f43ec2 110 // heartbeatLED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 111 // ISO15693LED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 112 // debug1LED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 113 // wait_ms(100);
soumi_ghsoh 5:93c612f43ec2 114 // }
soumi_ghsoh 5:93c612f43ec2 115 //
rwclough 3:eaae5433ab45 116 // Ticker heartbeat;
rwclough 3:eaae5433ab45 117 // heartbeat.attach(blinkHeartbeatLED, 1);
rwclough 3:eaae5433ab45 118 // printf("LEDs, ");
soumi_ghsoh 5:93c612f43ec2 119 //===============================================================
rwclough 1:1eb96189824d 120 // Setup the SPI interface
soumi_ghsoh 5:93c612f43ec2 121 // spi.format(8, 1); // 8 bit data, mode = 1 (transition on rising edge, sample on falling edge)
soumi_ghsoh 5:93c612f43ec2 122 // spi.frequency(1000000); // SCLK = 1 MHz
soumi_ghsoh 5:93c612f43ec2 123 //// printf("SPI, ");
soumi_ghsoh 5:93c612f43ec2 124 //
soumi_ghsoh 5:93c612f43ec2 125 // // Set On-Off Keying modulation
soumi_ghsoh 5:93c612f43ec2 126 // ook_ask.output();
soumi_ghsoh 5:93c612f43ec2 127 // ook_ask = 1;
soumi_ghsoh 5:93c612f43ec2 128 //// printf("OOK, ");
soumi_ghsoh 5:93c612f43ec2 129 //
soumi_ghsoh 5:93c612f43ec2 130 // // Apply initial settings to the TRF7970
soumi_ghsoh 5:93c612f43ec2 131 // testPin=1;
soumi_ghsoh 5:93c612f43ec2 132 // trf797xInitialSettings();
soumi_ghsoh 5:93c612f43ec2 133 //// printf("Initialized, ");
soumi_ghsoh 5:93c612f43ec2 134 // testPin=0;
soumi_ghsoh 5:93c612f43ec2 135 // // Tri-state OOK pin
soumi_ghsoh 5:93c612f43ec2 136 // ook_ask.input();
soumi_ghsoh 5:93c612f43ec2 137 // ook_ask.mode(PullUp);
soumi_ghsoh 5:93c612f43ec2 138 //
soumi_ghsoh 5:93c612f43ec2 139 // readerMode = 0x00;
soumi_ghsoh 5:93c612f43ec2 140 //=============================================================
rwclough 3:eaae5433ab45 141 /*
rwclough 3:eaae5433ab45 142 // Test: Write 0xAA to MODULATOR_CONTROL, then verify by reading MODULATOR_CONTROL.
rwclough 3:eaae5433ab45 143 // printf("\r\n");
rwclough 3:eaae5433ab45 144 buffer[0] = MODULATOR_CONTROL;
rwclough 3:eaae5433ab45 145 buffer[1] = 0xAA;
rwclough 3:eaae5433ab45 146 // printf("BEFORE WR: buffer[0]: %X buffer[1]: %X\r\n", buffer[0], buffer[1]);
rwclough 3:eaae5433ab45 147 spiWriteSingle(buffer, 2);
rwclough 3:eaae5433ab45 148 // printf("AFTER WR: buffer[0]: %X buffer[1]: %X\r\n", buffer[0], buffer[1]);
rwclough 3:eaae5433ab45 149 spiReadSingle(buffer, 1);
rwclough 3:eaae5433ab45 150 // printf("AFTER RD: buffer[0]: %X buffer[1]: %X\r\n", buffer[0], buffer[1]);
rwclough 3:eaae5433ab45 151 // printf("\r\n");
rwclough 3:eaae5433ab45 152 */
rwclough 1:1eb96189824d 153
soumi_ghsoh 5:93c612f43ec2 154 // printf("\r\nFinished Init\r\n");
rwclough 4:9ab0d84bbd07 155
rwclough 1:1eb96189824d 156 // Setup interrupt from TRF7970
soumi_ghsoh 5:93c612f43ec2 157 // testPin=1;
soumi_ghsoh 5:93c612f43ec2 158 //========================
soumi_ghsoh 5:93c612f43ec2 159 // trf797xSetupIrq();
soumi_ghsoh 5:93c612f43ec2 160 //======================
soumi_ghsoh 5:93c612f43ec2 161 // testPin=0;
rwclough 3:eaae5433ab45 162 // printf("IRQ setup, ");
rwclough 1:1eb96189824d 163
rwclough 3:eaae5433ab45 164 // printf("finished init.\r\n\r\n");
rwclough 3:eaae5433ab45 165
soumi_ghsoh 5:93c612f43ec2 166 // while(1) { // changed TRUE to 1 $SG
soumi_ghsoh 5:93c612f43ec2 167 // iso15693FindTag();
soumi_ghsoh 5:93c612f43ec2 168 // }
soumi_ghsoh 5:93c612f43ec2 169 //
soumi_ghsoh 5:93c612f43ec2 170 //} // End of main()