diff --git a/.mcuxpressoide_packages_support/info.properties b/.mcuxpressoide_packages_support/info.properties index 2d68962..9cd82ab 100644 --- a/.mcuxpressoide_packages_support/info.properties +++ b/.mcuxpressoide_packages_support/info.properties @@ -1,5 +1,5 @@ #MCUXpresso IDE -#Fri Oct 14 12:50:11 EEST 2022 -product.name=MCUXpresso IDE v11.5.0 [Build 7232] [2022-01-11] -product.version=11.5.0 -product.build=7232 +#Wed Oct 05 15:28:44 EEST 2022 +product.name=MCUXpresso IDE v11.6.0 [Build 8187] [2022-07-13] +product.version=11.6.0 +product.build=8187 diff --git a/DigitalIoPin/.settings/language.settings.xml b/DigitalIoPin/.settings/language.settings.xml index 1a41d3e..55f49bb 100644 --- a/DigitalIoPin/.settings/language.settings.xml +++ b/DigitalIoPin/.settings/language.settings.xml @@ -4,7 +4,7 @@ - + @@ -15,7 +15,7 @@ - + diff --git a/esp-vent-main/.cproject b/esp-vent-main/.cproject index 534fcb6..dc71f86 100644 --- a/esp-vent-main/.cproject +++ b/esp-vent-main/.cproject @@ -97,6 +97,7 @@ + diff --git a/esp-vent-main/.settings/language.settings.xml b/esp-vent-main/.settings/language.settings.xml index 5645974..19be77b 100644 --- a/esp-vent-main/.settings/language.settings.xml +++ b/esp-vent-main/.settings/language.settings.xml @@ -3,8 +3,8 @@ - - + + @@ -15,7 +15,7 @@ - + diff --git a/esp-vent-main/src/I2C.cpp b/esp-vent-main/src/I2C.cpp new file mode 100644 index 0000000..8536719 --- /dev/null +++ b/esp-vent-main/src/I2C.cpp @@ -0,0 +1,143 @@ +/* + * I2C.cpp + * + * Created on: 21.2.2016 + * Author: krl + * Based on example provided by NXP Semiconductors. See copyright notice below. + */ + +/* + * @brief I2CM bus master example using polling mode + * + * @note + * Copyright(C) NXP Semiconductors, 2014 + * All rights reserved. + * + * @par + * Software that is described herein is for illustrative purposes only + * which provides customers with programming information regarding the + * LPC products. This software is supplied "AS IS" without any warranties of + * any kind, and NXP Semiconductors and its licensor disclaim any and + * all warranties, express or implied, including all implied warranties of + * merchantability, fitness for a particular purpose and non-infringement of + * intellectual property rights. NXP Semiconductors assumes no responsibility + * or liability for the use of the software, conveys no license or rights under any + * patent, copyright, mask work right, or any other intellectual property rights in + * or to any products. NXP Semiconductors reserves the right to make changes + * in the software without notification. NXP Semiconductors also makes no + * representation or warranty that such application will be suitable for the + * specified use without further testing or modification. + * + * @par + * Permission to use, copy, modify, and distribute this software and its + * documentation is hereby granted, under NXP Semiconductors' and its + * licensor's relevant copyrights in the software, without fee, provided that it + * is used in conjunction with NXP Semiconductors microcontrollers. This + * copyright, permission, and disclaimer notice must appear in all copies of + * this code. + */ + +#include "../inc/I2C.h" + + +I2C::I2C(const I2C_config &cfg): device(nullptr) { + if(cfg.device_number == 0) { + device = LPC_I2C0; + // board init must have been called before the pins can be configured + Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 22, IOCON_DIGMODE_EN | cfg.i2c_mode); + Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 23, IOCON_DIGMODE_EN | cfg.i2c_mode); + Chip_SWM_EnableFixedPin(SWM_FIXED_I2C0_SCL); + Chip_SWM_EnableFixedPin(SWM_FIXED_I2C0_SDA); + } + else { + // currently we support only I2C number 0 + } + + if(device) { + /* Enable I2C clock and reset I2C peripheral - the boot ROM does not + do this */ + Chip_I2C_Init(device); + + /* Setup clock rate for I2C */ + Chip_I2C_SetClockDiv(device, cfg.clock_divider); + + /* Setup I2CM transfer rate */ + Chip_I2CM_SetBusSpeed(device, cfg.speed); + + /* Enable Master Mode */ + Chip_I2CM_Enable(device); + } +} + +I2C::~I2C() { + // TODO Auto-generated destructor stub +} + +bool I2C::write(uint8_t devAddr, uint8_t *txBuffPtr, uint16_t txSize) +{ + return transaction(devAddr, txBuffPtr, txSize, nullptr, 0); +} + +bool I2C::read(uint8_t devAddr, uint8_t *rxBuffPtr, uint16_t rxSize) +{ + return transaction(devAddr, nullptr, 0, rxBuffPtr, rxSize); +} + + +bool I2C::transaction(uint8_t devAddr, uint8_t *txBuffPtr, uint16_t txSize, uint8_t *rxBuffPtr, uint16_t rxSize) { + I2CM_XFER_T i2cmXferRec; + + // make sure that master is idle + while(!Chip_I2CM_IsMasterPending(LPC_I2C0)); + + /* Setup I2C transfer record */ + i2cmXferRec.slaveAddr = devAddr; + i2cmXferRec.status = 0; + i2cmXferRec.txSz = txSize; + i2cmXferRec.rxSz = rxSize; + i2cmXferRec.txBuff = txBuffPtr; + i2cmXferRec.rxBuff = rxBuffPtr; + + I2CM_XferBlocking(LPC_I2C0, &i2cmXferRec); + // Chip_I2CM_XferBlocking returns before stop condition is fully completed + // therefore we need to wait for master to be idle when doing back-to-back transactions (see beginning of the function) + + /* Test for valid operation */ + if (i2cmXferRec.status == I2CM_STATUS_OK) { + return true; + } + else { + return false; + } +} + +/* Transmit and Receive data in master mode */ +/* This duplicates (and combines) the functionality of Chip_I2CM_Xfer and Chip_I2CM_XferBlocking with a modification + * that allows us to do a zero length write (needed to use honeywell humidity/temp sensor) + */ +uint32_t I2C::I2CM_XferBlocking(LPC_I2C_T *pI2C, I2CM_XFER_T *xfer) +{ + uint32_t ret = 0; + /* start transfer */ + + /* set the transfer status as busy */ + xfer->status = I2CM_STATUS_BUSY; + /* Clear controller state. */ + Chip_I2CM_ClearStatus(pI2C, I2C_STAT_MSTRARBLOSS | I2C_STAT_MSTSTSTPERR); + /* Write Address and RW bit to data register */ + //Chip_I2CM_WriteByte(pI2C, (xfer->slaveAddr << 1) | (xfer->txSz == 0)); // original NXP version + // krl : both read and write lenght is 0 --> write (for honeywell temp sensor) + Chip_I2CM_WriteByte(pI2C, (xfer->slaveAddr << 1) | (xfer->txSz == 0 && xfer->rxSz != 0)); + /* Enter to Master Transmitter mode */ + Chip_I2CM_SendStart(pI2C); + + while (ret == 0) { + /* wait for status change interrupt */ + while (!Chip_I2CM_IsMasterPending(pI2C)) {} + /* call state change handler */ + ret = Chip_I2CM_XferHandler(pI2C, xfer); + } + return ret; +} + + diff --git a/esp-vent-main/src/I2C.h b/esp-vent-main/src/I2C.h new file mode 100644 index 0000000..d72610d --- /dev/null +++ b/esp-vent-main/src/I2C.h @@ -0,0 +1,33 @@ +/* + * I2C.h + * + * Created on: 21.2.2016 + * Author: krl + */ + +#ifndef I2C_H_ +#define I2C_H_ + +#include "chip.h" + +struct I2C_config { + unsigned int device_number; + unsigned int speed; + unsigned int clock_divider; + unsigned int i2c_mode; + I2C_config(): device_number(0), speed(100000), clock_divider(40), i2c_mode(IOCON_SFI2C_EN) {}; +}; + +class I2C { +public: + I2C(const I2C_config &cfg); + virtual ~I2C(); + bool transaction(uint8_t devAddr, uint8_t *txBuffPtr, uint16_t txSize, uint8_t *rxBuffPtr, uint16_t rxSize); + bool write(uint8_t devAddr, uint8_t *txBuffPtr, uint16_t txSize); + bool read(uint8_t devAddr, uint8_t *rxBuffPtr, uint16_t rxSize); +private: + LPC_I2C_T *device; + static uint32_t I2CM_XferBlocking(LPC_I2C_T *pI2C, I2CM_XFER_T *xfer); +}; + +#endif /* I2C_H_ */ diff --git a/esp-vent-main/src/PressureWrapper.cpp b/esp-vent-main/src/PressureWrapper.cpp new file mode 100644 index 0000000..3dcf978 --- /dev/null +++ b/esp-vent-main/src/PressureWrapper.cpp @@ -0,0 +1,47 @@ +/* + * PressureWrapper.cpp + * + * Created on: 5 Oct 2022 + * Author: evgenymeshcheryakov + */ + +#include "PressureWrapper.h" + +static uint8_t crc8(uint8_t *data, size_t size) { + uint8_t crc = 0x00; + uint8_t byteCtr; + //calculates 8-Bit checksum with given polynomial + for (byteCtr = 0; byteCtr < size; ++byteCtr) { + crc ^= (data[byteCtr]); + for (uint8_t bit = 8; bit > 0; --bit) { + if (crc & 0x80) crc = (crc << 1) ^ 0x131; //P(x)=x^8+x^5+x^4+1 = 0001 0011 0001 + else crc = (crc << 1); + } + } + return crc; +} + +PressureWrapper::PressureWrapper () +{ + NVIC_DisableIRQ(I2C0_IRQn); + I2C_config config; + I2C i2c_c(config); + i2c = &i2c_c; +} + +PressureWrapper::~PressureWrapper () +{ + // TODO Auto-generated destructor stub +} + +int PressureWrapper::getPressure() { + +} + +PRESSURE_DATA* PressureWrapper::getRawPressure () { + uint8_t getMeasurementComm = 0xF1; + i2c->transaction(0x40, &getMeasurementComm, 1, data.rBuffer, 3); + return &data; +} + + diff --git a/esp-vent-main/src/PressureWrapper.h b/esp-vent-main/src/PressureWrapper.h new file mode 100644 index 0000000..718926e --- /dev/null +++ b/esp-vent-main/src/PressureWrapper.h @@ -0,0 +1,42 @@ +/* + * PressureWrapper.h + * + * Created on: 5 Oct 2022 + * Author: evgenymeshcheryakov + */ + +#ifndef PRESSUREWRAPPER_H_ +#define PRESSUREWRAPPER_H_ + +#include "I2C.h" + +#define ADDRESS 0x40 +#define READADD 0x81 +#define WRITEADD 0x80 + +typedef struct _PRESSURE{ + uint8_t rBuffer[2]; + uint8_t crc; +}PRESSURE_DATA; + +class PressureWrapper +{ +public: + PressureWrapper (); + /** + * @brief Get the Status object + * + * @return true + * @return false + */ + int getPressure (); + + virtual ~PressureWrapper (); + +private: + I2C *i2c; + PRESSURE_DATA data = {{0, 0}, 0}; + PRESSURE_DATA* getRawPressure (); +}; + +#endif /* PRESSUREWRAPPER_H_ */ diff --git a/esp-vent-main/src/esp-vent-main.cpp b/esp-vent-main/src/esp-vent-main.cpp index 1ec0f05..4f6422e 100644 --- a/esp-vent-main/src/esp-vent-main.cpp +++ b/esp-vent-main/src/esp-vent-main.cpp @@ -21,6 +21,8 @@ #include "StateHandler.h" #include "SwitchController.h" #include "Timer.h" +#include "PressureWrapper.h" +#include "I2C.h" #include @@ -70,7 +72,14 @@ main (void) SwitchController sw_toggle (&b_toggle, &glob_time, &ventMachine, BUTTON_CONTROL_TOG_MODE); - int16_t pressure = 1; +// NVIC_DisableIRQ(I2C0_IRQn); + + I2C_config config; + I2C i2c(config); + PressureWrapper sens(&i2c); + + PRESSURE_DATA *pressure; + pressure = sens.getPressure(); while (1) { diff --git a/lpc_board_nxp_lpcxpresso_1549/.settings/language.settings.xml b/lpc_board_nxp_lpcxpresso_1549/.settings/language.settings.xml index 48af2ca..bb6fb83 100644 --- a/lpc_board_nxp_lpcxpresso_1549/.settings/language.settings.xml +++ b/lpc_board_nxp_lpcxpresso_1549/.settings/language.settings.xml @@ -3,8 +3,8 @@ - - + + @@ -15,7 +15,7 @@ - + diff --git a/lpc_chip_15xx/.settings/language.settings.xml b/lpc_chip_15xx/.settings/language.settings.xml index 168be13..7285754 100644 --- a/lpc_chip_15xx/.settings/language.settings.xml +++ b/lpc_chip_15xx/.settings/language.settings.xml @@ -4,7 +4,7 @@ - + @@ -15,7 +15,7 @@ - + diff --git a/periph_blinky/.settings/language.settings.xml b/periph_blinky/.settings/language.settings.xml index 5d2dd35..28247cc 100644 --- a/periph_blinky/.settings/language.settings.xml +++ b/periph_blinky/.settings/language.settings.xml @@ -4,7 +4,7 @@ - + @@ -15,7 +15,7 @@ - +