interrupt handling

Dependencies:  

Revision:
3:eaae5433ab45
Parent:
2:bd5afc5aa139
Child:
4:9ab0d84bbd07
--- a/main.cpp	Thu Mar 05 20:16:40 2015 +0000
+++ b/main.cpp	Thu Mar 12 15:05:36 2015 +0000
@@ -23,24 +23,29 @@
 SPI         spi(p25, p28, p29); // MOSI, MISO, SCLK
 DigitalOut  CS(p19);            // Slave Select (SS)
 Serial      pc(USBTX, USBRX);   // Serial communication over USB with PC
-DigitalOut  heartbeatLED(LED1); // "Heartbeat" LED
-DigitalOut  ISO15693LED(LED2);  // "Detected ISO15693 tag" LED
-DigitalOut  ook_ask(p6);        // Control ASK/OOK pin on TRF7970
+DigitalOut  heartbeatLED(LED4); // "Heartbeat" LED
+DigitalOut  debug2LED(LED2);    // "Debug2" LED
+DigitalOut  ISO15693LED(LED3);  // "Detected ISO15693 tag" LED
+DigitalOut  debug1LED(LED1);    // "Debug1" LED
+DigitalInOut  ook_ask(p6);        // Control ASK/OOK pin on TRF7970
 DigitalOut  mod(p5);            // Control MOD pin on TRF7970
 DigitalOut  enable(p4);         // Control EN pin on TRF7970
 DigitalOut  enable2(p3);        // Control EN2 pin on TRF7970
 
+DigitalOut  testPin(p1);
+
 uint8_t     buffer[2];
 int8_t      rxtxState = 1;      // Transmit/Receive byte count
 uint8_t     buf[300];
 uint8_t     irqRegister = 0x01; // Interrupt register
-uint8_t     irqFlag = 0x00;
+volatile uint8_t     irqFlag = 0x00;
 uint8_t     rxErrorFlag = 0x00;
-uint8_t     readerMode = 0x00;  // Determines how interrupts will be handled
+uint8_t     readerMode;         // Determines how interrupts will be handled
 int16_t     nfc_state;
 uint8_t     nfc_protocol;
 uint8_t     active;
 uint8_t     tagFlag;
+uint8_t     irqCount = 0;
 
 void blinkHeartbeatLED(void)
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -53,7 +58,7 @@
 
 int main()
 {
-    // Power up sequence
+    // Power up sequence. See TRF7970A datasheet "SLOU43K August 2011 Revised April 20914" Figures 6-3 and 6-4.
     CS = 0; enable2 = 0; enable = 0;
     wait_ms(2);
     CS = 1;
@@ -63,37 +68,83 @@
     enable = 1;
     
     mod = 0;
-    
+    testPin = 0;
     //  Setup serial communication
     pc.baud(115200);
-    printf("\r\nInitialization: ");
+//    printf("\r\nInitialization: ");
+
+/*
+    //  After power up sequence, Chip Status = 0x81, Regulator Control = 0x80
+    *buffer = CHIP_STATUS_CONTROL;
+    spiReadContinuous(buffer, 2);
+    printf("\r\nChip Status: 0x%X\r\n", buffer[1]);
+    *buffer = REGULATOR_CONTROL;
+    spiReadContinuous(buffer, 2);
+    printf("Regulator Control: 0x%X\r\n", buffer[1]);
+*/
+
     
-    //  Setup heartbeat LED
+    //  Setup LEDs
     heartbeatLED = LED_OFF;
     ISO15693LED = LED_OFF;
-    Ticker  heartbeat;
-    heartbeat.attach(blinkHeartbeatLED, 1);
-    printf("Heartbeat, ");
+    debug1LED = LED_OFF;
+    debug2LED = LED_OFF;
+    /*
+    for (uint8_t i=0; i<4; i++) {
+        heartbeatLED = LED_ON;
+        ISO15693LED = LED_ON;
+        debug1LED = LED_ON;
+        wait_ms(100);
+        heartbeatLED = LED_OFF;
+        ISO15693LED = LED_OFF;
+        debug1LED = LED_OFF;
+        wait_ms(100);
+    }
+    */
+//    Ticker  heartbeat;
+//    heartbeat.attach(blinkHeartbeatLED, 1);
+//    printf("LEDs, ");
     
     //  Setup the SPI interface
-    spi.format(8, 3);       // 8 bit data, mode = 3
+    spi.format(8, 1);       // 8 bit data, mode = 1 (transition on rising edge, sample on falling edge)
     spi.frequency(1000000); // SCLK = 1 MHz
-    printf("SPI, ");
+//    printf("SPI, ");
     
     //  Set On-Off Keying modulation
+    ook_ask.output();
     ook_ask = 1;
-    printf("OOK, ");
+//    printf("OOK, ");
     
     //  Apply initial settings to the TRF7970
     initialSettings();
-    printf("Initialized, ");
+//    printf("Initialized, ");
+
+    //  Tri-state OOK pin
+    ook_ask.input();    // Maybe add pullup *****
+    
+    readerMode = 0x00;
+    
+    /*
+    //  Test: Write 0xAA to MODULATOR_CONTROL, then verify by reading MODULATOR_CONTROL.
+//    printf("\r\n");
+    buffer[0] = MODULATOR_CONTROL;
+    buffer[1] = 0xAA;
+//    printf("BEFORE WR: buffer[0]: %X  buffer[1]: %X\r\n", buffer[0], buffer[1]);
+    spiWriteSingle(buffer, 2);
+//    printf("AFTER WR:  buffer[0]: %X  buffer[1]: %X\r\n", buffer[0], buffer[1]);
+    spiReadSingle(buffer, 1);
+//    printf("AFTER RD:  buffer[0]: %X  buffer[1]: %X\r\n", buffer[0], buffer[1]);
+//    printf("\r\n");
+    */
     
     //  Setup interrupt from TRF7970
     setupIrq();
-    printf("IRQ setup and disabled, ");
+//    printf("IRQ setup, ");
     
-    printf("finished init.\r\n\r\n");
-    
-    iso15693FindTag();
+//    printf("finished init.\r\n\r\n");
+
+    while(TRUE) {
+        iso15693FindTag();
+    }
     
 }   // End of main()