A collection of Analog Devices drivers for the mbed platform
Embed:
(wiki syntax)
Show/hide line numbers
ADT7310.cpp
00001 #include "ADT7310.h" 00002 00003 00004 ADT7310::ADT7310(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :/* miso(MISO),*/ adt7310(MOSI, MISO, SCK), cs(CS) 00005 { 00006 cs = true; 00007 adt7310.format(8, SPI_MODE); 00008 } 00009 00010 void ADT7310::reset() 00011 { 00012 cs = false; 00013 adt7310.write(0xff); 00014 adt7310.write(0xff); 00015 adt7310.write(0xff); 00016 adt7310.write(0xff); 00017 cs = true; 00018 } 00019 uint8_t ADT7310::read_status() 00020 { 00021 uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_STATUS << 3), ADT7310_DUMMY}; 00022 spi_read(spi_data, 2); 00023 return spi_data[1]; 00024 } 00025 00026 void ADT7310::start_single_conversion() 00027 { 00028 uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY}; 00029 spi_read(spi_data, 2); 00030 spi_data[0] = ADT7310_WRITE | (ADT7310_CONFIG << 3); 00031 spi_data[1] = (spi_data[1] & (~(0x60))) | (0x20); // Oneshot conversion 00032 spi_write(spi_data, 2); 00033 } 00034 void ADT7310::write_config(uint8_t data) 00035 { 00036 uint8_t spi_data[2] = {ADT7310_WRITE | (ADT7310_CONFIG << 3), data}; 00037 spi_write(spi_data, 2); 00038 } 00039 00040 uint8_t ADT7310::read_config() 00041 { 00042 uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY}; 00043 spi_read(spi_data, 2); 00044 return spi_data[1]; 00045 } 00046 uint16_t ADT7310::read_temp() 00047 { 00048 uint8_t spi_data[3] = {ADT7310_READ | (ADT7310_TEMP << 3), ADT7310_DUMMY, ADT7310_DUMMY }; 00049 spi_read(spi_data, 3); 00050 return ((static_cast<uint16_t>(spi_data[1]) << 8) | spi_data[2]); 00051 } 00052 void ADT7310::write_temp_setpoint(uint8_t setpoint, uint16_t data) 00053 { 00054 uint8_t spi_data[3] = {ADT7310_WRITE | (setpoint << 3), ((data & 0xff00) >> 8), data & 0xff }; 00055 spi_write(spi_data, 3); 00056 } 00057 00058 void ADT7310::spi_write(uint8_t *data, uint8_t size) 00059 { 00060 cs = false; 00061 uint8_t i; 00062 for(i = 0; i < size; i++) 00063 adt7310.write(data[i]); 00064 cs = true; 00065 00066 } 00067 void ADT7310::spi_read(uint8_t *data, uint8_t size) 00068 { 00069 cs = false; 00070 uint8_t i; 00071 for(i = 0; i < size; i++) 00072 data[i] = adt7310.write(data[i]); 00073 00074 cs = true; 00075 }
Generated on Tue Jul 12 2022 17:59:52 by 1.7.2