/* <<<<<<< HEAD * lm75a-temp-sensor.h - Definitions of the LM75A temperature sensor driver. * * Copyright (C) 2013 Zakaria Kasmi * * This source code is licensed under the LGPLv2 license, ======= * lm75a-temp-sensor.h - Definitions of the LM75A temperature sensor driver for the LPC2387 chip. * Copyright (C) 2013 Zakaria Kasmi * * This source code is licensed under the LGPLv2 license, >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog * See the file LICENSE for more details. */ /** * @file * @internal <<<<<<< HEAD * @brief Definitions of the LM75A temperature sensor driver. * * The connection between the LM75A and the MCU is based * on the I2C-interface. * * @author Freie Universität Berlin, Computer Systems & Telematics * @author Zakaria Kasmi * @version $Revision: 3859 $ * * @note $Id: lm75a-temp-sensor.h 3854 2013-09-2 15:35:21 kasmi $ ======= * @brief Definitions of the LM75A temperature sensor driver for the LPC2387 chip. * The connection between the LM75A and the LPC2387 chip is based on the I2C-interface. * * @author Freie Universität Berlin, Computer Systems & Telematics * @author Zakaria Kasmi * @version $Revision: 3854 $ * * @note $Id: lm75a-temp-sensor.h 3854 2013-06-19 12:27:01Z zkasmi $ >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog */ #ifndef LM75A_H_ #define LM75A_H_ #include #include #include "i2c.h" /* LM75A register addresses */ <<<<<<< HEAD #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 /* 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 /* LM75A operation modes */ enum OPERATION_MODES { LM75A_NORMAL_OPERATION_MODE, LM75A_SHUTDOWN_MODE, LM75A_COMPARATOR_MODE, LM75A_INTERRUPT_MODE }; /*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<>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog }; /* LM75A default values */ enum DEFAULT_VALUES { <<<<<<< HEAD LM75A_DEFAULT_TOS = 80, LM75A_DEFAULT_THYST = 75, LM75A_DEFAULT_OPERATION = LM75A_NORMAL_OPERATION_MODE, LM75A_DEFAULT_MODE = LM75A_COMPARATOR_MODE, LM75A_DEFAULT_POLARITY = LM75A_ACTIVE_LOW, LM75A_DEFAULT_FAULT_NUM = LM75A_ONE_FAULT }; /*define inter-threads messages */ #define LM75A_EXIT_MSG 0 #define LM75A_SAMPLING_MSG 1 #define LM75A_SLEEP_MSG 2 #define LM75A_WEAKUP_MSG 3 /** * @brief Set the over-temperature shutdown threshold (TOS). * * @param[in] tos the TOS value. ======= LM75A_DEFAULT_TOS = 80, LM75A_DEFAULT_THYST = 75, LM75A_DEFAULT_OPERATION = LM75A_NORMAL_OPERATION_MODE, LM75A_DEFAULT_MODE = LM75A_COMPARATOR_MODE, LM75A_DEFAULT_POLARITY = LM75A_ACTIVE_LOW, LM75A_DEFAULT_FAULT_NUM = LM75A_ONE_FAULT }; /*define inter-threads messages */ #define LM75A_EXIT_MSG 0 #define LM75A_SAMPLING_MSG 1 #define LM75A_SLEEP_MSG 2 #define LM75A_WEAKUP_MSG 3 /** * @brief Set the over-temperature shutdown threshold (TOS). * * @param[in] tos the TOS value. >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog * */ void lm75A_set_over_temperature(float_t tos); /** <<<<<<< HEAD * @brief Set the hysteresis temperature. * * @param[in] thsyt the hysteresis value. ======= * @brief Set the hysteresis temperature. * * @param[in] thsyt the hysteresis value. >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog * */ void lm75A_set_hysteresis_temperature(float_t thsyt); /** <<<<<<< HEAD * @brief Set various operation modes of the temperature sensor. * The LM75A provide four modes: normal, comparator, interrupt, * and the shutdown mode. * All these modes are defined in the lm75a-temp-sensor.h * * @param[in] op_mode the operation mode value: the normal, shutdown, * comparator, or interrupt mode. ======= * @brief Set various operation modes of the temperature sensor. * The LM75A provide four modes: normal, comparator, interrupt, and the shutdown mode. * All these modes are defined in the lm75a-temp-sensor.h * * @param[in] op_mode the operation mode value: the normal, shutdown, comparator, or interrupt mode. >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog * */ void lm75A_set_operation_mode(uint8_t op_mode); /** <<<<<<< HEAD * @brief Get the content of the configuration register. ======= * @brief Get the content of the configuration register. >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog * * @return the configuration register value. * */ uint8_t lm75A_get_config_reg(void); /** <<<<<<< HEAD * @brief Get the adjusted hysteresis temperature. ======= * @brief Get the adjusted hysteresis temperature. >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog * * @return the content of the hysteresis register. * */ float_t lm75A_get_hysteresis_temperature(void); /** <<<<<<< HEAD * @brief Get the adjusted over-temperature shutdown threshold (TOS). ======= * @brief Get the adjusted over-temperature shutdown threshold (TOS). >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog * * @return the content of the TOS-register. * */ float_t lm75A_get_over_temperature(void); /** <<<<<<< HEAD * @brief Get the ambient temperature which is measured from the * LM75A sensor. ======= * @brief Get the ambient temperature which is measured from the LM75A sensor. >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog * * @return the content of the temperature register. * */ float_t lm75A_get_ambient_temperature(void); /** <<<<<<< HEAD * @brief Set the LM75A sensor in the initial state. * The temperature sensor has the following values in this state: * config_register = 0; hyst_register = 75; the tos_reg = 80. ======= * @brief Set the LM75A sensor in the initial state. * The temperature sensor has the following values in this state: * config_register = 0; hyst_register = 75; the tos_reg = 80. >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog * */ void lm75A_reset(void); /** <<<<<<< HEAD * @brief Start a continuous sampling of the temperature values. * This function prints the values of all registers over * the rs232 interface. * * @param[in] external_interr_handler pointer to an external task handler * which is performed, if an external * interrupt is occurred and the external * subroutine is leaved. This parameter * is optional, the NULL-value can be * entered. ======= * @brief Start a continuous sampling of the temperature values. * This function prints the values of all registers over the rs232 interface. * *@param[in] external_interr_handler pointer to an external task handler which is performed, if an external * interrupt is occurred and the external subroutine is leaved. This parameter * is optional, the NULL-value can be entered. >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog */ void lm75A_start_sensor_sampling(void (*extern_interrupt_task)(void)); /** <<<<<<< HEAD * @brief Register an interrupt handler for the external interrupt. * Only the port0 and port2 are supported. * * @param[in] port port number. * @param[in] pin_bit_mask pin number in form of a bit mask: Pin0 --> 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. ======= * @brief Register an interrupt handler for the external interrupt. * Only the port0 and port2 are supported. * * @param[in] port port number. * @param[in] pin_bit_mask pin number in form of a bit mask: Pin0 --> 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. >>>>>>> 5953946... Driver for the LM75A Digital temperature sensor and thermal watchdog * */ void lm75A_set_in_alarm(bool b); #endif /* LM75A_H_ */