123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364 |
- #include "hal/lsm6ds3.h"
- #include "log/esp_log.h"
- static const char* TAG = "lsm6ds3.c";
- static int32_t ICACHE_FLASH_ATTR Sensor_IO_Write(uint16_t WriteAddr, uint8_t nBytesToWrite, uint32_t *pBuffer)
- {
-
- WRITE_PERI_REG(PERIPHS_IO_MUX, 0x105);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, 2);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, 2);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, 2);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, 2);
-
- SpiAttr spiConfig;
- spiConfig.mode = SpiMode_Master;
- spiConfig.subMode = SpiSubMode_0;
- spiConfig.speed = SpiSpeed_8MHz;
- spiConfig.bitOrder = SpiBitOrder_MSBFirst;
-
- SPIInit(SpiNum_HSPI, &spiConfig);
-
- SpiData spiData;
- uint32_t addr = (WriteAddr);
- spiData.cmd = addr;
- spiData.cmdLen = 1;
- spiData.addrLen = 0;
- spiData.addr = 0;
- spiData.data = pBuffer;
- spiData.dataLen = nBytesToWrite;
-
- return SPIMasterSendData(SpiNum_HSPI, &spiData);
- }
- static int32_t ICACHE_FLASH_ATTR Sensor_IO_Read(uint16_t ReadAddr, uint8_t nBytesToRead, uint32_t *pBuffer)
- {
-
- WRITE_PERI_REG(PERIPHS_IO_MUX, 0x105);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, 2);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, 2);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, 2);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, 2);
-
- SpiAttr spiConfig;
- spiConfig.mode = SpiMode_Master;
- spiConfig.subMode = SpiSubMode_0;
- spiConfig.speed = SpiSpeed_8MHz;
- spiConfig.bitOrder = SpiBitOrder_MSBFirst;
-
- SPIInit(SpiNum_HSPI, &spiConfig);
-
- SpiData spiData;
- uint32_t addr = (ReadAddr | 0x80);
- spiData.cmd = addr;
- spiData.cmdLen = 1;
- spiData.addrLen = 0;
- spiData.addr = 0;
- spiData.data = pBuffer;
- spiData.dataLen = nBytesToRead;
- return SPIMasterRecvData(SpiNum_HSPI, &spiData);
- }
- static int32_t ICACHE_FLASH_ATTR Sensor_IO_Set_Register(uint16_t WriteAddr, uint32_t v0)
- {
- uint32_t v1;
- Sensor_IO_Write(WriteAddr, 1, &v0);
- Sensor_IO_Read(WriteAddr, 1, &v1);
- if (v0 == v1)
- return 0;
- else
- return -1;
- }
- int32_t ICACHE_FLASH_ATTR
- LSM6DS3_Enable_I2C_Pullups(uint8_t enable)
- {
- uint32_t ctrl10_c, master_config;
- Sensor_IO_Read(LSM6DS3_CTRL10_C, 1, &ctrl10_c);
- Sensor_IO_Read(LSM6DS3_MASTER_CONFIG, 1, &master_config);
- if (enable)
- {
- ctrl10_c |= LSM6DS3_FUNC_EN;
-
- master_config |= LSM6DS3_PULL_UP_EN;
- master_config &= ~LSM6DS3_MASTER_ON;
- }
- else
- {
- ctrl10_c &= ~LSM6DS3_FUNC_EN;
- master_config &= ~(LSM6DS3_PULL_UP_EN + LSM6DS3_MASTER_ON);
- }
- return (Sensor_IO_Set_Register(LSM6DS3_CTRL10_C, ctrl10_c) & Sensor_IO_Set_Register(LSM6DS3_MASTER_CONFIG, master_config));
- }
- int32_t ICACHE_FLASH_ATTR
- LSM6DS3_Enable_I2C_Bridge(uint8_t enable)
- {
- LSM6DS3_Enable_I2C_Pullups(1);
- uint32_t master_config;
- Sensor_IO_Read(LSM6DS3_MASTER_CONFIG, 1, &master_config);
- if (enable)
- {
- master_config |= LSM6DS3_PASS_THROUGH_MODE;
- }
- else
- {
- master_config &= ~LSM6DS3_PASS_THROUGH_MODE;
- }
- ESP_LOGI(TAG, "Writing %x to LSM6DS3_MASTER_CONFIG", master_config);
- return Sensor_IO_Set_Register(LSM6DS3_MASTER_CONFIG, master_config);
- }
|