Chanel's edits
Dependencies: max32630fthr USBDevice
Diff: main.cpp
- 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