![](/media/cache/profiles/a532400ed62e772b9dc0b86f46e583ff.50x50_q85.jpg)
This is a complete listing of the RS-EDP software for the mbed module to support the RS-EDP platform.
Diff: SourceFiles/RSEDP_AM_MAX1X3X_ADC.cpp
- Revision:
- 0:5b7639d1f2c4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SourceFiles/RSEDP_AM_MAX1X3X_ADC.cpp Fri Nov 19 09:49:16 2010 +0000 @@ -0,0 +1,131 @@ +/* Driver for the MAX1x3x Serial ADC */ +/* ********************************* */ + +/* Version 2.00 */ +/* Last Ammend Date: 23/6/09 */ + + +#define _MAX1038_ + + + +/* Include Files Here */ +#include "mbed.h" /* mbed header file */ +#include "misra_types.h" /* MISRA Types header file */ +#include "defines.h" +#include "RSEDP_Slave_Address_Defines.h" /* Slave address of I2C Peripherals */ + +#include "RSEDP_CNTRL_I2C.h" /* Control I2C Driver */ + + + + +/* Function Prototypes */ +sint32_t RSEDP_AM_Init_MAX1x3x(uint8_t I2C_addr) ; +sint32_t RSEDP_AM_MAX103x_ReadChannel(uint8_t I2C_addr, uint8_t *uiResult, uint8_t uiChannel) ; +sint32_t RSEDP_AM_MAX113x_ReadChannel(uint8_t I2C_addr, uint16_t *uiResult, uint8_t uiChannel) ; + + + + + + +/* Reset and initialise MAX1x3x ADC */ +sint32_t RSEDP_AM_Init_MAX1x3x(uint8_t I2C_addr) + { + sint32_t Ack_Status = 0; + sint8_t uiSetup_byte = 0; + sint8_t uiConfig_byte = 0; + sint8_t uiMessage[3] = {0,0,0}; + + + /* Create Setup Byte for REST */ + uiSetup_byte = MAX1x3x_SETUP_RST | MAX1x3x_SETUP_REG; + + /* Send Reset Command */ + Ack_Status = CNTRL_I2C_Master_Mode_Transmit(I2C_addr, &uiSetup_byte, 1) ; + + /* Create Setup Byte */ + /* Internal reference always on and ADC11=analogue input and not Vref, Internal Clock */ + uiSetup_byte = MAX1x3x_SETUP_REG | MAX1x3x_SETUP_SEL_INT_Ref_AN11_AlwaysOn | MAX1x3x_SETUP_IntCLK | MAX1x3x_SETUP_UniPol | MAX1x3x_SETUP_NO_RST; + + /* Create CONFIG Byte */ + /* Convert single ended unipolar, channel 0 initially */ + uiConfig_byte = MAX1x3x_CONFIG_REG | MAX1x3x_CONFIG_SingleEnded | MAX1x3x_CONFIG_ConvCh0 ; + + uiMessage[0] = uiSetup_byte ; + uiMessage[1] = uiConfig_byte ; + + /* Send */ + if (Ack_Status == ACK) + { + Ack_Status = CNTRL_I2C_Master_Mode_Transmit(I2C_addr, uiMessage, 2) ; + } + return Ack_Status; + } + + + + +/* Reads a single channel MAX103x I2C ADC passed as a parameter */ +/* returns a pointer to the 8-bit result */ +sint32_t RSEDP_AM_MAX103x_ReadChannel(uint8_t I2C_addr, uint8_t *uiResult, uint8_t uiChannel) + { + sint32_t Ack_Status = 0; + sint8_t uiConfig_byte = 0; + sint8_t uiResult_value = 0; + uint8_t uiCorrected_Channel = 0; + + + /* Set which channel to convert */ + /* The pin out for MAX1038 is different from MAX1138 */ + /* The channel numbers 0-7 are reversed on the MAX1038. The PCB has been laid out for the MAX1138 */ + uiCorrected_Channel = uiChannel; + if (uiChannel < 8) + { + uiCorrected_Channel = (7 - uiChannel); + } + uiConfig_byte = MAX1x3x_CONFIG_REG | MAX1x3x_CONFIG_SingleEnded | (uint8_t)(uiCorrected_Channel << 1) | MAX1x3x_CONFIG_SingleChannel ; + Ack_Status = CNTRL_I2C_Master_Mode_Transmit(I2C_addr, &uiConfig_byte, 1) ; + + /* Read Result */ + if (Ack_Status == ACK) + { + Ack_Status = CNTRL_I2C_Master_Mode_Receive(I2C_addr, &uiResult_value , 1) ; + } + + + /* Return result to caller */ + *uiResult = uiResult_value ; + return Ack_Status; + } + + + + +/* Reads a single channel MAX113x I2C ADC passed as a parameter */ +/* returns a pointer to the 16-bit result */ +sint32_t RSEDP_AM_MAX113x_ReadChannel(uint8_t I2C_addr, uint16_t *uiResult, uint8_t uiChannel) + { + sint32_t Ack_Status = 0; + sint8_t uiConfig_byte = 0; + + union BWL { sint8_t uiBytes[4] ; uint16_t uiWords[2] ; uint32_t uiLong ; } ; + union BWL sResult ; + + + /* Set which channel to convert */ + uiConfig_byte = MAX1x3x_CONFIG_REG | MAX1x3x_CONFIG_SingleEnded | (uint8_t)(uiChannel << 1) | MAX1x3x_CONFIG_SingleChannel ; + Ack_Status = CNTRL_I2C_Master_Mode_Transmit(I2C_addr, &uiConfig_byte, 1) ; + + /* Read Result */ + if (Ack_Status == ACK) + { + Ack_Status = CNTRL_I2C_Master_Mode_Receive(I2C_addr, &sResult.uiBytes[0] , 2) ; + } + + /* Return result to caller */ + *uiResult = sResult.uiWords[0] ; + return Ack_Status; + } +