Chanel's edits
Dependencies: max32630fthr USBDevice
main.cpp
- Committer:
- saleiferis
- Date:
- 2020-03-02
- Revision:
- 9:171171516ebd
- Parent:
- 8:2005014df05c
- Child:
- 10:28b8729cf5dc
File content as of revision 9:171171516ebd:
#include "mbed.h" #include "math.h" #include "max32630fthr.h" #include "max86150.h" #include "I2C.h" #include "ble/BLE.h" #include "ble/Gap.h" //#include "ble/services/HeartRateService.h" #include "ECGService.h" #include <events/mbed_events.h> #include "bt32630.h" //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(); //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); I2C i2c(I2C2_SDA, I2C2_SCL); MAX86150 max86150Sensor; volatile bool intFlag = false; volatile uint8_t writePointer; volatile uint8_t readPointer; volatile uint32_t curr_time; volatile uint32_t prev_time; volatile int16_t samplesToRead; 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; } ////////// int main(){ //i2c.frequency(recommendedi2cFreq); //max86150Sensor.softReset(); //wait_ms(3000); 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 ********* //eventQueue.call_every(1, periodicCallback); //it was 500 BLE &ble = BLE::Instance(); //ble.onEventsToProcess(scheduleBleEventsProcessing); ble.init(bleInitComplete); //pc.printf("Before dispatch forever"); //eventQueue.dispatch_forever(); 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); } */ }