MAX11410 high speed 24-bit Delta-Sigma ADC
Dependents: MAX11410BOB_24bit_ADC MAX11410BOB_Serial_Tester
Diff: MAX11410.cpp
- Revision:
- 10:7adee48a7f82
- Parent:
- 9:06ca88952f1c
- Child:
- 11:abde565b8497
--- a/MAX11410.cpp Fri Jan 31 00:15:25 2020 +0000 +++ b/MAX11410.cpp Tue Feb 11 01:32:24 2020 +0000 @@ -690,20 +690,20 @@ // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx // // @return 1 on success; 0 on failure -uint8_t MAX11410::RegWrite(MAX11410_CMD_enum_t regAddress, uint32_t regData) +uint8_t MAX11410::RegWrite(MAX11410_CMD_enum_t commandByte, uint32_t regData) { //---------------------------------------- - // switch based on register address szie RegSize(regAddress) - regAddress = (MAX11410_CMD_enum_t)((regAddress &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF); - switch(RegSize(regAddress)) + // switch based on register address szie RegSize(commandByte) + commandByte = (MAX11410_CMD_enum_t)((commandByte &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF); + switch(RegSize(commandByte)) { case 8: // 8-bit register size { // SPI 16-bit transfer // SPI MOSI = 0aaa_aaaa_dddd_dddd // SPI MISO = xxxx_xxxx_xxxx_xxxx - int16_t mosiData16 = ((int16_t)regAddress << 8) | ((int16_t)regData & 0xFF); + int16_t mosiData16 = ((int16_t)commandByte << 8) | ((int16_t)regData & 0xFF); SPIoutputCS(0); SPIwrite16bits(mosiData16); SPIoutputCS(1); @@ -717,7 +717,7 @@ // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_0000_0000 // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx - int32_t mosiData32 = ((int32_t)regAddress << 24) | (((int32_t)regData & 0xFFFF) << 8); + int32_t mosiData32 = ((int32_t)commandByte << 24) | (((int32_t)regData & 0xFFFF) << 8); SPIoutputCS(0); SPIreadWrite32bits(mosiData32); SPIoutputCS(1); @@ -728,7 +728,7 @@ // SPI 32-bit transfer // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx - int32_t mosiData32 = ((int32_t)regAddress << 24) | ((int32_t)regData & 0x00FFFFFF); + int32_t mosiData32 = ((int32_t)commandByte << 24) | ((int32_t)regData & 0x00FFFFFF); SPIoutputCS(0); SPIreadWrite32bits(mosiData32); SPIoutputCS(1); @@ -774,20 +774,20 @@ // // // @return 1 on success; 0 on failure -uint8_t MAX11410::RegRead(MAX11410_CMD_enum_t regAddress, uint32_t* ptrRegData) +uint8_t MAX11410::RegRead(MAX11410_CMD_enum_t commandByte, uint32_t* ptrRegData) { //---------------------------------------- // switch based on register address szie RegSize(regAddress) - regAddress = (MAX11410_CMD_enum_t)((regAddress &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF); - switch(RegSize(regAddress)) + commandByte = (MAX11410_CMD_enum_t)((commandByte &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF); + switch(RegSize(commandByte)) { case 8: // 8-bit register size { // SPI 16-bit transfer // SPI MOSI = 1aaa_aaaa_0000_0000 // SPI MISO = xxxx_xxxx_dddd_dddd - int16_t mosiData16 = ((CMD_1aaa_aaaa_REGISTER_READ | (int16_t)regAddress) << 8) | ((int16_t)0); + int16_t mosiData16 = ((CMD_1aaa_aaaa_REGISTER_READ | (int16_t)commandByte) << 8) | ((int16_t)0); SPIoutputCS(0); int16_t misoData16 = SPIreadWrite16bits(mosiData16); SPIoutputCS(1); @@ -802,7 +802,7 @@ // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000 // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_xxxx_xxxx - int32_t mosiData32 = ((CMD_1aaa_aaaa_REGISTER_READ | (int32_t)regAddress) << 24); + int32_t mosiData32 = ((CMD_1aaa_aaaa_REGISTER_READ | (int32_t)commandByte) << 24); SPIoutputCS(0); int32_t misoData32 = SPIreadWrite32bits(mosiData32); SPIoutputCS(1); @@ -814,7 +814,7 @@ // SPI 32-bit transfer // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000 // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd - int32_t mosiData32 = ((CMD_1aaa_aaaa_REGISTER_READ | (int32_t)regAddress) << 24); + int32_t mosiData32 = ((CMD_1aaa_aaaa_REGISTER_READ | (int32_t)commandByte) << 24); SPIoutputCS(0); int32_t misoData32 = SPIreadWrite32bits(mosiData32); SPIoutputCS(1); @@ -832,13 +832,13 @@ // Return the size of a MAX11410 register // // @return 8 for 8-bit, 16 for 16-bit, 24 for 24-bit, else 0 for undefined register size -uint8_t MAX11410::RegSize(MAX11410_CMD_enum_t regAddress) +uint8_t MAX11410::RegSize(MAX11410_CMD_enum_t commandByte) { //---------------------------------------- // switch based on register address value regAddress - regAddress = (MAX11410_CMD_enum_t)((regAddress &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF); - switch(regAddress) + commandByte = (MAX11410_CMD_enum_t)((commandByte &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF); + switch(commandByte) { default: return 0; // undefined register size @@ -961,16 +961,40 @@ } //---------------------------------------- +// Return the address field of a MAX11410 register +// +// @return register address field as given in datasheet +uint8_t MAX11410::RegAddrOfCommand(MAX11410_CMD_enum_t commandByte) +{ + + //---------------------------------------- + // extract register address value from command byte + return (uint8_t)((commandByte &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF); +} + +//---------------------------------------- +// Test whether a command byte is a register read command +// +// @return true if command byte is a register read command +uint8_t MAX11410::IsRegReadCommand(MAX11410_CMD_enum_t commandByte) +{ + + //---------------------------------------- + // Test whether a command byte is a register read command + return (commandByte & CMD_1aaa_aaaa_REGISTER_READ) ? 1 : 0; +} + +//---------------------------------------- // Return the name of a MAX11410 register // // @return null-terminated constant C string containing register name or empty string -const char* MAX11410::RegName(MAX11410_CMD_enum_t regAddress) +const char* MAX11410::RegName(MAX11410_CMD_enum_t commandByte) { //---------------------------------------- // switch based on register address value regAddress - regAddress = (MAX11410_CMD_enum_t)((regAddress &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF); - switch(regAddress) + commandByte = (MAX11410_CMD_enum_t)((commandByte &~ CMD_1aaa_aaaa_REGISTER_READ) & 0xFF); + switch(commandByte) { default: return ""; // undefined register