interrupt handling

Dependencies:  

Committer:
soumi_ghsoh
Date:
Tue Apr 07 20:06:51 2015 +0000
Revision:
7:96baf1b2fd07
Parent:
6:3c510c297e2f
Child:
9:9266e0109d26
added PollNFC(), MemReadReqNFC(), 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"
soumi_ghsoh 7:96baf1b2fd07 22
rwclough 1:1eb96189824d 23 SPI spi(p25, p28, p29); // MOSI, MISO, SCLK
soumi_ghsoh 5:93c612f43ec2 24 // Slave Select (SS)
rwclough 1:1eb96189824d 25 Serial pc(USBTX, USBRX); // Serial communication over USB with PC
rwclough 3:eaae5433ab45 26 DigitalOut heartbeatLED(LED4); // "Heartbeat" LED
rwclough 3:eaae5433ab45 27 DigitalOut debug2LED(LED2); // "Debug2" LED
rwclough 3:eaae5433ab45 28 DigitalOut ISO15693LED(LED3); // "Detected ISO15693 tag" LED
rwclough 3:eaae5433ab45 29 DigitalOut debug1LED(LED1); // "Debug1" LED
soumi_ghsoh 7:96baf1b2fd07 30 //DigitalInOut ook_ask(p6); // Control ASK/OOK pin on TRF7970
soumi_ghsoh 7:96baf1b2fd07 31 //DigitalOut mod(p5); // Control MOD pin on TRF7970
soumi_ghsoh 7:96baf1b2fd07 32 InterruptIn readerInt(p7);
rwclough 3:eaae5433ab45 33 DigitalOut testPin(p1);
rwclough 3:eaae5433ab45 34
rwclough 2:bd5afc5aa139 35 uint8_t buf[300];
soumi_ghsoh 7:96baf1b2fd07 36 uint8_t noBytes=0;
rwclough 0:5622c60e9d3a 37
soumi_ghsoh 7:96baf1b2fd07 38 uint8_t found=0;
soumi_ghsoh 7:96baf1b2fd07 39 bool tagFound=0;
rwclough 2:bd5afc5aa139 40 int main()
soumi_ghsoh 6:3c510c297e2f 41 {
soumi_ghsoh 6:3c510c297e2f 42 pc.baud(115200);
soumi_ghsoh 7:96baf1b2fd07 43 readerInt.rise(&handlerNFC);
soumi_ghsoh 6:3c510c297e2f 44 PowerUpNFC();
soumi_ghsoh 6:3c510c297e2f 45 SpiInit(); //spi=1Mhz
soumi_ghsoh 6:3c510c297e2f 46 NFCInit();
soumi_ghsoh 6:3c510c297e2f 47 wait_ms(1);
soumi_ghsoh 6:3c510c297e2f 48 RegisterReInitNFC();
soumi_ghsoh 6:3c510c297e2f 49 RegistersReadNFC();
soumi_ghsoh 6:3c510c297e2f 50 while(1)
soumi_ghsoh 7:96baf1b2fd07 51 {
soumi_ghsoh 7:96baf1b2fd07 52 MemReadReqNFC();
soumi_ghsoh 7:96baf1b2fd07 53 if(found==1)
soumi_ghsoh 7:96baf1b2fd07 54 {
soumi_ghsoh 7:96baf1b2fd07 55 ReadNFC();
soumi_ghsoh 7:96baf1b2fd07 56
soumi_ghsoh 7:96baf1b2fd07 57 printf("read single block:");
soumi_ghsoh 7:96baf1b2fd07 58 for(uint8_t i=0; i<noBytes; i++)
soumi_ghsoh 7:96baf1b2fd07 59 printf("%X ", buf[i]);
soumi_ghsoh 7:96baf1b2fd07 60 printf("\r\n");
soumi_ghsoh 7:96baf1b2fd07 61 found=0;
soumi_ghsoh 7:96baf1b2fd07 62 }
soumi_ghsoh 7:96baf1b2fd07 63 else
soumi_ghsoh 7:96baf1b2fd07 64 {printf("tnf1 \r\n");
soumi_ghsoh 7:96baf1b2fd07 65 }
soumi_ghsoh 7:96baf1b2fd07 66 InventoryReqNFC();
soumi_ghsoh 7:96baf1b2fd07 67 if(found==1)
soumi_ghsoh 7:96baf1b2fd07 68 {
soumi_ghsoh 7:96baf1b2fd07 69 ReadNFC();
soumi_ghsoh 7:96baf1b2fd07 70 printf("tag id:");
soumi_ghsoh 7:96baf1b2fd07 71 for(uint8_t i=0; i<noBytes; i++)
soumi_ghsoh 7:96baf1b2fd07 72 printf("%X ", buf[i]);
soumi_ghsoh 7:96baf1b2fd07 73 printf("\r\n");
soumi_ghsoh 7:96baf1b2fd07 74 found=0;
soumi_ghsoh 7:96baf1b2fd07 75 }
soumi_ghsoh 7:96baf1b2fd07 76 else
soumi_ghsoh 7:96baf1b2fd07 77 {printf("tnf2 \r\n");
soumi_ghsoh 7:96baf1b2fd07 78 }
soumi_ghsoh 6:3c510c297e2f 79 }
soumi_ghsoh 6:3c510c297e2f 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
soumi_ghsoh 5:93c612f43ec2 100
soumi_ghsoh 5:93c612f43ec2 101
soumi_ghsoh 5:93c612f43ec2 102
soumi_ghsoh 5:93c612f43ec2 103
soumi_ghsoh 5:93c612f43ec2 104
soumi_ghsoh 5:93c612f43ec2 105
soumi_ghsoh 5:93c612f43ec2 106
soumi_ghsoh 5:93c612f43ec2 107 //// Setup LEDs
soumi_ghsoh 5:93c612f43ec2 108 // heartbeatLED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 109 // ISO15693LED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 110 // debug1LED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 111 // debug2LED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 112
soumi_ghsoh 5:93c612f43ec2 113 //for (uint8_t i=0; i<4; i++) {
soumi_ghsoh 5:93c612f43ec2 114 // heartbeatLED = LED_ON;
soumi_ghsoh 5:93c612f43ec2 115 // ISO15693LED = LED_ON;
soumi_ghsoh 5:93c612f43ec2 116 // debug1LED = LED_ON;
soumi_ghsoh 5:93c612f43ec2 117 // wait_ms(100);
soumi_ghsoh 5:93c612f43ec2 118 // heartbeatLED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 119 // ISO15693LED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 120 // debug1LED = LED_OFF;
soumi_ghsoh 5:93c612f43ec2 121 // wait_ms(100);
soumi_ghsoh 5:93c612f43ec2 122 // }
soumi_ghsoh 5:93c612f43ec2 123 //
rwclough 3:eaae5433ab45 124 // Ticker heartbeat;
rwclough 3:eaae5433ab45 125 // heartbeat.attach(blinkHeartbeatLED, 1);
rwclough 3:eaae5433ab45 126 // printf("LEDs, ");
soumi_ghsoh 5:93c612f43ec2 127 //===============================================================
rwclough 1:1eb96189824d 128 // Setup the SPI interface
soumi_ghsoh 5:93c612f43ec2 129 // spi.format(8, 1); // 8 bit data, mode = 1 (transition on rising edge, sample on falling edge)
soumi_ghsoh 5:93c612f43ec2 130 // spi.frequency(1000000); // SCLK = 1 MHz
soumi_ghsoh 5:93c612f43ec2 131 //// printf("SPI, ");
soumi_ghsoh 5:93c612f43ec2 132 //
soumi_ghsoh 5:93c612f43ec2 133 // // Set On-Off Keying modulation
soumi_ghsoh 5:93c612f43ec2 134 // ook_ask.output();
soumi_ghsoh 5:93c612f43ec2 135 // ook_ask = 1;
soumi_ghsoh 5:93c612f43ec2 136 //// printf("OOK, ");
soumi_ghsoh 5:93c612f43ec2 137 //
soumi_ghsoh 5:93c612f43ec2 138 // // Apply initial settings to the TRF7970
soumi_ghsoh 5:93c612f43ec2 139 // testPin=1;
soumi_ghsoh 5:93c612f43ec2 140 // trf797xInitialSettings();
soumi_ghsoh 5:93c612f43ec2 141 //// printf("Initialized, ");
soumi_ghsoh 5:93c612f43ec2 142 // testPin=0;
soumi_ghsoh 5:93c612f43ec2 143 // // Tri-state OOK pin
soumi_ghsoh 5:93c612f43ec2 144 // ook_ask.input();
soumi_ghsoh 5:93c612f43ec2 145 // ook_ask.mode(PullUp);
soumi_ghsoh 5:93c612f43ec2 146 //
soumi_ghsoh 5:93c612f43ec2 147 // readerMode = 0x00;
soumi_ghsoh 5:93c612f43ec2 148 //=============================================================
rwclough 3:eaae5433ab45 149 /*
rwclough 3:eaae5433ab45 150 // Test: Write 0xAA to MODULATOR_CONTROL, then verify by reading MODULATOR_CONTROL.
rwclough 3:eaae5433ab45 151 // printf("\r\n");
rwclough 3:eaae5433ab45 152 buffer[0] = MODULATOR_CONTROL;
rwclough 3:eaae5433ab45 153 buffer[1] = 0xAA;
rwclough 3:eaae5433ab45 154 // printf("BEFORE WR: buffer[0]: %X buffer[1]: %X\r\n", buffer[0], buffer[1]);
rwclough 3:eaae5433ab45 155 spiWriteSingle(buffer, 2);
rwclough 3:eaae5433ab45 156 // printf("AFTER WR: buffer[0]: %X buffer[1]: %X\r\n", buffer[0], buffer[1]);
rwclough 3:eaae5433ab45 157 spiReadSingle(buffer, 1);
rwclough 3:eaae5433ab45 158 // printf("AFTER RD: buffer[0]: %X buffer[1]: %X\r\n", buffer[0], buffer[1]);
rwclough 3:eaae5433ab45 159 // printf("\r\n");
rwclough 3:eaae5433ab45 160 */
rwclough 1:1eb96189824d 161
soumi_ghsoh 5:93c612f43ec2 162 // printf("\r\nFinished Init\r\n");
rwclough 4:9ab0d84bbd07 163
rwclough 1:1eb96189824d 164 // Setup interrupt from TRF7970
soumi_ghsoh 5:93c612f43ec2 165 // testPin=1;
soumi_ghsoh 5:93c612f43ec2 166 //========================
soumi_ghsoh 5:93c612f43ec2 167 // trf797xSetupIrq();
soumi_ghsoh 5:93c612f43ec2 168 //======================
soumi_ghsoh 5:93c612f43ec2 169 // testPin=0;
rwclough 3:eaae5433ab45 170 // printf("IRQ setup, ");
rwclough 1:1eb96189824d 171
rwclough 3:eaae5433ab45 172 // printf("finished init.\r\n\r\n");
rwclough 3:eaae5433ab45 173
soumi_ghsoh 5:93c612f43ec2 174 // while(1) { // changed TRUE to 1 $SG
soumi_ghsoh 5:93c612f43ec2 175 // iso15693FindTag();
soumi_ghsoh 5:93c612f43ec2 176 // }
soumi_ghsoh 5:93c612f43ec2 177 //
soumi_ghsoh 5:93c612f43ec2 178 //} // End of main()