diff --git a/drivers/include/lm75a-temp-sensor.h b/drivers/include/lm75a-temp-sensor.h deleted file mode 100644 index d99452927b..0000000000 --- a/drivers/include/lm75a-temp-sensor.h +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Copyright (C) 2013 Zakaria Kasmi - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License v2.1. See the file LICENSE in the top level - * directory for more details. - */ - -/** - * @defgroup drivers_lm75a LM75A - * @ingroup drivers_sensors - * @brief Driver for the LM75A digital temperature sensor and thermal watchdog - * - * The connection between the MCU and the LM75A is based on the i2c-interface. - * - * @{ - * - * @file - * @internal - * @brief Definitions of the LM75A temperature sensor driver. - * - * The connection between the LM75A and the MCU is based on the I2C-interface. - * - * @author Zakaria Kasmi - */ - -#ifndef LM75A_H -#define LM75A_H - -#include -#include -#include "i2c.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @name LM75A register addresses - * @{ - */ -#define LM75A_ADDR 0x48 -#define LM75A_TEMPERATURE_REG 0x0 -#define LM75A_CONFIG_REG 0x1 -#define LM75A_THYST_REG 0x2 -#define LM75A_OVER_TEMP_REG 0x3 -/** @} */ - -/** - * @brief Define the used I2C Interface - */ -//#define LM75A_I2C_INTERFACE I2C0 // P0.27 SDA0, P0.28 SCL0 -#define LM75A_I2C_INTERFACE I2C1_0 // P0.0 SDA1, P0.1 SCL1 -//#define LM75A_I2C_INTERFACE I2C1_1 // P0.19 SDA1, P0.20 SCL1 -//#define LM75A_I2C_INTERFACE I2C2 // P0.10 SDA2, P0.11 SCL2 - -/** - * @brief LM75A operation modes - */ -enum OPERATION_MODES { - LM75A_NORMAL_OPERATION_MODE, - LM75A_SHUTDOWN_MODE, - LM75A_COMPARATOR_MODE, - LM75A_INTERRUPT_MODE -}; - -/** - * @name Common definitions for LMA75A - * @{ - */ -#define LM75A_BIT0 0x0 -#define LM75A_BIT1 0x1 -#define LM75A_BIT2 0x2 -#define LM75A_BIT3 0x3 -#define LM75A_BIT4 0x4 -#define LM75A_BIT5 0x5 -#define LM75A_BIT6 0x6 -#define LM75A_BIT7 0x7 -#define LM75A_BIT8 0x8 -#define LM75A_BIT9 0x9 -#define LM75A_BIT10 0xA -#define LM75A_BIT15 0xF -#define LM75A_MOST_SIG_BYTE_MASK 0xFF00 -#define LM75A_LEAST_SIG_BYTE_MASK 0x00FF -#define LM75A_DATA_BITS_MASK 0x07FF -#define LM75A_SIGN_BIT_MASK (1< BIT0, - * Pin1 --> BIT1, Pin2 --> BIT2 = 2^2 = 4 - * @param[in] flags define if the interrupt is generated on rising - * or falling edge (#GPIOINT_RISING_EDGE, - * #GPIOINT_FALLING_EDGE). - * @param[in] handler pointer to an interrupt handler. - * - * @return true if the the external interrupt handler is successfully - * registered, otherwise false. - */ -bool lm75A_ext_irq_handler_register(int32_t port, uint32_t pin_bit_mask, - int32_t flags, void *handler); - - -/** - * @brief Initialize the LM75A temperature sensor. - * The baud rate and the handler for the external interrupt can be - * initialized. The external interrupt handler is optional, if no - * handler is available, the NULL-value can be entered. - * The hysteresis and the over-temperature are displayed before and - * after a rest action is performed. After this the LM7A sensor is - * set in the interrupt or the comparator mode. - * - * @param[in] i2c_interface the i2c interface, several interfaces - * can be selected: i2c0, i2c1 and i2c2. - * @param[in] baud_rate the baud rate. - * @param[in] external_interr_handler pointer to a handler for the external - * interrupt. - * - * @return true if the I2C interface and the external interrupt handler are - * successfully initialized, otherwise false. - */ -bool lm75A_init(uint8_t i2c_interface, uint32_t baud_rate, - void *external_interr_handler); - - -/** - * @brief Register the external interrupt handler for the over-temperature - * shutdown output. - * - * @param[in] handler pointer to a handler for the external interrupts. - * - * @return true if the the external interrupt handler is successfully - * registered, otherwise false. - */ -bool lm75A_external_interrupt_register(void *handler); - - -/** - * @brief Alarm the sensor sampling task about an external interrupt. - * - * @param[in] b is true if an external interrupt is occurred, otherwise false. - * - */ -void lm75A_set_in_alarm(bool b); - -#ifdef __cplusplus -} -#endif - -/** @} */ -#endif /* LM75A_H */ diff --git a/drivers/lm75a/Makefile b/drivers/lm75a/Makefile deleted file mode 100644 index 48422e909a..0000000000 --- a/drivers/lm75a/Makefile +++ /dev/null @@ -1 +0,0 @@ -include $(RIOTBASE)/Makefile.base diff --git a/drivers/lm75a/lm75a-temp-sensor.c b/drivers/lm75a/lm75a-temp-sensor.c deleted file mode 100644 index 0c82e6337f..0000000000 --- a/drivers/lm75a/lm75a-temp-sensor.c +++ /dev/null @@ -1,311 +0,0 @@ -/* - * lm75a-temp-sensor.c - Driver for the LM75A temperature sensor based on the - * i2c interface. - * - * Copyright (C) 2013 Zakaria Kasmi - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License v2.1. See the file LICENSE in the top level - * directory for more details. - * - */ - -/** - * @file - * @internal - * @brief Driver for the LM75A temperature sensor. - * The communication between the LM75A and the MCU is - * based on the i2c interface. - * - * @author Zakaria Kasmi - * @version $Revision: 3855 $ - * - * @note $Id: lm75a-temp-sensor.c 3855 2013-09-05 13:53:49 kasmi $ - */ - -#include -#include -#include -#include -#include -#include -#include "msg.h" -#include "thread.h" -#include "lpc2387.h" -#include "gpioint.h" -#include "i2c.h" -#include "lm75a-temp-sensor.h" -#include "board.h" -#include "xtimer.h" - -//declaration as volatile is important, otherwise no interrupt is triggered. -volatile bool my_alarm = false; - -static uint16_t get_2s_complement(uint16_t num) -{ - return ~(num) + 1; -} - -//Write: MC --> Sensor -static void to_bytes(float_t f, uint8_t *buff) -{ - int32_t i = (int32_t)(f * 2); - buff[0] = (uint8_t)((i >> LM75A_BIT1) & 0xFF);//Most signif. byte - buff[1] = (uint8_t)((i & LM75A_BIT1) << LM75A_BIT7);//Least signif. byte -} - -static uint16_t to_uint16(uint8_t *buff) -{ - if (buff != NULL) { - return (buff[0] << LM75A_BIT8) | buff[1]; - } - else { - return UINT16_MAX; - } -} - -//Read: Sensor --> MC -volatile static float_t to_float(uint8_t reg_addr, uint16_t reg_value) -{ - uint16_t sign = reg_value & LM75A_SIGN_BIT_MASK; - float_t f_temp = 0.0; - float_t factor = 0.0; - - switch (reg_addr) { - case LM75A_OVER_TEMP_REG: - case LM75A_THYST_REG: - factor = 0.5; - break; - - case LM75A_TEMPERATURE_REG: - factor = 0.125; - } - - if (sign) { //the number is negative - f_temp = (get_2s_complement(reg_value) & LM75A_DATA_BITS_MASK) - * -factor; - } - else { //the number is positive - f_temp = reg_value * factor; - } - return f_temp; -} - -static void set_register(uint8_t i2c_interface, uint8_t reg_addr, float_t value) -{ - bool status = false; - uint8_t tx_buff[2]; - - switch (reg_addr) { - case LM75A_OVER_TEMP_REG: - case LM75A_THYST_REG: - to_bytes(value, tx_buff); - status = i2c_write(i2c_interface, LM75A_ADDR, reg_addr, tx_buff, 2); - break; - - case LM75A_CONFIG_REG: - tx_buff[0] = (uint8_t) value; - status = i2c_write(i2c_interface, LM75A_ADDR, reg_addr, tx_buff, 1); - } - - if (!status) { - puts( - "[lm75a_tempSensorI2C/lm75A_setRegister]: Slave is not ready !!\n"); - } -} - -void lm75A_set_over_temperature(float_t tos) -{ - set_register(LM75A_I2C_INTERFACE, LM75A_OVER_TEMP_REG, tos); -} - -void lm75A_set_hysteresis_temperature(float_t thsyt) -{ - set_register(LM75A_I2C_INTERFACE, LM75A_THYST_REG, thsyt); -} - -static uint16_t lm75A_get_register_value(uint8_t i2c_interface, - uint8_t reg_addr, - uint8_t reg_size) -{ - uint8_t rx_buff[reg_size]; - - i2c_clear_buffer(rx_buff, sizeof(rx_buff)); - if ((reg_size > 0) && (reg_size < 3)) { - bool status = i2c_read(i2c_interface, LM75A_ADDR, reg_addr, rx_buff, sizeof(rx_buff)); - if (!status) { //Slave is not ready - puts( - "[lm75a_tempSensorI2C/lm75A_getConfigReg]: Slave is not\ - ready !\n"); - - if (reg_size < 2) { - return UCHAR_MAX; - } - else { - return UINT16_MAX; - } - } - else { //Slave acknowledged - if (reg_size < 2) { - return rx_buff[0]; - } - else { - return to_uint16(rx_buff); - } - } - } - else { - puts("the register size must be less than 2"); - return UINT16_MAX; - } -} - -uint8_t lm75A_get_config_reg(void) -{ - return lm75A_get_register_value(LM75A_I2C_INTERFACE, LM75A_CONFIG_REG, 1); -} - -float_t lm75A_get_hysteresis_temperature(void) -{ - uint16_t hyst_reg_value = 0; - hyst_reg_value = lm75A_get_register_value(LM75A_I2C_INTERFACE, - LM75A_THYST_REG, 2); - hyst_reg_value = (hyst_reg_value >> LM75A_BIT7); - return to_float(LM75A_THYST_REG, hyst_reg_value); -} - -float_t lm75A_get_over_temperature(void) -{ - uint16_t over_temp = 0; - - over_temp = lm75A_get_register_value(LM75A_I2C_INTERFACE, - LM75A_OVER_TEMP_REG, 2); - over_temp = (over_temp >> LM75A_BIT7); - return to_float(LM75A_OVER_TEMP_REG, over_temp); -} - -float_t lm75A_get_ambient_temperature(void) -{ - uint16_t amb_temp = 0; - amb_temp = lm75A_get_register_value(LM75A_I2C_INTERFACE, - LM75A_TEMPERATURE_REG, 2); - amb_temp = (amb_temp >> LM75A_BIT5); - return to_float(LM75A_TEMPERATURE_REG, amb_temp); -} - -void lm75A_reset(void) -{ - lm75A_set_over_temperature(LM75A_DEFAULT_TOS); - lm75A_set_hysteresis_temperature(LM75A_DEFAULT_THYST); - set_register(LM75A_I2C_INTERFACE, LM75A_CONFIG_REG, - LM75A_DEFAULT_CONFIG_VALUE); -} - -void lm75A_set_operation_mode(uint8_t op_mode) -{ - uint8_t config_reg = lm75A_get_config_reg(); - - switch (op_mode) { - case LM75A_NORMAL_OPERATION_MODE: - config_reg &= ~(1 << LM75A_BIT0); - break; - - case LM75A_SHUTDOWN_MODE: - config_reg |= (1 << LM75A_BIT0); - break; - - case LM75A_COMPARATOR_MODE: - config_reg &= ~(1 << LM75A_BIT1); - break; - - case LM75A_INTERRUPT_MODE: - config_reg |= (1 << LM75A_BIT1); - break; - - default: - config_reg &= ~(1 << LM75A_BIT0); - } - set_register(LM75A_I2C_INTERFACE, LM75A_CONFIG_REG, config_reg); -} - -bool lm75A_ext_irq_handler_register(int32_t port, uint32_t pin_bit_mask, - int32_t flags, void *handler) -{ - return gpioint_set(port, pin_bit_mask, flags, handler); -} - -bool lm75A_init(uint8_t i2c_interface, uint32_t baud_rate, - void *external_interr_handler) -{ - if (i2c_initialize(i2c_interface, (uint32_t) I2CMASTER, 0, baud_rate, NULL) - == false) { /* initialize I2C */ - puts("fatal error happened in i2c_initialize()\n"); - return false; - } - //i2c_enable_pull_up_resistor(i2c_interface); - i2c_disable_pull_up_resistor(i2c_interface); - - if ((external_interr_handler != NULL) - && lm75A_ext_irq_handler_register(2, BIT3, GPIOINT_FALLING_EDGE, - external_interr_handler)) { - printf("# %-70s%10s\n", "External interrupt handler registration", - "...[OK]"); - } - else { - printf("# %-70s%10s\n", "External interrupt handler registration", - "...[FAILED]"); - return false; - } - - puts("################## Before reset ##################"); - printf("configReg = %u\n", lm75A_get_config_reg()); - printf("hystTemp = %f\n", lm75A_get_hysteresis_temperature()); - printf("overTemp = %f\n", lm75A_get_over_temperature()); - lm75A_reset(); - - puts("\n################## After reset ##################"); - printf("configRegInitial = %u\n", lm75A_get_config_reg()); - printf("initialHystTemp = %f\n", lm75A_get_hysteresis_temperature()); - printf("initialOverTemp = %f\n", lm75A_get_over_temperature()); - - puts("\n################## New configuration ##################"); - // set the hysteresis temperature - lm75A_set_hysteresis_temperature(32.0); - printf("hystTemp = %f\n", lm75A_get_hysteresis_temperature()); - lm75A_set_over_temperature(33.0); - printf("overTemp = %f\n", lm75A_get_over_temperature()); - - puts("\n################## Go to comparator mode ##################"); - lm75A_set_operation_mode(LM75A_COMPARATOR_MODE); - printf("configReg = %u\n", lm75A_get_config_reg()); - // puts("\n################## Go to interrupt mode ##################"); - // lm75A_set_operation_mode(LM75A_INTERRUPT_MODE); - // printf("configReg = %u\n", lm75A_get_config_reg()); - - return true; -} - -void lm75A_set_in_alarm(bool b) -{ - my_alarm = b; -} - -/* - * Application entry point. - */ -void lm75A_start_sensor_sampling(void (*handler)(void)) -{ - /* - * Normal main() thread activity. - */ - while (true) { - printf("amb_temp = %3.3f\n", lm75A_get_ambient_temperature()); - - if (my_alarm && (handler != NULL)) { - handler(); - my_alarm = false; - } - xtimer_usleep(100000); - xtimer_usleep(100000); - } -}