Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 13:16a5b43ac874, committed 2015-04-30
- Comitter:
- soumi_ghsoh
- Date:
- Thu Apr 30 23:30:55 2015 +0000
- Parent:
- 12:336524cf63de
- Commit message:
- 2015apr30
Changed in this revision
--- a/host.c Fri Apr 10 23:16:44 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,478 +0,0 @@
-////void trf797xInitialSettings(void)
-////// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-////// trf797xInitialSettings()
-////// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-////{
-//// uint8_t mod_control[2];
-////
-//// mod_control[0] = SOFT_INIT;
-//// trf797xDirectCommand(mod_control);
-////
-//// mod_control[0] = IDLE;
-//// trf797xDirectCommand(mod_control);
-////
-//// mod_control[0] = MODULATOR_CONTROL;
-//// mod_control[1] = 0x21; // 6.78 MHz, OOK 100%
-//// trf797xWriteSingle(mod_control, 2);
-////
-//// mod_control[0] = MODULATOR_CONTROL;
-//// trf797xReadSingle(mod_control, 1);
-////// printf("\r\nMOD: 0x%02X 0x%02X\r\n", mod_control[0], mod_control[1]);
-////
-//// /*
-//// mod_control[0] = CHIP_STATUS_CONTROL;
-//// mod_control[1] = 0x01;
-//// trf797xWriteSingle(mod_control, 2);
-////
-//// mod_control[0] = CHIP_STATUS_CONTROL;
-//// trf797xReadSingle(mod_control, 1);
-//// printf("CHIP: 0x%02X 0x%02X\r\n", mod_control[0], mod_control[1]);
-////
-//// mod_control[0] = ISO_CONTROL;
-//// mod_control[1] = 0x02;
-//// trf797xWriteSingle(mod_control, 2);
-////
-//// mod_control[0] = ISO_CONTROL;
-//// mod_control[1] = ISO_CONTROL;
-//// trf797xReadSingle(mod_control, 1);
-//// printf("ISO: 0x%02X 0x%02X\r\n", mod_control[0], mod_control[1]);
-////
-//// mod_control[0] = RX_SPECIAL_SETTINGS;
-//// mod_control[1] = 0x40;
-//// trf797xWriteSingle(mod_control, 2);
-////
-//// mod_control[0] = RX_SPECIAL_SETTINGS;
-//// mod_control[1] = RX_SPECIAL_SETTINGS;
-//// trf797xReadSingle(mod_control, 1);
-//// printf("RX: 0x%02X 0x%02X\r\n", mod_control[0], mod_control[1]);
-//// */
-//// /*
-//// command[0] = CHIP_STATUS_CONTROL;
-//// command[1] = CHIP_STATUS_CONTROL;
-//// command[1] = 0x01; // Set bit 0 => Vin = 5V
-//// trf797xWriteSingle(command, 2);
-////
-//// command[0] = CHIP_STATUS_CONTROL;
-//// command[1] = CHIP_STATUS_CONTROL;
-//// trf797xReadSingle(command, 1);
-//// printf("CHIP 0x%02X 0x%02X\r\n", command[0], command[1]);
-//// */
-////} // End of trf797xInitialSettings()
-//
-//
-//
-//void trf797xTxNextSlot(void)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xTxNextSlot()
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// command[0] = TRANSMIT_NEXT_SLOT;
-// trf797xDirectCommand(command);
-//}
-//
-//void trf797xDisableSlotCounter(void)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xDisableSlotCounter()
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// buf[40] = IRQ_MASK;
-// buf[41] = IRQ_MASK;
-// trf797xReadSingle(&buf[41], 1);
-// buf[41] &= 0xFE;
-// trf797xWriteSingle(&buf[40], 2);
-//}
-//
-//void trf797xReset(void)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xReset()
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// command[0] = RESET;
-// trf797xDirectCommand(command);
-//}
-//
-//void trf797xTurnRfOn(void)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xTurnRfOn()
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// command[0] = CHIP_STATUS_CONTROL;
-// command[1] = CHIP_STATUS_CONTROL;
-// trf797xReadSingle(&command[1], 1);
-// command[1] &= 0x3F;
-// command[1] |= 0x21; // Oroiginal code has 0x20 !!!
-//// printf("\r\nCHIP 0x%02X 0x%02X\r\n", command[0], command[1]);
-// trf797xWriteSingle(command, 2);
-//// printf("\r\nCHIP 0x%02X 0x%02X\r\n", command[0], command[1]);
-//} // End of trf797xTurnRfOn()
-//
-//void trf797xTurnRfOff(void)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xTurnRfOff()
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// command[0] = CHIP_STATUS_CONTROL;
-// command[1] = CHIP_STATUS_CONTROL;
-// trf797xReadSingle(&command[1], 1);
-// command[1] &= 0x1F;
-// trf797xWriteSingle(command, 2);
-//} // End of trf797xTurnRfOff()
-//
-//void trf797xWriteIsoControl(uint8_t iso_control)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xWriteIsoControl()
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// uint8_t write[4];
-//
-// if ((iso_control & BIT5) == BIT5) {
-// printf("iso_control bit5 != 0\r\n");
-// return;
-// }
-//
-// write[0] = ISO_CONTROL;
-// write[1] = iso_control;
-// write[1] &= ~BIT5;
-// trf797xWriteSingle(write, 2);
-// iso_control &= 0x1F;
-//} // End of trf797xWriteIsoControl()
-//
-//void iso15693FindTag(void)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// iso15693FindTag()
-//// Description: Used to detect ISO15693 conforming tags.
-//// If an ISO15693 conforming tag is found ISO15693LED is turned ON.
-//// 1) Turn RF ON
-//// 2) Perform a complete anticollision sequence
-//// 3) Turn RF OFF
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{ // testPin=1;
-// trf797xTurnRfOn();
-// // testPin=0;
-// //=======================================================diable interrupt from trf797x
-// // readerInt.disable_irq(); // comment: has no effect in detectecting interrupt from trf797x, works without disabling too $SG
-// //=======================================================diable interrupt from trf797x $SG
-// // testPin=1;
-// trf797xWriteIsoControl(0x02);
-// // testPin=0;
-// wait_ms(6); // The VCD should wait at least 1 ms after it activated the
-// // powering field before sending the first request, to
-// // ensure that the VICCs are ready to receive it. (ISO15693-3)
-// /*
-// // Field Level Test:
-// buffer[0] = RUN_DECODERS; // Enable receiver
-// trf797xDirectCommand(buffer);
-// buffer[0] = CHIP_STATUS_CONTROL;
-// buffer[1] = 0x23;
-// trf797xWriteSingle(buffer, 2);
-// wait_ms(1);
-// buffer[0] = CHECK_INTERNAL_RF;
-// trf797xDirectCommand(buffer);
-// buffer[0] = RSSI_LEVELS;
-// trf797xReadSingle(buffer, 1);
-// printf("RSSI: 0x%X\r\n", buffer[0]);
-// // Result: RSSI = 0x5C (Range is 0x40 to 0x7F)
-// */
-//
-// flags = SIXTEEN_SLOTS; // SIXTEEN_SLOTS = 0x06
-//// flags = ONE_SLOT; // ONE_SLOT = 0x26
-// buf[20] = 0x00;
-// // debug2LED = LED_ON;
-//
-// iso15693Anticollision(&buf[20],0x00); // Send Inventory request
-//
-// trf797xTurnRfOff();
-// trf797xResetIrqStatus();
-// // Clear any IRQs
-//} // End of iso15693FindTag()
-//
-//void iso15693Anticollision(uint8_t *mask, uint8_t length)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// iso15693Anticollision()
-//// Description: Used to perform an inventory cycle of 1 or 16 timeslots.
-//// Send command, receive response and send response to host.
-//// Parameters: *mask = mask value
-//// length = number of significant bits of mask value
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// uint8_t i = 1, j = 1, command[2], no_slots, found = 0;
-// uint8_t *p_slot_no, slot_no[17];
-// uint8_t new_mask[8], new_length, mask_size;
-// uint32_t size;
-// uint8_t fifo_length = 0;
-// uint16_t k = 0;
-//// uint8_t irqStatus[2], iso_control;
-//
-// slot_no[0] = 0x00;
-// if ((flags & BIT5) == 0x00) { // flags<5> is the number of slots testPin
-// no_slots = 16; // 16 slots if flags<5> is cleared
-// }
-// else {
-// no_slots = 1; // 1 slot if flags<5> is set
-// }
-//
-// p_slot_no = &slot_no[0]; // slot number pointer
-// mask_size = (((length >> 2) + 1) >> 1); // mask_size is 1 for length = 4 or 8
-// buf[0] = 0x8F; // RESET
-// buf[1] = 0x91; // send with CRC
-// buf[2] = 0x3D; // write continuous from 1D
-// buf[5] = flags; // ISO15693 flags
-// buf[6] = 0x01; // anticollision command code
-//
-// if (flags & 0x10) { // mask_size is 2 for length = 12 or 16 and so on
-// size = mask_size + 4; // mask value + mask length + afi + command code + flags
-// buf[7] = afi;
-// buf[8] = length; // mask length
-// if (length > 0) {
-// for(i = 0; i < mask_size; i++) {
-// buf[9 + i] = *(mask + i);
-// }
-// }
-// fifo_length = 9;
-// }
-// else { // mask_size is 2 for length = 12 or 16 and so on
-// size = mask_size + 3; // mask value + mask length + command code + flags
-// buf[7] = length; // mask length
-// if(length > 0) {
-// for(i = 0; i < mask_size; i++) {
-// buf[8 + i] = *(mask + i);
-// }
-// }
-// fifo_length = 8;
-// }
-//
-// buf[3] = (char) (size >> 8);
-// buf[4] = (char) (size << 4);
-//
-//
-//
-// trf797xResetIrqStatus();
-//
-// // ***** Original code sets up a 30 ms counter here *****
-// // ***** Original code enables IRQ here *****
-// // ***** nRF51422 clear IRQ register *****
-// readerInt.enable_irq();
-//
-// trf797xRawWrite(&buf[0], mask_size + fifo_length); // Write to FIFO
-//
-// //===================================================runs till here !$SG
-// irqRegister = 0x01;
-// irqFlag = 0x00;
-//
-//
-//
-// //
-// for (j = 1; j <= no_slots; j++) { // 1 or 16 available timeslots
-// rxtxState = 1;
-// // ***** Original code sets up a 20 ms counter and starts it here *****
-// //irqFlag = 0x00;
-// // while(1)
-// while(irqFlag == 0x00)
-// { ;
-// }
-//
-// // ISO15693LED = LED_ON;
-// // wait_ms(1000);
-// // ISO15693LED = LED_OFF;
-// irqRegister = 0x01;
-// // Wait for interrupt
-// // ***** Original code stops the counter here *****
-// //
-// while(irqRegister == 0x01) { // Wait for RX complete
-// k++;
-// if (k == 0xFFF0) { //printf("k == 0xFFF0 _MAIN \r\n");
-// irqRegister = 0x00;
-// rxErrorFlag = 0x00;
-// }
-// }
-//
-//
-//
-//
-////wait_us(1000);
-//
-// command[0] = RSSI_LEVELS; // Read RSSI levels
-// trf797xReadSingle(command, 1);
-//
-// switch (irqRegister) {
-// case 0xFF: // If received UID in buffer //0xff changed to 0x01 $SG
-// found = 1;
-// printf("\r\nISO15693: [ ");
-// for (i=3; i < 11; i++) {
-// printf("%c", buf[i]);
-// }
-// printf(", %d ]\r\n", command[0]);
-// break;
-//
-// case 0x02: printf("collision occured _MAIN \r\n"); // Collision occurred
-// p_slot_no++; // Remember a collision was detected
-// *p_slot_no = j;
-// break;
-//
-// case 0x00: // printf("Timer interrupt \r\n"); // Timer interrupt
-// // ***** Original code does nothing! *****
-// break;
-//
-// default:
-// // ***** Original code does nothing *****
-// break;
-// } // switch (irqRegister)
-//
-// command[0] = RESET; // FIFO must be reset before receiving the next response
-// trf797xDirectCommand(command);
-//
-// if ((no_slots == 16) && (j < 16)) { // If 16 slots used then send EOF (next slot)
-// trf797xStopDecoders();
-// trf797xRunDecoders();
-// command[0] = RESET; // new
-// trf797xDirectCommand(command); // new
-// trf797xTxNextSlot(); // RESET must precede txNextSlot, see "TRF7970A FW Design Hints SLOA159.
-// }
-// else if ((no_slots == 16) && (j == 16)) { // At end of slot 16, stop the slot counter
-// trf797xStopDecoders();
-// trf797xDisableSlotCounter();
-// }
-// else if (no_slots == 1) { // 1 slot is used
-// break;
-// }
-// } // for (j = 1; j <= no_slots; j++)
-// //================================================
-// //===================================================
-// if (found == 1) {
-// ISO15693LED = LED_ON;
-// }
-// else {printf("tag not read \r\n");
-// ISO15693LED = LED_OFF;
-// }
-////
-// new_length = length + 4; // The mask length is a multiple of 4 bits
-// mask_size = (((new_length >> 2) + 1) >> 1);
-// while ((*p_slot_no != 0x00) && (no_slots == 16) && (new_length < 61) && (slot_no[16] != 16)) {
-// *p_slot_no = *p_slot_no - 1;
-//
-// for(i = 0; i < 8; i++)
-// {
-// new_mask[i] = *(mask + i); // First the whole mask is copied
-// }
-//
-// if((new_length & BIT2) == 0x00)
-// {
-// *p_slot_no = *p_slot_no << 4;
-// }
-// else
-// {
-// for(i = 7; i > 0; i--)
-// {
-// new_mask[i] = new_mask[i - 1];
-// }
-// new_mask[0] &= 0x00;
-// }
-// new_mask[0] |= *p_slot_no; // The mask is changed
-// wait_ms(2);
-//
-//
-// printf("Idx: 0x%02X Buf: 0x%02X, ", bufIdx, debugBuffer[bufIdx-1]);
-//
-// iso15693Anticollision(&new_mask[0], new_length); // Recursive call with new Mask
-//
-// p_slot_no--;
-//
-// }
-// //==================================================
-// // ***** Original code disables IRQ here *****
-// //readerInt.disable_irq();
-// //debug2LED = LED_OFF;
-//} // End of iso15693Anticollision()
-///*
-// Header file for main.cpp
-//*/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- //// Setup LEDs
-// heartbeatLED = LED_OFF;
-// ISO15693LED = LED_OFF;
-// 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, 1); // 8 bit data, mode = 1 (transition on rising edge, sample on falling edge)
-// spi.frequency(1000000); // SCLK = 1 MHz
-//// printf("SPI, ");
-//
-// // Set On-Off Keying modulation
-// ook_ask.output();
-// ook_ask = 1;
-//// printf("OOK, ");
-//
-// // Apply initial settings to the TRF7970
-// testPin=1;
-// trf797xInitialSettings();
-//// printf("Initialized, ");
-// testPin=0;
-// // Tri-state OOK pin
-// ook_ask.input();
-// ook_ask.mode(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");
- */
-
- // printf("\r\nFinished Init\r\n");
-
- // Setup interrupt from TRF7970
- // testPin=1;
- //========================
- // trf797xSetupIrq();
- //======================
- // testPin=0;
-// printf("IRQ setup, ");
-
-// printf("finished init.\r\n\r\n");
-
- // while(1) { // changed TRUE to 1 $SG
-// iso15693FindTag();
-// }
-//
-//} // End of main()
--- a/host.h Fri Apr 10 23:16:44 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -//void trf797xStopDecoders(void); -//void trf797xRunDecoders(void); -//void trf797xTxNextSlot(void); -//void trf797xtDisableSlotCounter(void); -//void trf797xReset(void); -//void trf797xTurnRfOn(void); -//void trf797xTurnRfOff(void); -//void trf797xWriteIsoControl(uint8_t iso_control); -//void iso15693FindTag(void); -//void iso15693Anticollision(uint8_t *mask, uint8_t length); -//void trf797xInitialSettings(void); -//uint8_t irqRegister = 0x01; // Interrupt register -//volatile uint8_t irqFlag = 0x00; -//uint8_t rxErrorFlag = 0x00; -//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; - -//uint8_t debugBuffer[1000]; // Capture data for analysis -//uint8_t bufIdx=0; -//extern uint8_t turnRFOn[2]; -// -//extern uint8_t testcommand[2]; -// -//uint8_t buffer[2]; -//int8_t rxtxState = 1; // Transmit/Receive byte count -//uint8_t afi = 0; -//uint8_t flags = 0; // Stores the mask value (used in anticollision) -//uint8_t command[2]; -//uint8_t temp; -//extern uint8_t irqRegister; // Interrupt register (main.cpp) -//volatile extern uint8_t irqFlag; // main.cpp -//extern uint8_t rxErrorFlag; // main.cpp -//extern uint8_t readerMode; // Determines how interrupts will be handled (main.cpp) -//extern int8_t rxtxState; // Transmit/Receive byte count (main.cpp) -//extern uint8_t buffer[2]; -//extern uint8_t tagFlag; -//extern DigitalIn irqPin; -//extern uint8_t debugBuffer[1000]; // Capture data for analysis -//extern uint8_t bufIdx; \ No newline at end of file
--- a/interruptStuff.cpp Fri Apr 10 23:16:44 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-///* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// Filename: interruptHandler.cpp
-// Description: Handles interrupt from TRF7970
-// Copyright (C) 2015 Gymtrack, Inc.
-// Author: Ron Clough
-// Date: 2015-03-03
-//
-// Changes:
-// Rev Date Who Details
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// 0.0 2015-03-03 RWC Original version.
-//
-//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-//
-//#include "mbed.h"
-////#include "main.h"
-//#include "interruptStuff.h"
-//#include "readerComm.h"
-//
-//InterruptIn readerInt(p7); // Interrupt from TRF7970
-////DigitalIn irqPin(p7, PullDown);
-//extern DigitalOut debug1LED; // "Debug" LED
-//extern DigitalOut debug2LED;
-//extern DigitalOut heartbeatLED;
-//extern DigitalOut testPin;
-//extern Serial pc; // main.cpp
-//extern DigitalOut ISO15693LED;
-//extern uint8_t irqRegister; // Interrupt register (main.cpp)
-//extern uint8_t buf[300];
-//extern int16_t nfc_state;
-//extern uint8_t nfc_protocol;
-//extern uint8_t active;
-//extern int8_t rxtxState;
-//extern uint8_t rxErrorFlag;
-//extern uint8_t tagFlag;
-//volatile extern uint8_t irqFlag;
-//extern uint8_t irqCount;
-//
-//extern uint8_t buffer;
-//
-//extern uint8_t debugBuffer[1000]; // Capture data for analysis
-//extern uint8_t bufIdx;
-//
-//void trf797xSetupIrq(void)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xSetupIrq()
-//// Description: Interrupt from TRF7970 appears at pin 7 of
-//// on nRF51-DK eval board. trf7970IrqHandler() is called
-//// when a rising edge is detected.
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// readerInt.rise(&trf797xIrqHandler); // Interrupt on rising edge, call trf7970IrqHandler()
-// readerInt.disable_irq();
-//} // End of trf797xSetupIrq()
-//
-//void trf797xReadIrqStatus(uint8_t *buffer)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xReadIrqStatus()
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// *buffer = IRQ_STATUS;
-// *(buffer + 1) = IRQ_MASK;
-// trf797xReadContinuous(buffer, 2);
-//} // End of trf797xReadIrqStatus()
-//
-//void trf797xResetIrqStatus(void)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xResetIrqStatus()
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// uint8_t irq_status[4];
-//
-// irq_status[0] = IRQ_STATUS;
-// irq_status[1] = IRQ_MASK;
-// trf797xReadContinuous(irq_status, 2); // Read second register as dummy read
-//} // End of trf797xResetIrqStatus()
-//
-//
-//
-///*======================================nfc mode SG
-//void trf797xNfcModeIsr(uint8_t *Register)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xNfcModeIsr()
-//// bit0 - RF collision avoidance error
-//// bit1 - RF collision avoidance OK
-//// bit2 - Change in RF field level
-//// bit3 - SDD OK
-//// bit4 - Communication error
-//// bit5 - FIFO high/low
-//// bit6 - RX
-//// bit7 - TX
-////
-//// irqRegister is used for signaling to the protocol functions
-//// irqRegister = 0x00 - OK
-//// irqRegister = 0x01 - progress
-//// irqRegister = 0x02 - error
-//// irqRegister = 0xFF - end of RX
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// if (*Register == BIT0) {
-// irqRegister = 0x02;
-// }
-// else if (*Register == BIT1) {
-// irqRegister = 0x00;
-// }
-// else if (*Register == BIT3) {
-// irqRegister = 0x00;
-// }
-// else if ((*Register & BIT4) == BIT4) {
-// *Register = RX_SPECIAL_SETTINGS; // Check filter and gain
-// trf797xReadSingle(Register, 1);
-// trf797xStopDecoders();
-// irqRegister = 0x02;
-// }
-// else if (*Register == BIT7) { // TX complete
-// irqRegister = 0x00;
-// trf797xReset();
-// }
-// else if (*Register == 0x40 || *Register == 0x44) { // RX flag means that EOF has been received and
-// // the number of unread bytes is in FIFOstatus register
-// *Register = RX_SPECIAL_SETTINGS; // Check filter and gain
-// trf797xReadSingle(Register, 1);
-// *Register = FIFO_CONTROL;
-// trf797xReadSingle(Register, 1);
-// *Register = 0x7F & *Register;
-// buf[nfc_state] = FIFO; // Write the received bytes to the correct place in the buffer
-// trf797xReadContinuous(&buf[nfc_state], *Register);
-// nfc_state = nfc_state + *Register;
-// trf797xReset(); // Reset the FIFO after last byte has been read out
-// irqRegister = 0xFF; // Signal to the receive function that these are the last bytes
-// trf797xResetIrqStatus();
-// }
-// else if ((*Register == 0x60) || (*Register == 0x64)) { // RX and FIFO interrupt
-// irqRegister = 0x01;
-// }
-// else if (*Register == 0x48) { // SDD complete
-// irqRegister = 0x00;
-// }
-//} // End of trf797xNfcModeIsr()
-//*/
-//
-///*==============================================================================target SG
-//void trf797xTargetIsr(uint8_t *Register)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xTargetIsr()
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-// uint8_t command, i;
-//
-// if (*Register == 0x48) {
-// TargetProtocol:
-// // Determine the NFC target protocol
-// command = NFC_TARGET_PROTOCOL;
-// trf797xReadSingle(&command, 1); //read the NFCtargetprotocol register
-// command &= 0x3F;
-// buf[50] = ISO_CONTROL;
-// if (command == 0x09) {
-// nfc_protocol = 0x01;
-// *Register = FIFO_CONTROL;
-// trf797xReadSingle(Register, 1); // Determine the number of bytes left in FIFO
-// *Register = 0x7F & *Register;
-// buf[nfc_state] = FIFO; // Write the received bytes to the correct place in the buffer
-// trf797xReadContinuous(&buf[nfc_state], *Register);
-// nfc_state = nfc_state + *Register;
-// irqRegister = 0xFF;
-// }
-// else {
-// *Register = FIFO_CONTROL;
-// trf797xReadSingle(Register, 1); // Determine the number of bytes left in FIFO
-// *Register = 0x7F & *Register;
-// buf[nfc_state] = FIFO; // Write the received bytes to the correct place in the buffer
-// trf797xReadContinuous(&buf[nfc_state], *Register);
-// nfc_state = nfc_state + *Register;
-// irqRegister = 0xFF;
-// if ((command == 0x01)) { // 14443A - active
-// buf[51] = NFC106AC;
-// trf797xWriteSingle(&buf[50], 2);
-// nfc_protocol = 0x02;
-// active = 0xFF;
-// }
-// else if (command == 0x05) { // 14443B - tag emulation
-// buf[51] = TAG14443B;
-// trf797xWriteSingle(&buf[50], 2);
-// nfc_protocol = 0x07;
-// active = 0x00;
-// }
-// else if (command == 0x12) {
-// if(buf[1] == 0x06) { // Felica 212 - passive
-// buf[51] = NFC212PA;
-// trf797xWriteSingle(&buf[50], 2);
-// nfc_protocol = 0x03;
-// active = 0x00;
-// }
-// else { // Felica 212 - active
-// buf[51] = NFC212AC;
-// trf797xWriteSingle(&buf[50], 2);
-// nfc_protocol = 0x04;
-// active = 0xFF;
-// }
-// } // if (command == 0x12)
-// else if (command == 0x13) {
-// if(buf[1] == 0x06) { //Felica 424 - passive
-// buf[51] = NFC424PA;
-// trf797xWriteSingle(&buf[50], 2);
-// nfc_protocol = 0x05;
-// active = 0x00;
-// }
-// else { // Felica 424 - active
-// buf[51] = NFC424AC;
-// trf797xWriteSingle(&buf[50], 2);
-// nfc_protocol = 0x06;
-// active = 0xFF;
-// } // if (buf[1] == 0x06)
-// } // if (command == 0x13)
-// } // if (command == 0x09)
-// } // if (*Register == 0x48)
-// else if (*Register == 0x60) {
-// irqRegister = 0x01;
-// buf[nfc_state] = FIFO;
-// trf797xReadContinuous(&buf[nfc_state], FIFO_MORE); // Read FIFO_MORE bytes from FIFO
-// nfc_state = nfc_state + FIFO_MORE;
-// trf797xResetIrqStatus();
-// }
-// else if ((*Register & BIT3) == BIT3) { // SDD finished
-// irqRegister = 0xFF;
-// for(i = 0; i < 255; i++);
-// nfc_protocol = 0x01;
-// trf797xReset();
-// trf797xStopDecoders();
-// trf797xRunDecoders();
-// }
-// else if (*Register == 0x44) {
-// trf797xReadIrqStatus(Register);
-// if (*Register == 0x40) {
-// goto TargetProtocol;
-// }
-// else if (*Register == 0x00) {
-// goto RFfieldChange;
-// }
-// }
-// else if (*Register == BIT2) { // RF field change
-// RFfieldChange:
-// trf797xReset();
-// trf797xStopDecoders();
-// trf797xRunDecoders();
-// }
-// trf797xResetIrqStatus();
-//} // End of trf797xTargetIsr()
-//*/
-//void trf797xISR(uint8_t *irq_status)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf797xISR()
-//// Description: The Interrupt Handler determines how the IRQ should
-//// be handled. The Trf797x IRQ status register is read
-//// to determine the cause of the IRQ.
-//// Conditions are checked and appropriate actions taken.
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{
-//
-//debug2LED = LED_ON;
-//printf(" IRQ_STATUS %d \r\n",irq_status[0]);
-// printf(" IRQ_MASK %d \r\n",irq_status[1]);
-// if (*irq_status == 0xA0) { printf( "BIT5 and BIT7, TX active and only 3 bytes left in FIFO \r\n"); // BIT5 and BIT7, TX active and only 3 bytes left in FIFO
-// irqRegister = 0x00;
-// }
-// else if (*irq_status == BIT7) { printf( " TX complete \r\n"); // TX complete // always comes here SG
-//
-// irqRegister = 0x00;
-// trf797xReset(); // Reset the FIFO after TX
-// }
-// else if ((*irq_status & BIT1) == BIT1) {printf( "Collision error \r\n"); // Collision error // comes here when tag is detected SG
-//
-// irqRegister = 0x02; // RX complete
-// trf797xStopDecoders();
-// trf797xReset();
-// trf797xResetIrqStatus();
-//// // IRQ_CLR;
-// }
-// else if (*irq_status == BIT6) { printf( "BIT6 INTERRUPT \r\n"); // RX flag means that EOF has been received // does not come here 3G
-// // and the number of unread bytes is in FIFOstatus register
-//
-// if (rxErrorFlag == 0x02) {
-// irqRegister = 0x02;
-// return;
-// }
-// *irq_status = FIFO_CONTROL;
-// trf797xReadSingle(irq_status, 1); // Determine the number of bytes left in FIFO
-// *irq_status = 0x7F & *irq_status;
-// buf[rxtxState] = FIFO; // Write the received bytes to the correct place in the buffer
-// trf797xReadContinuous(&buf[rxtxState], *irq_status);
-// rxtxState = rxtxState + *irq_status;
-// trf797xReset(); // Reset the FIFO after last byte has been read out
-// irqRegister = 0xFF; // Signal to the receive funnction that these are the last bytes
-// }
-// else if (*irq_status == 0x60) { printf( "RX active and 9 bytes already in FIFO \r\n"); // RX active and 9 bytes already in FIFO
-//
-// irqRegister = 0x01;
-// buf[rxtxState] = FIFO;
-// trf797xReadContinuous(&buf[rxtxState], 86); // Read 86 bytes from FIFO
-// rxtxState = rxtxState + 86;
-// if (readerInt) { //ISO15693LED = LED_ON; // If IRQ pin high // chnaged irqpin to readerInt
-// trf797xReadIrqStatus(irq_status);
-//// // IRQ_CLR
-// if (*irq_status == 0x40) { // End of recieve
-// *irq_status = FIFO_CONTROL;
-// trf797xReadSingle(irq_status, 1); // Determine the number of bytes left in FIFO
-// *irq_status = 0x7F & *irq_status;
-// buf[rxtxState] = FIFO; // Write the received bytes to the correct place in the buffer
-// trf797xReadContinuous(&buf[rxtxState], *irq_status);
-// rxtxState = rxtxState + *irq_status;
-// irqRegister = 0xFF; // Signal to the receive funnction that these are the last bytes
-// trf797xReset(); // Reset the FIFO after last byte has been read out
-// }
-// else if(*irq_status == 0x50) { printf( "End of receive and error \r\n"); // End of receive and error
-// irqRegister = 0x02;
-// }
-// }
-// else {
-// trf797xReadIrqStatus(irq_status);
-// if(irq_status[0] == 0x00) {
-// irqRegister = 0xFF;
-// }
-// }
-// }
-// else if ((*irq_status & BIT4) == BIT4) { printf( "BIT4 INTERRUPT \r\n"); // CRC error
-// if ((*irq_status & BIT5) == BIT5) { printf( "BIT5 INTERRUPT \r\n");
-// irqRegister = 0x01; // RX active
-// rxErrorFlag = 0x02;
-// }
-// if ((*irq_status & BIT6) == BIT6) { printf( "BIT4/BIT 6 INTERRUPT \r\n"); // 4 Bit receive
-// buf[200] = FIFO; // Write the received bytes to the correct place in the buffer
-// trf797xReadContinuous(&buf[200], 1);
-// trf797xReset();
-// irqRegister = 0x02; // End of RX
-// rxErrorFlag = 0x02;
-// }
-// else
-// {
-// irqRegister = 0x02; // End of RX
-// }
-// }
-// else if ((*irq_status & BIT2) == BIT2) { printf( "BIT2 INTERRUPT \r\n"); // Byte framing error
-// if ((*irq_status & BIT5) == BIT5) {
-// irqRegister = 0x01; // RX active
-// rxErrorFlag = 0x02;
-// }
-// else
-// irqRegister = 0x02; // End of RX
-// }
-// else if ((*irq_status == BIT0)) {printf( "No response interrupt \r\n"); // No response interrupt
-// irqRegister = 0x00;
-// }
-// else { // Interrupt register not properly set
-// printf ("Interrupt Error\r\n");
-//
-// irqRegister = 0x02;
-// trf797xStopDecoders(); // Reset the FIFO after TX
-// trf797xReset();
-// trf797xResetIrqStatus();
-// // Original code clears the IRQ flag here.
-// }
-// // wait_ms(10);
-////debug2LED = LED_OFF;
-////=================================================================================
-//} // End of trf797xISR()
-//
-//
-////============================interrupt call back test
-//void trf797xIrqHandlerCallback(void)
-// { wait_ms(10);
-// debug1LED = LED_OFF;
-//
-// }
-////==============================SG
-//
-//
-//
-//
-//
-//void trf797xIrqHandler(void)
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//// trf7970IrqHandler()
-//// __interrupt void Trf797xPortB(void) in original source file trf797x.c
-//// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-//{ //======================works $SG
-// debug1LED = LED_ON;
-// // uint8_t irqStatus[2], iso_control;
-// irqFlag = 0x02;
-// // trf797xIrqHandlerCallback();
-// //=====================================================================================
-// // do {
-////
-//// iso_control = ISO_CONTROL;
-//// trf797xReadSingle(&iso_control, 1);
-//// trf797xReadIrqStatus(irqStatus); //reads IRQ_STATUS register SG
-////
-//// if (*irqStatus == 0xA0) { // TX active and only 3 bytes left in FIFO
-//// break;
-//// }
-////
-//// if ((iso_control & BIT5) != BIT5) { // RFID mode
-////
-//// trf797xISR(irqStatus);}
-//
-// //==========================================================================
-// // }
-//// else { // NFC mode
-//// if ((iso_control & BIT2) == BIT2) {
-//// // Tag emulation
-//// tagFlag = 1;
-//// trf797xNfcModeIsr(irqStatus);
-////
-//// }
-//// else {
-//// if ((iso_control & BIT4) == BIT4) { // Active mode
-////
-//// trf797xNfcModeIsr(irqStatus);
-////
-//// }
-//// else { // Passive mode
-//// trf797xTargetIsr(irqStatus);
-////
-//// }
-//// }
-//// }
-// // } while(readerInt); // While IRQ pin is high ********** chnaged irq to readerInt
-//
-// // wait_ms(10);
-// debug1LED = LED_OFF;
-//
-//}
-//
-//
-//
-//
-//
--- a/interruptStuff.h Fri Apr 10 23:16:44 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/* - Header file for interruptHandler.cpp -*/ - -// Prototypes -void trf797xSetupIrq(void); -void trf797xReadIrqStatus(uint8_t *buffer); -void trf797xResetIrqStatus(void); -void trf797xNfcModeIsr(uint8_t *Register); -void trf797xTargetIsr(uint8_t *Register); -void trf797xISR(uint8_t *irq_status); -void trf797xIrqHandler(void); - -// NFC and tag emulation settings -#define NFC106AC 0x29 -#define NFC212AC 0x2A -#define NFC424AC 0x2B -#define NFC106PA 0x21 -#define NFC212PA 0x22 -#define NFC424PA 0x23 - -#define TAG14443A 0x24 -#define TAG14443B 0x25 -#define TAG15693 0x26 -#define TAGFelica 0x27 - -#define TAG106 0x00 -#define TAG212 0x21 -#define TAG424 0x42 -#define TAG848 0x63 - -#define FIFO_LEN 32 -#define FIFO_MORE 26 -
--- a/main.cpp Fri Apr 10 23:16:44 2015 +0000
+++ b/main.cpp Thu Apr 30 23:30:55 2015 +0000
@@ -1,18 +1,18 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Filename: main.cpp
- Description: Interface nRF51-DK eval board to TRF7970 eval board
- to test the suitability of the TRF7970 NFC chip
+ Description: Interface nRF51-DK eval board to TRF7970 eval board
+ to test the suitability of the TRF7970 NFC chip
for use in Gymtrack products.
The nRF51-DK board has an nRF51422 MCU.
Copyright (C) 2015 Gymtrack, Inc.
Author: Ron Clough
Date: 2015-02-26
-
+
Changes:
Rev Date Who Details
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0.0 2015-02-26 RWC Original version.
-
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "mbed.h"
@@ -22,73 +22,137 @@
#include "BLEDevice.h"
#include "HeartRateService.h"
#include "DeviceInformationService.h"
-SPI spi(p25, p28, p29); // MOSI, MISO, SCLK
- // Slave Select (SS)
-Serial pc(USBTX, USBRX); // Serial communication over USB with PC
-DigitalOut heartbeatLED(LED4); // "Heartbeat" LED
-DigitalOut debug2LED(LED2); // "Debug2" LED
-DigitalOut ISO15693LED(LED3); // "Detected ISO15693 tag" LED
-DigitalOut debug1LED(LED1); // "Debug1" LED
+#include "GT_Timer.h"
+#include "CompareTime.h"
+SPI spi(p7, p8, p3); // MOSI, MISO, SCLK
+// Slave Select (SS)
+#define BLED_PIN p17
+#define RLED_PIN p19
+#define GLED_PIN p18
+DigitalOut BLED(BLED_PIN);
+DigitalOut RLED(RLED_PIN);
+DigitalOut GLED(GLED_PIN);
+
+Serial pc(p24, p25); // Serial communication over USB with PC
+//DigitalOut heartbeatLED(LED4); // "Heartbeat" LED
+//DigitalOut debug2LED(LED2); // "Debug2" LED
+//DigitalOut ISO15693LED(LED3); // "Detected ISO15693 tag" LED
+//DigitalOut debug1LED(LED1); // "Debug1" LED
extern DigitalOut EN; // Control EN pin on TRF7970
extern DigitalOut EN2; // Control EN2 pin on TRF7970
-extern DigitalOut CS;
-
+extern DigitalOut CS;
+extern DigitalOut AO_7970;
+extern DigitalOut MOD_7970;
//DigitalInOut ook_ask(p6); // Control ASK/OOK pin on TRF7970
//DigitalOut mod(p5); // Control MOD pin on TRF7970
-InterruptIn readerInt(p7);
-DigitalOut testPin(p1);
+InterruptIn readerInt(p28);
+//DigitalOut testPin(p1);
BLEDevice ble;
extern uint8_t buf[300];
uint8_t noBytes=0;
-extern uint8_t turnRFOn[2];
-extern uint8_t testcommand[2];
+extern uint8_t turnRFOn[2];
+extern uint8_t testcommand[2];
extern uint8_t found;
-
+extern int nfc;
bool tagFound=0;
//uint8_t WAIT=0;
-
+int next_reading_tag=0;
int main()
-{testPin=0;
-pc.baud(115200);
+{
+ //testPin=0;
+ pc.baud(115200);
+ AO_7970= 0;
+ MOD_7970=0;
//=============================================================ble test
- ble.init();
-// ble.onDisconnection(disconnectionCallback);
- //
-// /* Setup advertising. */
- ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
-// // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
- ble.accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_HEART_RATE_SENSOR);
-// // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
- ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
- ble.setAdvertisingInterval(1000);
- ble.startAdvertising();
+// ble.init();
+//// ble.onDisconnection(disconnectionCallback);
+// //
+//// /* Setup advertising. */
+// ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
+//// // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
+// ble.accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_HEART_RATE_SENSOR);
+//// // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
+// ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+// ble.setAdvertisingInterval(1000);
+// ble.startAdvertising();
//===============================================================*/
-readerInt.rise(&handlerNFC);
-CS=1;
-SpiInit(); //spi=1Mhz
-PowerUpNFC();
-NFCInit();
-RegisterReInitNFC();
-RegistersReadNFC();
-PowerDownNFC(); //SleepNFC() //StandByNFC()
+ readerInt.rise(&handlerNFC);
+ CS=1;
+ SpiInit(); //spi=1Mhz
+ PowerUpNFC();
+ NFCInit();
+ RegisterReInitNFC();
+ RegistersReadNFC();
+//PowerDownNFC(); //SleepNFC() //StandByNFC()
//SleepNFC();
+ BLED=0;
+ /** Print the text
+ *
+ * @groups PollNFC
+ *
+ * 1 on success,
+ * 0 on serial error
+ */
+
+ while(1) {
+ // PowerUpNFC();
+ // NFCInit();
+// RegisterReInitNFC();
+
+
+ while(tagFound==0) {
+ // printf("tag nt found \r\n");
+ //BLED=1;
+//testcommand[0] = 0x17;
+//trf797xDirectCommand(testcommand);
+//testcommand[0] = 0x18;
+//trf797xDirectCommand(testcommand);
+//wait_ms(5);
+//testcommand[0] = RSSI_LEVELS; //Read RSSI levels and oscillator status(0x0F/0x4F)
+//trf797xReadSingle(testcommand, 1);
+//printf("RSSI:%X \r\n", testcommand[0]);
+//tagFound=PollNFC();
-while(1)
-{
-tagFound=PollNFC();
+ tagFound=PollNFC();
+ // RegisterReInitNFC();
+//wait_ms(5);
+ //int tag= CompareTime( gt_read_ms(),next_reading_tag,50);
+//
+// if (tag<0) {
+// ;
+// } else {
+// RLED=1;
+// wait_ms(5);
+// RLED=0;
+// next_reading_tag = gt_read_ms();
+ // printf("time out : no tag \r\n");
+// break;
+//
+// }
+ }
+//
+ if(tagFound==1) {nfc=0;
+ //printf("read single block:");
+ BLED=1;
+ for(uint8_t i=0; i<noBytes; i++)
+ printf("%X ", buf[i]);
+ printf("\r\n");
+ printf("tag found \r\n");
+ BLED=0;
+ tagFound=0;
+//////
+//////// //break;
+ } //else {
+// printf("tag nt found \r\n");
+// }
+//////
-if(tagFound==1)
-{//printf("read single block:");
- for(uint8_t i=0; i<noBytes; i++)
- printf("%X ", buf[i]);
- printf("\r\n");
- printf("tag found \r\n");
- break;
- }
- else wait(1);
-}
-
+
+ PowerDownNFC();
+ // wait(2);
+ }
+
}
--- a/nRF51822.lib Fri Apr 10 23:16:44 2015 +0000 +++ b/nRF51822.lib Thu Apr 30 23:30:55 2015 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/users/soumi_ghsoh/code/nRF51822/#030804500597 +http://developer.mbed.org/users/soumi_ghsoh/code/nRF51822/#3ae49ec9e716
--- a/readerComm.cpp Fri Apr 10 23:16:44 2015 +0000
+++ b/readerComm.cpp Thu Apr 30 23:30:55 2015 +0000
@@ -6,12 +6,12 @@
Copyright (C) 2015 Gymtrack, Inc.
Author: Ron Clough
Date: 2015-02-27
-
+
Changes:
Rev Date Who Details
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0.0 2015-02-27 RWC Original version.
-
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*==========================================================================
Initialize the chipset ISO15693 and read UID:
@@ -20,16 +20,16 @@
2) Write Modulator and SYS_CLK Control Register (0x09) (13.56Mhz SYS_CLK and default Clock 13.56Mhz))
[0x09 0x31]
3) Configure Mode ISO Control Register (0x01) to 0x02 (ISO15693 high bit rate, one subcarrier, 1 out of 4)
-[0x01 0x02]
+[0x01 0x02]
4) Turn RF ON (Chip Status Control Register (0x00))
[0x40 r] [0x00 0x20] [0x40 r]
5) Inventory Command (see Figure 5-20. Inventory Command Sent From MCU to TRF7970A)
-5-1) Send Inventory(8B), Wait 2ms, Read/Clear IRQ Status(0x0C=>0x6C)+dummy read,
-Read FIFO Status Register(0x1C/0x5C), Read Continuous FIFO from 0x1F to 0x1F+0x0A(0x1F/0x7F),
-Read/Clear IRQ Status(0x0C=>0x6C)+dummy read, Read FIFO Status Register(0x1C/0x5C),
+5-1) Send Inventory(8B), Wait 2ms, Read/Clear IRQ Status(0x0C=>0x6C)+dummy read,
+Read FIFO Status Register(0x1C/0x5C), Read Continuous FIFO from 0x1F to 0x1F+0x0A(0x1F/0x7F),
+Read/Clear IRQ Status(0x0C=>0x6C)+dummy read, Read FIFO Status Register(0x1C/0x5C),
Reset FIFO(0x0F/0x8F), Read RSSI levels and oscillator status(0x0F/0x4F)
[0x8F 0x91 0x3D 0x00 0x30 0x26 0x01 0x00] %:2 [0x6C r:2] [0x5C r] [0x7F r:10] %:10 [0x6C r:2] [0x5C r] [0x8F] [0x4F r]
-==============================================================================*/
+==============================================================================*/
@@ -39,23 +39,29 @@
#include "mbed.h"
#include "readerComm.h"
uint8_t sg=0;
-DigitalOut EN(p4); // Control EN pin on TRF7970
-DigitalOut EN2(p3); // Control EN2 pin on TRF7970
-DigitalOut CS(p19);
-uint8_t turnRFOn[2];
+DigitalOut EN(p0); // Control EN pin on TRF7970
+DigitalOut EN2(p4); // Control EN2 pin on TRF7970
+DigitalOut CS(p9);
+uint8_t turnRFOn[2];
uint8_t testcommand[2];
extern uint8_t noBytes;
extern SPI spi; // main.cpp
extern Serial pc; // main.cpp
uint8_t buf[300]; // main.cpp
uint8_t found=0;
+uint8_t rssi_flag=0;
+uint8_t rssi=0;
+extern DigitalOut BLED;
+DigitalOut AO_7970(p29);
+DigitalOut MOD_7970(p30);
+int nfc=0;
//extern bool tagFound=0;
-
-extern DigitalOut debug1LED;
-extern DigitalOut debug2LED;
-extern DigitalOut ISO15693LED;
-extern DigitalOut heartbeatLED;
-extern DigitalOut testPin;
+
+//extern DigitalOut debug1LED;
+//extern DigitalOut debug2LED;
+//extern DigitalOut ISO15693LED;
+//extern DigitalOut heartbeatLED;
+//extern DigitalOut testPin;
uint8_t temp;
uint8_t command[2];
@@ -84,7 +90,7 @@
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
{
uint8_t i=0;
-
+
CS = SELECT;
while(length > 0) {
*buffer = (0x1F & *buffer); // Register address
@@ -95,13 +101,13 @@
}
}
CS = DESELECT;
-
+
} // End of trf797xWriteSingle()
void trf797xReadSingle(uint8_t *buffer, uint8_t number)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// trf797xReadSingle()
-// Description: Reads specified reader chip registers and
+// Description: Reads specified reader chip registers and
// writes register contents to *buffer.
// Parameters: *buffer = addresses of the registers.
// number = number of registers.
@@ -130,7 +136,8 @@
// Parameters: *buffer = address of first register.
// length = number of registers to read.
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-{ //==================tested wrk $sg
+{
+ //==================tested wrk $sg
CS = SELECT;
*buffer = (0x60 | *buffer); // Address, read, continuous
*buffer = (0x7F & *buffer); // Register address
@@ -142,7 +149,7 @@
}
// spi.write(0x00); spi.write(0x00); // 16 clock cycles, see TRF7970A FW Design Hints SLOA159 section 7.3
CS = DESELECT;
-
+
//=====================tested it wrks $sg
} // End of trf797xReadContinuous()
@@ -183,12 +190,15 @@
void PowerUpNFC2(void)
-{//CS = 1;
+{
+ //CS = 1;
// wait_ms(4);
// EN = 1;
// EN2=1;
- CS = 0; EN2 = 0; EN = 0;
+ CS = 0;
+ EN2 = 0;
+ EN = 0;
wait_ms(2);
CS = 1;
wait_ms(3);
@@ -197,313 +207,374 @@
EN = 1;
}
void PowerUpNFC(void)
-{ //CS = 1;
+{
+ //CS = 1;
// wait_ms(4);
// EN = 1;
-EN2 = 1;
-wait_ms(1);
-EN=1;
+ EN2 = 1;
+ wait_ms(1);
+ EN=1;
}
void PowerDownNFC(void)
-{///CS=1;
- EN=0;
- EN2=0;
+{
+ ///CS=1;
+ EN=0;
+ EN2=0;
//wait_ms(1);
- //EN2= 0; PowerDown Mode
- //EN2=1; SleepMode
- //CS=0;
+//EN2= 0; PowerDown Mode
+//EN2=1; SleepMode
+//CS=0;
}
void SleepNFC(void)
-{ EN=0;
- EN2=0;
- }
+{
+ EN=0;
+ EN2=0;
+}
void StandByNFC(void)
{
turnRFOn[0] = CHIP_STATUS_CONTROL;
-turnRFOn[1] = CHIP_STATUS_CONTROL;
+ turnRFOn[1] = CHIP_STATUS_CONTROL;
-turnRFOn[1] &= 0x3F;
-turnRFOn[1] |= 0x80;
-trf797xWriteSingle(turnRFOn, 2);
+ turnRFOn[1] &= 0x3F;
+ turnRFOn[1] |= 0x80;
+ trf797xWriteSingle(turnRFOn, 2);
}
void SpiInit1(void)
{
-spi.format(8, 1); // 8 bit data, mode = 1 (transition on rising edge, sample on falling edge)
-spi.frequency(250000);
+ spi.format(8, 1); // 8 bit data, mode = 1 (transition on rising edge, sample on falling edge)
+ spi.frequency(250000);
}
void SpiInit(void)
{
-spi.format(8, 1); // 8 bit data, mode = 1 (transition on rising edge, sample on falling edge)
-spi.frequency(1000000);
+ spi.format(8, 1); // 8 bit data, mode = 1 (transition on rising edge, sample on falling edge)
+ spi.frequency(1000000);
}
void NFCInit(void)
-{testPin=1;
+{
+ //testPin=1;
//wait_ms(2);
-testcommand[0] = SOFT_INIT;
-trf797xDirectCommand(testcommand);
-wait_ms(2);
-testcommand[0] = IDLE;
-trf797xDirectCommand(testcommand);
-wait_ms(2);
-testcommand[0] = MODULATOR_CONTROL;
-testcommand[1] = 0x21; // 6.78 MHz, OOK 100%
-trf797xWriteSingle(testcommand, 2);
+
+ testcommand[0] = SOFT_INIT;
+ trf797xDirectCommand(testcommand);
+ wait_ms(2);
+ testcommand[0] = IDLE;
+ trf797xDirectCommand(testcommand);
+ wait_ms(2);
+//testcommand[0] =NFC_TARGET_LEVEL ;
+//testcommand[1] = 0x00;
+//trf797xWriteSingle(testcommand, 2);
+ testcommand[0] = MODULATOR_CONTROL;
+ testcommand[1] = 0x81; // 6.78 MHz, OOK 100%
+ trf797xWriteSingle(testcommand, 2);
//wait_ms(2);
-testcommand[0] = MODULATOR_CONTROL;
-trf797xReadSingle(testcommand, 1);
-turnRFOn[0] = CHIP_STATUS_CONTROL;
-turnRFOn[1] = CHIP_STATUS_CONTROL;
-turnRFOn[1] &= 0x3F;
-turnRFOn[1] |= 0x20;
+ testcommand[0] = MODULATOR_CONTROL;
+ trf797xReadSingle(testcommand, 1);
+ testcommand[0] = REGULATOR_CONTROL ;
+ testcommand[1] = 0x07;
+ trf797xWriteSingle(testcommand, 2);
+ turnRFOn[0] = CHIP_STATUS_CONTROL;
+ turnRFOn[1] = CHIP_STATUS_CONTROL;
+ turnRFOn[1] &= 0x3F;
+ turnRFOn[1] |= 0x00;
// Oroiginal code has 0x20 !!!
-trf797xReadSingle(turnRFOn, 1);
-turnRFOn[0] = CHIP_STATUS_CONTROL;
-turnRFOn[1] = CHIP_STATUS_CONTROL;
-turnRFOn[1] &= 0x3F;
-turnRFOn[1] |= 0x20;
-trf797xWriteSingle(turnRFOn, 2);
+ trf797xReadSingle(turnRFOn, 1);
+ turnRFOn[0] = CHIP_STATUS_CONTROL;
+ turnRFOn[1] = CHIP_STATUS_CONTROL;
+ turnRFOn[1] &= 0x3F;
+ turnRFOn[1] |= 0x00;
+ trf797xWriteSingle(turnRFOn, 2);
//wait_ms(2);
-
-testcommand[0] = ISO_CONTROL;
-testcommand[1] = 0x02; // 6.78 MHz, OOK 100%
-trf797xWriteSingle(testcommand, 2);
-testcommand[0] = IRQ_MASK;
-testcommand[1] = 0x3F;
-trf797xWriteSingle(testcommand, 2);
-//wait_ms(6);
-testPin=0;}
+
+ trf797xWriteSingle(testcommand, 2);
+ testcommand[0] = ISO_CONTROL;
+ testcommand[1] = 0x02; // 6.78 MHz, OOK 100%
+ trf797xWriteSingle(testcommand, 2);
+ testcommand[0] = IRQ_MASK;
+ testcommand[1] = 0x3F;
+ trf797xWriteSingle(testcommand, 2);
+//wait_ms(6);
+//testPin=0;
+}
void RegisterReInitNFC(void)
-{testcommand[0] = TX_TIMER_EPC_HIGH;
-testcommand[1] = 0xC1;
-trf797xWriteSingle(testcommand, 2);
-testcommand[0] = TX_TIMER_EPC_LOW ;
-testcommand[1] = 0xC1;
-trf797xWriteSingle(testcommand, 2);
-testcommand[0] = TX_PULSE_LENGTH_CONTROL ;
-testcommand[1] = 0x00;
-trf797xWriteSingle(testcommand, 2);
-testcommand[0] = RX_NO_RESPONSE_WAIT_TIME ;
-testcommand[1] = 0x30;
-trf797xWriteSingle(testcommand, 2);
-testcommand[0] = RX_WAIT_TIME ;
-testcommand[1] = 0x1F;
-trf797xWriteSingle(testcommand, 2);
-testcommand[0] = MODULATOR_CONTROL ;
-testcommand[1] = 0x21; //0x34 100%ook@13MHz
-trf797xWriteSingle(testcommand, 2);
-testcommand[0] = RX_SPECIAL_SETTINGS ;
-testcommand[1] = 0x40;
-trf797xWriteSingle(testcommand, 2);
-testcommand[0] = REGULATOR_CONTROL ;
-testcommand[1] = 0x87;
-trf797xWriteSingle(testcommand, 2);
+{
+ //testcommand[0] =NFC_TARGET_LEVEL ;
+//testcommand[1] = 0x00;
+//trf797xWriteSingle(testcommand, 2);
+ testcommand[0] = TX_TIMER_EPC_HIGH;
+ testcommand[1] = 0xC1;
+ trf797xWriteSingle(testcommand, 2);
+ testcommand[0] = TX_TIMER_EPC_LOW ;
+ testcommand[1] = 0xC1;
+ trf797xWriteSingle(testcommand, 2);
+ testcommand[0] = TX_PULSE_LENGTH_CONTROL ;
+ testcommand[1] = 0x00;
+ trf797xWriteSingle(testcommand, 2);
+ testcommand[0] = RX_NO_RESPONSE_WAIT_TIME ;
+ testcommand[1] = 0x30;
+ trf797xWriteSingle(testcommand, 2);
+ testcommand[0] = RX_WAIT_TIME ;
+ testcommand[1] = 0x1F;
+ trf797xWriteSingle(testcommand, 2);
+ testcommand[0] = MODULATOR_CONTROL ;
+ testcommand[1] = 0x81; //0x34 100%ook@13MHz
+ trf797xWriteSingle(testcommand, 2);
+ testcommand[0] = RX_SPECIAL_SETTINGS ;
+ testcommand[1] = 0x40;
+ trf797xWriteSingle(testcommand, 2);
+ testcommand[0] = REGULATOR_CONTROL ;
+ testcommand[1] = 0x07;
+ trf797xWriteSingle(testcommand, 2);
}
void RegistersReadNFC(void)
-{turnRFOn[0] = CHIP_STATUS_CONTROL;
-trf797xReadSingle(turnRFOn, 1);
-testcommand[0] = ISO_CONTROL;
-trf797xReadSingle(testcommand, 1);
-testcommand[0] = TX_TIMER_EPC_HIGH; //0xC1;
-trf797xReadSingle(testcommand, 1);
-testcommand[0] = TX_TIMER_EPC_LOW ; //0xC1;
-trf797xReadSingle(testcommand, 1);
-testcommand[0] = TX_PULSE_LENGTH_CONTROL ; //0x00;
-trf797xReadSingle(testcommand, 1);
-testcommand[0] = RX_NO_RESPONSE_WAIT_TIME ; //0x30;
-trf797xReadSingle(testcommand, 1);
-testcommand[0] = RX_WAIT_TIME ; //0x1F;
-trf797xReadSingle(testcommand, 1);
-testcommand[0] = MODULATOR_CONTROL ; //0x21;
-trf797xReadSingle(testcommand, 1);
-testcommand[0] = RX_SPECIAL_SETTINGS ; //0x40;
-trf797xReadSingle(testcommand, 1);
-testcommand[0] = REGULATOR_CONTROL ; //0x87;
-trf797xReadSingle(testcommand, 1);
+{
+ turnRFOn[0] = CHIP_STATUS_CONTROL;
+ trf797xReadSingle(turnRFOn, 1);
+ testcommand[0] = ISO_CONTROL;
+ trf797xReadSingle(testcommand, 1);
+ testcommand[0] = TX_TIMER_EPC_HIGH; //0xC1;
+ trf797xReadSingle(testcommand, 1);
+ testcommand[0] = TX_TIMER_EPC_LOW ; //0xC1;
+ trf797xReadSingle(testcommand, 1);
+ testcommand[0] = TX_PULSE_LENGTH_CONTROL ; //0x00;
+ trf797xReadSingle(testcommand, 1);
+ testcommand[0] = RX_NO_RESPONSE_WAIT_TIME ; //0x30;
+ trf797xReadSingle(testcommand, 1);
+ testcommand[0] = RX_WAIT_TIME ; //0x1F;
+ trf797xReadSingle(testcommand, 1);
+ testcommand[0] = MODULATOR_CONTROL ; //0x21;
+ trf797xReadSingle(testcommand, 1);
+ testcommand[0] = RX_SPECIAL_SETTINGS ; //0x40;
+ trf797xReadSingle(testcommand, 1);
+ testcommand[0] = REGULATOR_CONTROL ; //0x87;
+ trf797xReadSingle(testcommand, 1);
}
void InventoryReqNFC(void)
{
//send inventory command==================================================
-buf[0]=0x8F; //Send Inventory(8B)[0x8F 0x91 0x3D 0x00 0x30 0x26 0x01 0x00]
-buf[1]=0x91;
-buf[2]=0x3D;
-buf[3]=0x00;
-buf[4]=0x30;
-buf[5]=0x26;
-buf[6]=0x01;
-buf[7]=0x00;
-trf797xRawWrite(&buf[0],8);
-//wait_ms(2);
-testcommand[0] = IRQ_STATUS;
-trf797xReadSingle(testcommand,1);
-testcommand[0] = IRQ_STATUS;
-trf797xReadSingle(testcommand,1);
-wait_ms(5);
-/*====================================read tag ID
-testcommand[0] = IRQ_STATUS;
-trf797xReadSingle(testcommand,1);
-testcommand[0] = IRQ_STATUS;
-trf797xReadSingle(testcommand,1);
-testcommand[0] = FIFO_COUNTER; //Read FIFO Status Register(0x1C/0x5C)
-trf797xReadSingle(testcommand, 1);
-testcommand[0] = 0x7F & testcommand[0]; // Determine the number of bytes left in FIFO
-buf[0] = FIFO;
-trf797xReadContinuous(&buf[0], testcommand[0]);
-testcommand[0] = RSSI_LEVELS; //Read RSSI levels and oscillator status(0x0F/0x4F)
-trf797xReadSingle(testcommand, 1);
-testcommand[0] = IRQ_STATUS;
-trf797xReadSingle(testcommand,1);
-testcommand[0] = IRQ_STATUS;
-trf797xReadSingle(testcommand,1);
-testcommand[0] = RESET; //Reset FIFO(0x0F/0x8F)
-trf797xDirectCommand(testcommand);
-trf797xStopDecoders();
-trf797xRunDecoders(); */
+ buf[0]=0x8F; //Send Inventory(8B)[0x8F 0x91 0x3D 0x00 0x30 0x26 0x01 0x00]
+ buf[1]=0x91;
+ buf[2]=0x3D;
+ buf[3]=0x00;
+ buf[4]=0x30;
+ buf[5]=0x26;
+ buf[6]=0x01;
+ buf[7]=0x00;
+ trf797xRawWrite(&buf[0],8);
+//read rssi register and interchange rx input to main and aux receiver blocks
+//{add code block here
+// }
+ wait_ms(2);
+ testcommand[0] = IRQ_STATUS;
+ trf797xReadSingle(testcommand,1);
+ testcommand[0] = IRQ_STATUS;
+ trf797xReadSingle(testcommand,1);
+ wait_ms(5);
+//testcommand[0] = CHECK_EXTERNAL_RF;
+//trf797xDirectCommand(testcommand);
+//wait_ms(1);
+ testcommand[0] = RSSI_LEVELS; //Read RSSI levels and oscillator status(0x0F/0x4F)
+ trf797xReadSingle(testcommand, 1);
+ printf("RSSI:%X \r\n", testcommand[0]);
+ /*====================================read tag ID
+ testcommand[0] = IRQ_STATUS;
+ trf797xReadSingle(testcommand,1);
+ testcommand[0] = IRQ_STATUS;
+ trf797xReadSingle(testcommand,1);
+ testcommand[0] = FIFO_COUNTER; //Read FIFO Status Register(0x1C/0x5C)
+ trf797xReadSingle(testcommand, 1);
+ testcommand[0] = 0x7F & testcommand[0]; // Determine the number of bytes left in FIFO
+ buf[0] = FIFO;
+ trf797xReadContinuous(&buf[0], testcommand[0]);
+ testcommand[0] = RSSI_LEVELS; //Read RSSI levels and oscillator status(0x0F/0x4F)
+ trf797xReadSingle(testcommand, 1);
+ testcommand[0] = IRQ_STATUS;
+ trf797xReadSingle(testcommand,1);
+ testcommand[0] = IRQ_STATUS;
+ trf797xReadSingle(testcommand,1);
+ testcommand[0] = RESET; //Reset FIFO(0x0F/0x8F)
+ trf797xDirectCommand(testcommand);
+ trf797xStopDecoders();
+ trf797xRunDecoders(); */
//=====================================read Tag ID
//wait(1);
}
void FindNFC(uint8_t *irqStatus)
-{//found=0;
+{
+ //found=0;
//static uint8_t sg;
-//printf("%X \r\n", *irqStatus);
-
- switch(*irqStatus)
- {case BIT0: found=BIT0; WAIT=10; break;
- case BIT1: found=BIT1; break;
- // case BIT2://found=BIT2; // break;
- //case BIT3:found=BIT3; WAIT=0;break;
+//printf("%X \r\n", *irqStatus);
+
+ switch(*irqStatus) {
+ case BIT0:
+ found=BIT0;
+ WAIT=10;
+ break;
+ case BIT1:
+ found=BIT1;
+ break;
+ // case BIT2://found=BIT2; // break;
+ //case BIT3:found=BIT3; WAIT=0;break;
// case BIT4:found=BIT4; WAIT=0;break;
// case BIT5:found=BIT5; WAIT=0;break;
- case 0x40: found=0x40; break;
- case BIT7: found=BIT7; break;
- default: found=0;
-}
+ case 0x40:
+ found=0x40;
+ break;
+ case BIT7:
+ found=BIT7;
+ break;
+ default:
+ found=0;
+ }
-}
+}
void handlerNFC(void)
{
-testcommand[0] = IRQ_STATUS;
-trf797xReadSingle(testcommand,1);
-FindNFC(testcommand);
+ testcommand[0] = IRQ_STATUS;
+ trf797xReadSingle(testcommand,1);
+ FindNFC(testcommand);
//wait_ms(1);
//=============================use if trf7970a irq_status is not cleared
-//testcommand[0] = IRQ_STATUS;
-//trf797xReadSingle(testcommand,1);
+//testcommand[0] = IRQ_STATUS;
+//trf797xReadSingle(testcommand,1);
//=============================
}
void MemReadReqNFC(void)
-{testcommand[0] = RX_NO_RESPONSE_WAIT_TIME ;
-testcommand[1] = 0xFF;
-trf797xWriteSingle(testcommand, 2);
- //send inventory command==================================================
-buf[0]=0x8F; //Send Inventory(8B)[0x8F 0x91 0x3D 0x00 0x30 0x26 0x01 0x00]
-buf[1]=0x91;
-buf[2]=0x3D;
-buf[3]=0x00;
-buf[4]=0x30;
-buf[5]=0x02;
-buf[6]=0x20;
-buf[7]=0x00;
-trf797xRawWrite(&buf[0],8);
-//wait_ms(2);
+{
+ testcommand[0] = RX_NO_RESPONSE_WAIT_TIME ;
+ testcommand[1] = 0xFF;
+ trf797xWriteSingle(testcommand, 2);
+//send inventory command==================================================
+ buf[0]=0x8F; //Send Inventory(8B)[0x8F 0x91 0x3D 0x00 0x30 0x26 0x01 0x00]
+ buf[1]=0x91;
+ buf[2]=0x3D;
+ buf[3]=0x00;
+ buf[4]=0x30;
+ buf[5]=0x02;
+ buf[6]=0x20;
+ buf[7]=0x00;
+ trf797xRawWrite(&buf[0],8);
+
+//read rssi register and interchange rx input to main and aux receiver blocks
+//{add code block here
+// }
+//wait_ms(2);
//testPin=1;
//=========================use to clear irq_status register of trf7970a
-//testcommand[0] = IRQ_STATUS;
-//trf797xReadSingle(testcommand,1);
-//testcommand[0] = IRQ_STATUS;
-//trf797xReadSingle(testcommand,1);
+//testcommand[0] = IRQ_STATUS;
+//trf797xReadSingle(testcommand,1);
+//testcommand[0] = IRQ_STATUS;
+//trf797xReadSingle(testcommand,1);
//==========================
-wait_ms(5);
+ wait_ms(5);
+//testcommand[0] = CHECK_EXTERNAL_RF;
+//trf797xDirectCommand(testcommand);
+//wait_us(100);
+ testcommand[0] = RSSI_LEVELS;
+ //Read RSSI levels and oscillator status(0x0F/0x4F)
+ trf797xReadSingle(testcommand, 1);
+ rssi=testcommand[0];
+
+ printf("RSSI:%X \r\n", testcommand[0]);
}
-void ReadNFC(void)
-{/*========================================== read irqstatus reg. of trf7970a
-//testcommand[0] = IRQ_STATUS; clear irqstatus reg of trf7970a
-//trf797xReadSingle(testcommand,1);
-//testcommand[0] = IRQ_STATUS;
-//trf797xReadSingle(testcommand,1);
-===========================================*/
+void ReadNFC(void)
+{
+ /*========================================== read irqstatus reg. of trf7970a
+ //testcommand[0] = IRQ_STATUS; clear irqstatus reg of trf7970a
+ //trf797xReadSingle(testcommand,1);
+ //testcommand[0] = IRQ_STATUS;
+ //trf797xReadSingle(testcommand,1);
+ ===========================================*/
-noBytes = FIFO_COUNTER; //Read FIFO Status Register(0x1C/0x5C)
-trf797xReadSingle(&noBytes, 1);
-noBytes = 0x7F & noBytes; // Determine the number of bytes left in FIFO
-buf[0] = FIFO;
-trf797xReadContinuous(&buf[0],noBytes);
+ noBytes = FIFO_COUNTER; //Read FIFO Status Register(0x1C/0x5C)
+ trf797xReadSingle(&noBytes, 1);
+ noBytes = 0x7F & noBytes; // Determine the number of bytes left in FIFO
+ buf[0] = FIFO;
+ trf797xReadContinuous(&buf[0],noBytes);
//==use if trf7970a irq_status is not cleared
-//testcommand[0] = IRQ_STATUS;
-//trf797xReadSingle(testcommand,1);
-//testcommand[0] = IRQ_STATUS;
-//trf797xReadSingle(testcommand,1);
+//testcommand[0] = IRQ_STATUS;
+//trf797xReadSingle(testcommand,1);
+//testcommand[0] = IRQ_STATUS;
+//trf797xReadSingle(testcommand,1);
//=========================================
-testcommand[0] = RESET; //Reset FIFO(0x0F/0x8F)
-trf797xDirectCommand(testcommand);
+ testcommand[0] = RESET; //Reset FIFO(0x0F/0x8F)
+ trf797xDirectCommand(testcommand);
-//wait(1);
+//wait(1);
}
-bool PollNFC(void)
-{
-CS=1;
-PowerUpNFC();
-//////wait_ms(1);
-NFCInit();
-RegisterReInitNFC();
-MemReadReqNFC(); //InventoryReqNFC()
+
+
+
+
+
+
+
-wait_ms(WAIT);
+bool PollNFC(void)
+{
+ printf("PollNFC \r\n");
+//CS=1;
+ // PowerUpNFC();
+//////wait_ms(1);
+ // NFCInit();
+ // RegisterReInitNFC();
+ MemReadReqNFC();
+ printf("back from MemReadReqNFC \r\n");
+ if (rssi>0x50)
+ {rssi_flag=1;}
+ else{rssi_flag=0;}
+ nfc++;
+//InventoryReqNFC();
+ wait_ms(WAIT);
-switch(found)
-{case BIT0:
- printf("no response:");
- printf("%X \r\n",found);
- found=0;
- WAIT=0;
- break;
+ switch(found) {
+ case BIT0:
+ printf("no response:");
+ printf("%X \r\n",found);
+ found=0;
+ WAIT=0;
+ break;
// //case BIT1:
// //case BIT2:
// //case BIT3:
//// case BIT4:
//// case BIT5:
- case BIT6:
- ReadNFC();
- PowerDownNFC(); //SleepNFC() //StandByNFC()
- found=1;
- WAIT=0;
- break;
- case BIT7:
- printf("tx complete:");
- printf("%X \r\n",found);
- found=0;
- WAIT=0;
-break;
-default: found=0;
-}
-//
-//
-////InventoryReqNFC();
-////if(found==1)
-////{
-////ReadNFC();
-////printf("tag id:");
-////for(uint8_t i=0; i<noBytes; i++)
-////printf("%X ", buf[i]);
-////printf("\r\n");
-////found=0;
-////}
-////else
-//{printf("tnf2 \r\n");
-//}
+ case BIT6:
+ ReadNFC();
+//PowerDownNFC(); //SleepNFC() //StandByNFC()
+ found=1;
+ WAIT=0;
+ break;
+ case BIT7:
+ printf("tx complete:");
+ printf("%X \r\n",found);
+ found=0;
+ WAIT=0;
+ break;
+ default:
+ if((nfc>10)&&(rssi_flag=1));
+ {rssi_flag=0;
+ nfc=0;
+ PowerUpNFC();
+ NFCInit();
+ RegisterReInitNFC();
+ printf("resetting 7970 \r\n:");
+ found=0;
+ }
+ }
-return found;
+ return found;
}
\ No newline at end of file
--- a/readerComm.h Fri Apr 10 23:16:44 2015 +0000 +++ b/readerComm.h Thu Apr 30 23:30:55 2015 +0000 @@ -1,3 +1,33 @@ + +//#define EN_7970_PIN p0 +//#define DETECT_METAL_PIN p1 +//#define METAL_THRESH_PIN p2 +//#define SPI_CLK_PIN p3 +//#define EN2_7970_PIN p4 +//#define VUSBMON_PIN p5 +//#define VBATMON_PIN p6 +//#define SPI_MOSI_PIN p7 +//#define SPI_MISO_PIN p8 +//#define CS_7970_PIN p9 +//#define TP1_PIN p10 //use this one for the serial port TX +//#define WD_CONTROL_PIN p11 +//#define WATCHDOG_PIN p12 +//#define CHARGING_PIN p13 +//#define SCL_PIN p14 +//#define SDA_PIN p15 +//#define ADXL345_INT_PIN p16 +//#define BLED_PIN p17 +//#define GLED_PIN p18 +//#define RLED_PIN p19 +//#define UNUSED_20_PIN p20 +//#define DETECT_METAL_INT_PIN p21 +//#define COILPWR_PIN p22 +//#define UNUSED_23_PIN p23 +//#define TP4_PIN p24 +//#define TP5_PIN p25 +//#define IRQ_7970_PIN p28 +//#define AO_7970_PIN p29 +//#define MOD_7970_PIN p30 // Prototypes //void SpiInit1(void); // SPI 250 Khz