Chanel's edits

Dependencies:   max32630fthr USBDevice

Revision:
10:28b8729cf5dc
Parent:
9:171171516ebd
Child:
11:cbd9182d14d2
--- a/main.cpp	Mon Mar 02 23:14:08 2020 +0000
+++ b/main.cpp	Sat Mar 07 03:19:35 2020 +0000
@@ -12,54 +12,21 @@
 
 //Register definitions
 #define MAX86150_Addr 0xBC //updated per I2Cscanner, 8 bit version of 7 bit code 0x5E
-#define InterruptStatusReg1 0x00 //Interrupt status byte 0 (read both bytes 0x00 and 0x01 when checking int status)
-#define InterruptStatusReg2 0x01
-#define InterruptEnableReg1 0x02 //Interrupt enable byte 0
-#define InterruptEnableReg2 0x03
-#define FIFOWritePointerReg 0x04
-#define OverflowCounterReg 0x05
-#define FIFOReadPointerReg 0x06
-#define FIFODataReg 0x07
-#define FIFOConfigReg 0x08
-#define FIFODataControlReg1 0x09
-#define FIFODataControlReg2 0x0A
-#define SystemControlReg 0x0D
-#define ppgConfigReg0 0x0E
-#define ppgConfigReg1 0x0F
-#define ProxIntThreshReg 0x10
-#define LED1PulseAmpReg 0x11
-#define LED2PulseAmpReg 0x12
-#define LEDRangeReg 0x14
-#define LEDPilotPAReg 0x15
-#define EcgConfigReg1 0x3C
-#define EcgConfigReg2 0x3D
-#define EcgConfigReg3 0x3E
-#define EcgConfigReg4 0x3F
-#define PartIDReg 0xFF
 #define maxi2cFreq 1000000
 #define recommendedi2cFreq 400000
-#define interrupt_pin P5_0 //INTB pin --see InterruptIn declaration
-#define maxECGrate 0
-#define normECGrate 1
-//#define BaudRate 921600
-//#define BaudRate 256000 
-//#define BaudRate 250000 
-#define BaudRate 9600
-//#define BaudRate 115200
-//#define BaudRate 57600
-//also try 921600, 460800 230400
-const int16_t i2cBufferSize=32; //32 was stable. In this rev exploring 36
-void ISR_AFULL();
+ 
+#define BaudRate 115200
 
 
-//I2C i2c(I2C_SDA,I2C_SCL);
-
-
-Serial pc(USBTX,USBRX,NULL,BaudRate); //open serial port (optionally add device name and baud rate after specifying TX and RX pins)
-InterruptIn intPin(P5_5);
+Serial pc(USBTX,USBRX,NULL,BaudRate); 
+InterruptIn intPin(P5_5);   // interrupts currently not used
 I2C i2c(I2C2_SDA, I2C2_SCL);
 MAX86150 max86150Sensor;
 
+ECGService *hrServicePtr;
+
+//Variables modified in inerrupt routine
+volatile uint32_t intCount = 0;
 volatile bool intFlag = false;
 volatile uint8_t writePointer;
 volatile uint8_t readPointer;
@@ -67,105 +34,97 @@
 volatile uint32_t prev_time;
 volatile int16_t samplesToRead;
 
-Timer timer;
-
+Timer timer; 
 
-
-//// Bluetooth Init
-//BLE& ble = BLE::Instance();
 static events::EventQueue event_queue(/* event count */ 16 * EVENTS_EVENT_SIZE);
 
+/*
 void ISR_AFULL()
 {
     intPin.disable_irq();
     intFlag = true;
     readPointer = max86150Sensor.getReadPointer();
     writePointer = max86150Sensor.getWritePointer();
-    samplesToRead = (int16_t)writePointer - (int16_t)readPointer;
-    if (samplesToRead < 0) samplesToRead+=32;
+    samplesToRead = (int8_t)writePointer - (int8_t)readPointer;
+    //if (samplesToRead < 0) samplesToRead+=32;
+    intCount++;
+    //intPin.enable_irq();
+    
+}*/   
 
-}
+/*
+void ISR_DATA_READY()
+{
+    intPin.disable_irq();
+    readPointer = max86150Sensor.getReadPointer();
+    writePointer = max86150Sensor.getWritePointer();
+    samplesToRead = (int8_t)writePointer - (int8_t)readPointer;
+    //if (samplesToRead < 0) samplesToRead+=32;
+    intCount++;
+    char data[3];
+    //char *p = data;
+    max86150Sensor.writeRegister8(MAX86150_Addr,0x07,0x01);
+    i2c.write(MAX86150_Addr,command, 1);
+    i2c.read(MAX86150_Addr, data, 3, false);
+    uint8_t temp[sizeof(int32_t)]; //Array of 4 bytes that we will convert into long
+    int32_t tempLong;
+    temp[1] = data[0];
+    temp[2] = data[1];
+    temp[3] = data[2];
+    temp[0] = 0;
+    //Convert array to long
+    memcpy(&tempLong, temp, sizeof(tempLong));
+    pc.printf("%d\n",tempLong);
+    intPin.enable_irq();
+}*/
+    
 //////////
-int main(){
-    //i2c.frequency(recommendedi2cFreq);
-     //max86150Sensor.softReset();
-     //wait_ms(3000);
+int main(){  
     max86150Sensor.begin(i2c, recommendedi2cFreq, MAX86150_Addr); 
     wait_ms(300);
    
     //unsigned char partID = max86150Sensor.readPartID();
     unsigned char partID = max86150Sensor.readRegister8(MAX86150_Addr,0xFF);
     pc.printf("Part ID is: %X\n",partID);
-    
-    
-    //***** SETUP SENSOR
-    //max86150Sensor.writeRegister8(MAX86150_Addr,0x0D,0x01); 
-    max86150Sensor.setup(); //Configure sensor
-    //
-    wait_ms(300);
-    pc.printf("SYSCONTOL REG: %x\n", max86150Sensor.readRegister8(MAX86150_Addr,0x0D));
-    while(max86150Sensor.readRegister8(MAX86150_Addr,0x0D) != 0x04)
-    {
-        pc.printf("SYS CTRL not set properly\n");
-        wait_ms(200);
-    }
-    pc.printf("FIFO CONFIG: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x08));
-    pc.printf("INT_EN1: %X\n", max86150Sensor.readRegister8(MAX86150_Addr,0x02));
-    pc.printf("INT STATUS: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x00));
-    pc.printf("INT STATUS: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x01));
-    
-    //*************************************************************\\
-    
-    //wait_ms(2000);
-    //pc.printf("SYS CTRL REG: %x\n",max86150Sensor.readRegister8(MAX86150_Addr,0x0D));
-    //uint8_t readPointer = max86150Sensor.getReadPointer();
-    //uint8_t writePointer = max86150Sensor.getWritePointer();
-    //pc.printf("WRT_PTR: %X ... READ_PTR: %X",writePointer,readPointer);
-    //pc.printf("SYS CTRL REG: %x\n",max86150Sensor.readRegister8(MAX86150_Addr,0x0D));
-    
-    
-    //******* SETUP BLUETOOTH *********   
+    while (partID != 0x1E) {/* Connection to sensor is not established */ }
     
     
-    //eventQueue.call_every(1, periodicCallback); //it was 500
+    //***** SETUP SENSOR */
+    max86150Sensor.setup(); //Configure sensor
+    wait_ms(300);
+    pc.printf("SYSCONTOL REG: %x\n", max86150Sensor.readRegister8(MAX86150_Addr,0x0D));
+    pc.printf("FIFO CONFIG: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x08));
+    pc.printf("INT_EN1: %X\n", max86150Sensor.readRegister8(MAX86150_Addr,0x02));
+    pc.printf("INT_EN2: %X\n", max86150Sensor.readRegister8(MAX86150_Addr,0x03));
+    pc.printf("INT STATUS1: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x00));
+    pc.printf("INT STATUS2: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x01));
+    
+    //*************************************************************//
+    
+    max86150Sensor.clearFIFO();
+    max86150Sensor.writeRegister8(MAX86150_Addr,0x0D,0x04); //start FIFO
+    
+    //******* SETUP BLUETOOTH *********   
+    eventQueue.call_every(1, periodicCallback); // poll sensor every 1ms. New samples come every 5ms, so polling freq can potentially be decreased
     BLE &ble = BLE::Instance();
-    //ble.onEventsToProcess(scheduleBleEventsProcessing);
-    ble.init(bleInitComplete);
-    //pc.printf("Before dispatch forever");
+    ble.onEventsToProcess(scheduleBleEventsProcessing);
+    //ble.init(bleInitComplete);
     //eventQueue.dispatch_forever();
     
-    
+    // Below code is for testing interrupts and sensor polling without involving bluetooth API
+   // max86150Sensor.clearFIFO();
+    //intPin.fall(&ISR_DATA_READY);
+   // max86150Sensor.writeRegister8(MAX86150_Addr,0x0D,0x04);
+    int16_t ecgsigned16;
     
     
-    intPin.fall(&ISR_AFULL);
-    max86150Sensor.readRegister8(MAX86150_Addr,0x00);
-    max86150Sensor.readRegister8(MAX86150_Addr,0x01);
     while(1){
-        //pc.printf("INT STATUS1: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x00));
-        
-        if (intFlag){
-            pc.printf("intFLagged\n");
-            pc.printf("ReadPtr: %d ... WrtPtr: %d ... SmplRead: %d\n",readPointer, writePointer, samplesToRead);
-            intFlag = false;
-            max86150Sensor.readRegister8(MAX86150_Addr,0x00);
-            //max86150Sensor.readRegister8(MAX86150_Addr,0x01);
-            pc.printf("INT STATUS2: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x01));
-            intPin.enable_irq();
-            }
-        
-        }
-    
-    /// Get sensor data
-    /*
-    while(1){
-        if(max86150Sensor.check()>0)
-        {
-        pc.printf("%d\n",max86150Sensor.getFIFOECG());
-        }
-        wait_us(500); 
-        }
-      */
-        
-    
-    
+        if(max86150Sensor.check()>0){
+            
+            ecgsigned16 = (int16_t) (max86150Sensor.getFIFOECG()>>2);
+            max86150Sensor.nextSample();
+            pc.printf("%f\n",(float)ecgsigned16);
+        }  
+    }
+      
 }
\ No newline at end of file