Test program running on MAX32625MBED. Control through USB Serial commands using a terminal emulator such as teraterm or putty.
Dependencies: MaximTinyTester CmdLine MAX541 USBDevice
Diff: MAX11043/MAX11043.cpp
- Revision:
- 63:8f39d21d6157
- Parent:
- 62:8223a7253c90
- Child:
- 64:a667cfd83492
--- a/MAX11043/MAX11043.cpp Tue Feb 18 06:30:34 2020 +0000 +++ b/MAX11043/MAX11043.cpp Tue Feb 18 09:25:29 2020 +0000 @@ -211,273 +211,6 @@ m_cs_pin = m_SPI_cs_state; } -// CODE GENERATOR: extern function requirement MAX11043::SPIwrite16bits -// SPI write 16 bits -// SPI interface to MAX11043 shift 16 bits mosiData into MAX11043 DIN -// -void MAX11043::SPIwrite16bits(int16_t mosiData16) -{ - // CODE GENERATOR: extern function definition for function SPIwrite16bits - // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIwrite16bits(int16_t mosiData16) - size_t byteCount = 2; - static char mosiData[2]; - static char misoData[2]; - mosiData[0] = (char)((mosiData16 >> 8) & 0xFF); // MSByte - mosiData[1] = (char)((mosiData16 >> 0) & 0xFF); // LSByte - // - // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts() - //~ noInterrupts(); - // - //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin - // - unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount); - //~ m_spi.transfer(mosiData8_FF0000); - //~ m_spi.transfer(mosiData16_00FF00); - //~ m_spi.transfer(mosiData16_0000FF); - // - //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin - // - // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts() - //~ interrupts(); - // Optional Diagnostic function to print SPI transactions - if (onSPIprint) - { - onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData); - } - // - // VERIFY: SPIwrite24bits print diagnostic information - //cmdLine.serial().printf(" MOSI->")); - //cmdLine.serial().printf(" 0x")); - //Serial.print( (mosiData8_FF0000 & 0xFF), HEX); - //cmdLine.serial().printf(" 0x")); - //Serial.print( (mosiData16_00FF00 & 0xFF), HEX); - //cmdLine.serial().printf(" 0x")); - //Serial.print( (mosiData16_0000FF & 0xFF), HEX); - // hex dump mosiData[0..byteCount-1] -#if 0 // HAS_MICROUSBSERIAL - cmdLine_microUSBserial.serial().printf("\r\nSPI"); - if (byteCount > 7) { - cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount); - } - cmdLine_microUSBserial.serial().printf(" MOSI->"); - for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++) - { - cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]); - } - // hex dump misoData[0..byteCount-1] - cmdLine_microUSBserial.serial().printf(" MISO<-"); - for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++) - { - cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]); - } - cmdLine_microUSBserial.serial().printf(" "); -#endif -#if 0 // HAS_DAPLINK_SERIAL - cmdLine_DAPLINKserial.serial().printf("\r\nSPI"); - if (byteCount > 7) { - cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount); - } - cmdLine_DAPLINKserial.serial().printf(" MOSI->"); - for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++) - { - cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]); - } - // hex dump misoData[0..byteCount-1] - cmdLine_DAPLINKserial.serial().printf(" MISO<-"); - for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++) - { - cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]); - } - cmdLine_DAPLINKserial.serial().printf(" "); -#endif - // VERIFY: DIAGNOSTIC: print MAX5715 device register write - // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF); - // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF); - // - // int misoData16 = (misoData16_FF00 << 8) | misoData16_00FF; - // return misoData16; -} - -// CODE GENERATOR: extern function requirement MAX11043::SPIreadWrite16bits -// SPI read and write 16 bits -// SPI interface to MAX11043 shift 16 bits mosiData16 into MAX11043 DIN -// while simultaneously capturing 16 bits miso data from MAX11043 DOUT -// -int16_t MAX11043::SPIreadWrite16bits(int16_t mosiData16) -{ - // CODE GENERATOR: extern function definition for function SPIreadWrite16bits - // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite16bits(int16_t mosiData16) - size_t byteCount = 2; - static char mosiData[2]; - static char misoData[2]; - mosiData[0] = (char)((mosiData16 >> 8) & 0xFF); // MSByte - mosiData[1] = (char)((mosiData16 >> 0) & 0xFF); // LSByte - // - // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts() - //~ noInterrupts(); - // - //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin - // - unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount); - //~ m_spi.transfer(mosiData8_FF0000); - //~ m_spi.transfer(mosiData16_00FF00); - //~ m_spi.transfer(mosiData16_0000FF); - // - //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin - // - // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts() - //~ interrupts(); - // Optional Diagnostic function to print SPI transactions - if (onSPIprint) - { - onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData); - } - // - // VERIFY: SPIwrite24bits print diagnostic information - //cmdLine.serial().printf(" MOSI->")); - //cmdLine.serial().printf(" 0x")); - //Serial.print( (mosiData8_FF0000 & 0xFF), HEX); - //cmdLine.serial().printf(" 0x")); - //Serial.print( (mosiData16_00FF00 & 0xFF), HEX); - //cmdLine.serial().printf(" 0x")); - //Serial.print( (mosiData16_0000FF & 0xFF), HEX); - // hex dump mosiData[0..byteCount-1] -#if 0 // HAS_MICROUSBSERIAL - cmdLine_microUSBserial.serial().printf("\r\nSPI"); - if (byteCount > 7) { - cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount); - } - cmdLine_microUSBserial.serial().printf(" MOSI->"); - for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++) - { - cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]); - } - // hex dump misoData[0..byteCount-1] - cmdLine_microUSBserial.serial().printf(" MISO<-"); - for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++) - { - cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]); - } - cmdLine_microUSBserial.serial().printf(" "); -#endif -#if 0 // HAS_DAPLINK_SERIAL - cmdLine_DAPLINKserial.serial().printf("\r\nSPI"); - if (byteCount > 7) { - cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount); - } - cmdLine_DAPLINKserial.serial().printf(" MOSI->"); - for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++) - { - cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]); - } - // hex dump misoData[0..byteCount-1] - cmdLine_DAPLINKserial.serial().printf(" MISO<-"); - for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++) - { - cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]); - } - cmdLine_DAPLINKserial.serial().printf(" "); -#endif - // VERIFY: DIAGNOSTIC: print MAX5715 device register write - // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF); - // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF); - // - //int misoData16 = (misoData16_FF00 << 8) | misoData16_00FF; - int misoData16 = (misoData[0] << 8) | misoData[1]; - return misoData16; -} - -// CODE GENERATOR: extern function requirement MAX11043::SPIreadWrite32bits -// SPI read and write 32 bits -// SPI interface to MAX11043 shift 32 bits mosiData into MAX11043 DIN -// while simultaneously capturing 32 bits miso data from MAX11043 DOUT -// -int32_t MAX11043::SPIreadWrite32bits(int32_t mosiData32) -{ - // CODE GENERATOR: extern function definition for function SPIreadWrite32bits - // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite32bits(int32_t mosiData32) - size_t byteCount = 4; - static char mosiData[4]; - static char misoData[4]; - mosiData[0] = (char)((mosiData32 >> 24) & 0xFF); // MSByte - mosiData[1] = (char)((mosiData32 >> 16) & 0xFF); - mosiData[2] = (char)((mosiData32 >> 8) & 0xFF); - mosiData[3] = (char)((mosiData32 >> 0) & 0xFF); // LSByte - // - // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts() - //~ noInterrupts(); - // - //~ digitalWrite(Scope_Trigger_Pin, LOW); // diagnostic Scope_Trigger_Pin - // - unsigned int numBytesTransferred = m_spi.write(mosiData, byteCount, misoData, byteCount); - //~ m_spi.transfer(mosiData8_FF0000); - //~ m_spi.transfer(mosiData16_00FF00); - //~ m_spi.transfer(mosiData16_0000FF); - // - //~ digitalWrite(Scope_Trigger_Pin, HIGH); // diagnostic Scope_Trigger_Pin - // - // Arduino: begin critical section: noInterrupts() masks all interrupt sources; end critical section with interrupts() - //~ interrupts(); - // Optional Diagnostic function to print SPI transactions - if (onSPIprint) - { - onSPIprint(byteCount, (uint8_t*)mosiData, (uint8_t*)misoData); - } - // - // VERIFY: SPIwrite24bits print diagnostic information - //cmdLine.serial().printf(" MOSI->")); - //cmdLine.serial().printf(" 0x")); - //Serial.print( (mosiData8_FF0000 & 0xFF), HEX); - //cmdLine.serial().printf(" 0x")); - //Serial.print( (mosiData16_00FF00 & 0xFF), HEX); - //cmdLine.serial().printf(" 0x")); - //Serial.print( (mosiData16_0000FF & 0xFF), HEX); - // hex dump mosiData[0..byteCount-1] -#if 0 // HAS_MICROUSBSERIAL - cmdLine_microUSBserial.serial().printf("\r\nSPI"); - if (byteCount > 7) { - cmdLine_microUSBserial.serial().printf(" byteCount:%d", byteCount); - } - cmdLine_microUSBserial.serial().printf(" MOSI->"); - for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++) - { - cmdLine_microUSBserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]); - } - // hex dump misoData[0..byteCount-1] - cmdLine_microUSBserial.serial().printf(" MISO<-"); - for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++) - { - cmdLine_microUSBserial.serial().printf(" 0x%2.2X", misoData[byteIndex]); - } - cmdLine_microUSBserial.serial().printf(" "); -#endif -#if 0 // HAS_DAPLINK_SERIAL - cmdLine_DAPLINKserial.serial().printf("\r\nSPI"); - if (byteCount > 7) { - cmdLine_DAPLINKserial.serial().printf(" byteCount:%d", byteCount); - } - cmdLine_DAPLINKserial.serial().printf(" MOSI->"); - for (unsigned int byteIndex = 0; byteIndex < byteCount; byteIndex++) - { - cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", mosiData[byteIndex]); - } - // hex dump misoData[0..byteCount-1] - cmdLine_DAPLINKserial.serial().printf(" MISO<-"); - for (unsigned int byteIndex = 0; byteIndex < numBytesTransferred; byteIndex++) - { - cmdLine_DAPLINKserial.serial().printf(" 0x%2.2X", misoData[byteIndex]); - } - cmdLine_DAPLINKserial.serial().printf(" "); -#endif - // VERIFY: DIAGNOSTIC: print MAX5715 device register write - // TODO: MAX5715_print_register_verbose(mosiData8_FF0000, mosiData16_00FFFF); - // TODO: print_verbose_SPI_diagnostic(mosiData16_FF00, mosiData16_00FF, misoData16_FF00, misoData16_00FF); - // - //int misoData32 = (misoData32_FF000000 << 24) | (misoData32_FF0000 << 16) | (misoData32_0000FF00 << 8) | misoData32_000000FF; - int misoData32 = (misoData[0] << 24) | (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; - return misoData32; -} - // CODE GENERATOR: extern function requirement MAX11043::SPIreadWriteWithLowCS // SPI read and write arbitrary number of 8-bit bytes // SPI interface to MAX11043 shift mosiData into MAX11043 DIN @@ -486,7 +219,7 @@ int MAX11043::SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]) { // CODE GENERATOR: extern function definition for function SPIreadWriteWithLowCS - // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWrite32bits(int32_t mosiData32) + // TODO1: CODE GENERATOR: extern function definition for standard SPI interface function SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]) //size_t byteCount = 4; //static char mosiData[4]; //static char misoData[4]; @@ -727,38 +460,88 @@ { 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)commandByte << 8) | ((int16_t)regData & 0xFF); - SPIoutputCS(0); - SPIwrite16bits(mosiData16); - SPIoutputCS(1); + // SPI 8+8 = 16-bit transfer + // 1234 5678 ___[1]_16 + // SPI MOSI = 0aaa_aaaa_dddd_dddd ... _0000 + // SPI MISO = xxxx_xxxx_xxxx_xxxx ... _xxxx + size_t byteCount = 1 + 1; + uint8_t mosiData[2]; + uint8_t misoData[2]; + mosiData[0] = commandByte; + mosiData[1] = regData; + // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]); + SPIreadWriteWithLowCS(byteCount, mosiData, misoData); + // TODO: cache CMD_0101_0100_d8_Wr15_FilterCAddress + // if (commandByte == CMD_0101_0100_d8_Wr15_FilterCAddress) { + // FilterCAddress = regData; + // } + // TODO: cache CMD_0110_0000_d8_Wr18_FlashMode + // if (commandByte == CMD_0110_0000_d8_Wr18_FlashMode) { + // FlashMode = regData; + // } } break; case 16: // 16-bit register size - #warning "Not Verified Yet: MAX11043::RegWrite 16-bit SPIreadWrite32bits" + #warning "Not Verified Yet: MAX11043::RegWrite 16-bit" { - // SPI 24-bit or 32-bit transfer - // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd - // 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)commandByte << 24) | (((int32_t)regData & 0xFFFF) << 8); - SPIoutputCS(0); - SPIreadWrite32bits(mosiData32); - SPIoutputCS(1); + // SPI 8+16 = 24-bit transfer + // 1234 5678 ___[1]_16 ___[2]_24 + // SPI MOSI = 0aaa_aaaa_dddd_dddd_dddd_dddd ... _0000 + // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx ... _xxxx + size_t byteCount = 1 + 2; + uint8_t mosiData[3]; + uint8_t misoData[3]; + mosiData[0] = commandByte; + mosiData[1] = (uint8_t)((regData >> 8) & 0xFF); + mosiData[2] = (uint8_t)((regData >> 0) & 0xFF); + // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]); + SPIreadWriteWithLowCS(byteCount, mosiData, misoData); + // cache CMD_0010_0000_d16_Wr08_Configuration + if (commandByte == CMD_0010_0000_d16_Wr08_Configuration) { + config = regData; + } + // TODO: cache CMD_0010_0100_d16_Wr09_DAC + // TODO: cache CMD_0010_1000_d16_Wr0A_DACStep + // TODO: cache CMD_0010_1100_d16_Wr0B_DACHDACL + // TODO: cache CMD_0011_0000_d16_Wr0C_ConfigA + // TODO: cache CMD_0011_0100_d16_Wr0D_ConfigB + // TODO: cache CMD_0011_1000_d16_Wr0E_ConfigC + // TODO: cache CMD_0011_1100_d16_Wr0F_ConfigD + // TODO: cache CMD_0100_0000_d16_Wr10_Reference + // TODO: cache CMD_0100_0100_d16_Wr11_AGain + // TODO: cache CMD_0100_1000_d16_Wr12_BGain + // TODO: cache CMD_0100_1100_d16_Wr13_CGain + // TODO: cache CMD_0101_0000_d16_Wr14_DGain + // TODO: cache CMD_0110_0100_d16_Wr19_FlashAddr + // TODO: cache CMD_0110_1000_d16_Wr1A_FlashDataIn } break; - case 24: // 24-bit register size + case 32: // 32-bit register size + #warning "Not Verified Yet: MAX11043::RegWrite 32-bit" { - // 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)commandByte << 24) | ((int32_t)regData & 0x00FFFFFF); - SPIoutputCS(0); - SPIreadWrite32bits(mosiData32); - SPIoutputCS(1); + // SPI 8+32 = 40-bit transfer + // 1234 5678 ___[1]_16 ___[2]_24 ___[3]_32 ___[4]_40 + // SPI MOSI = 1aaa_aaaa_dddd_dddd_dddd_dddd_dddd_dddd_dddd_dddd ... _0000 + // SPI MISO = xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx ... _xxxx + // + size_t byteCount = 1 + (2 * 2); + uint8_t mosiData[5]; + uint8_t misoData[5]; + mosiData[0] = commandByte; + mosiData[1] = (uint8_t)((regData >> 24) & 0xFF); + mosiData[2] = (uint8_t)((regData >> 16) & 0xFF); + mosiData[3] = (uint8_t)((regData >> 8) & 0xFF); + mosiData[4] = (uint8_t)((regData >> 0) & 0xFF); + // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]); + SPIreadWriteWithLowCS(byteCount, mosiData, misoData); + // TODO: cache CMD_0101_1000_d32_Wr16_FilterCDataOut + // if (commandByte == CMD_0101_1000_d32_Wr16_FilterCDataOut) { + // FilterCDataOut = regData; + // } + // TODO: cache CMD_0101_1100_d32_Wr17_FilterCDataIn + // if (commandByte == CMD_0101_1000_d32_Wr16_FilterCDataOut) { + // FilterCDataOut = regData; + // } } break; } @@ -813,50 +596,57 @@ { // SPI 8+8 = 16-bit transfer // 1234 5678 ___[1]_16 - // SPI MOSI = 1aaa_aaaa_0000_0000 - // SPI MISO = xxxx_xxxx_dddd_dddd - int16_t mosiData16 = ((CMDOP_0aaa_aa10_ReadRegister | (int16_t)commandByte) << 8) | ((int16_t)0); - SPIoutputCS(0); - int16_t misoData16 = SPIreadWrite16bits(mosiData16); - SPIoutputCS(1); - if (ptrRegData) { (*ptrRegData) = (misoData16 & 0x00FF); } + // SPI MOSI = 1aaa_aaaa_0000_0000 ... _0000 + // SPI MISO = xxxx_xxxx_dddd_dddd ... _xxxx + size_t byteCount = 1 + 1; + uint8_t mosiData[2]; + uint8_t misoData[2]; + mosiData[0] = CMDOP_0aaa_aa10_ReadRegister | commandByte; + mosiData[1] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh; + // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]); + SPIreadWriteWithLowCS(byteCount, mosiData, misoData); + if (ptrRegData) { (*ptrRegData) = misoData[1]; } if (commandByte == CMD_0001_1110_d8_Rd07_Status) { // TODO1: update status - status = (misoData16 & 0x00FF); + status = misoData[1]; } } break; case 16: // 16-bit register size - #warning "Not Verified Yet: MAX11043::RegRead 16-bit SPIreadWrite32bits" + #warning "Not Verified Yet: MAX11043::RegRead 16-bit" { // SPI 8+16 = 24-bit transfer // 1234 5678 ___[1]_16 ___[2]_24 // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000 ... _0000 // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd ... _xxxx - int32_t mosiData32 = ((CMDOP_0aaa_aa10_ReadRegister | (int32_t)commandByte) << 24); - SPIoutputCS(0); - int32_t misoData32 = SPIreadWrite32bits(mosiData32); - SPIoutputCS(1); - if (ptrRegData) { (*ptrRegData) = ((misoData32 >> 8) & 0x00FFFF); } + size_t byteCount = 1 + 2; + uint8_t mosiData[3]; + uint8_t misoData[3]; + mosiData[0] = CMDOP_0aaa_aa10_ReadRegister | commandByte; + mosiData[1] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh; + mosiData[2] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh; + // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]); + SPIreadWriteWithLowCS(byteCount, mosiData, misoData); + if (ptrRegData) { (*ptrRegData) = (misoData[1] << 8) | misoData[2]; } if (commandByte == CMD_0010_0010_d16_Rd08_Configuration) { // TODO1: update config - config = ((misoData32 >> 8) & 0x00FFFF); + config = (misoData[1] << 8) | misoData[2]; } if (commandByte == CMD_0000_0010_d16o8_Rd00_ADCa) { // TODO1: update adca - adca = ((misoData32 >> 8) & 0x00FFFF); + adca = (misoData[1] << 8) | misoData[2]; } if (commandByte == CMD_0000_0110_d16o8_Rd01_ADCb) { // TODO1: update adcb - adcb = ((misoData32 >> 8) & 0x00FFFF); + adcb = (misoData[1] << 8) | misoData[2]; } if (commandByte == CMD_0000_1010_d16o8_Rd02_ADCc) { // TODO1: update adcc - adcc = ((misoData32 >> 8) & 0x00FFFF); + adcc = (misoData[1] << 8) | misoData[2]; } if (commandByte == CMD_0000_1110_d16o8_Rd03_ADCd) { // TODO1: update adcd - adcd = ((misoData32 >> 8) & 0x00FFFF); + adcd = (misoData[1] << 8) | misoData[2]; } } break; @@ -864,39 +654,44 @@ { // SPI 8+24 = 32-bit transfer // 1234 5678 ___[1]_16 ___[2]_24 ___[3]_32 - // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000 - // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd - int32_t mosiData32 = ((CMDOP_0aaa_aa10_ReadRegister | (int32_t)commandByte) << 24); - SPIoutputCS(0); - int32_t misoData32 = SPIreadWrite32bits(mosiData32); - SPIoutputCS(1); - if (ptrRegData) { (*ptrRegData) = (misoData32 & 0x00FFFFFF); } + // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000 ... _0000 + // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd ... _xxxx + size_t byteCount = 1 + 3; + uint8_t mosiData[4]; + uint8_t misoData[4]; + mosiData[0] = CMDOP_0aaa_aa10_ReadRegister | commandByte; + mosiData[1] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh; + mosiData[2] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh; + mosiData[3] = 0; // CMDOP_1111_1111_NoOperationMOSIidleHigh; + // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]); + SPIreadWriteWithLowCS(byteCount, mosiData, misoData); + if (ptrRegData) { (*ptrRegData) = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; } if (commandByte == CMD_0000_0010_d16o8_Rd00_ADCa) { // TODO1: update adca - adca = (misoData32 & 0x00FFFFFF); + adca = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; } if (commandByte == CMD_0000_0110_d16o8_Rd01_ADCb) { // TODO1: update adcb - adcb = (misoData32 & 0x00FFFFFF); + adcb = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; } if (commandByte == CMD_0000_1010_d16o8_Rd02_ADCc) { // TODO1: update adcc - adcc = (misoData32 & 0x00FFFFFF); + adcc = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; } if (commandByte == CMD_0000_1110_d16o8_Rd03_ADCd) { // TODO1: update adcd - adcd = (misoData32 & 0x00FFFFFF); + adcd = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; } } break; - case 32: // 32-bit register size CMD_0001_0010_d24_d24_Rd04_ADCab, CMD_0001_0110_d24_d24_Rd05_ADCcd + case 32: // 32-bit register size CMD_0001_0010_d16o8_d16o8_Rd04_ADCab, CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd // - #warning "Not Implemented Yet: MAX11043::RegRead 32-bit CMD_0001_0010_d24_d24_Rd04_ADCab" - // TODO: support long SPI read CMD_0001_0010_d24_d24_Rd04_ADCab + #warning "Not Implemented Yet: MAX11043::RegRead 32-bit CMD_0001_0010_d16o8_d16o8_Rd04_ADCab" + // TODO: support long SPI read CMD_0001_0010_d16o8_d16o8_Rd04_ADCab // %SW 0x12 (0 0) (0 0) -- for 16-bit read A,B // update adca, adcb // - // TODO: support long SPI read CMD_0001_0110_d24_d24_Rd05_ADCcd + // TODO: support long SPI read CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd // %SW 0x16 (0 0) (0 0) -- for 16-bit read C,D // update adcc, adcd // @@ -905,7 +700,6 @@ // 1234 5678 ___[1]_16 ___[2]_24 ___[3]_32 ___[4]_40 // SPI MOSI = 1aaa_aaaa_0000_0000_0000_0000_0000_0000_0000_0000 ... _0000 // SPI MISO = xxxx_xxxx_dddd_dddd_dddd_dddd_dddd_dddd_dddd_dddd ... _xxxx - int32_t mosiData32 = ((CMDOP_0aaa_aa10_ReadRegister | (int32_t)commandByte) << 24); size_t byteCount = 1 + (2 * 2); uint8_t mosiData[5]; uint8_t misoData[5]; @@ -917,13 +711,13 @@ // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]); SPIreadWriteWithLowCS(byteCount, mosiData, misoData); if (ptrRegData) { (*ptrRegData) = (misoData[1] << 8) | misoData[2]; } - if (commandByte == CMD_0001_0010_d24_d24_Rd04_ADCab) { + if (commandByte == CMD_0001_0010_d16o8_d16o8_Rd04_ADCab) { // TODO1: update adca adca = (misoData[1] << 8) | misoData[2]; // TODO1: update adcb adcb = (misoData[3] << 8) | misoData[4]; } - if (commandByte == CMD_0001_0110_d24_d24_Rd05_ADCcd) { + if (commandByte == CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd) { // TODO1: update adcc adcc = (misoData[1] << 8) | misoData[2]; // TODO1: update adcd @@ -931,14 +725,14 @@ } } break; - case 48: // 48-bit register size CMD_0001_0010_d24_d24_Rd04_ADCab, CMD_0001_0110_d24_d24_Rd05_ADCcd + case 48: // 48-bit register size CMD_0001_0010_d16o8_d16o8_Rd04_ADCab, CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd // - #warning "Not Implemented Yet: MAX11043::RegRead 48-bit CMD_0001_0010_d24_d24_Rd04_ADCab" - // TODO: support long SPI read CMD_0001_0010_d24_d24_Rd04_ADCab + #warning "Not Verified Yet: MAX11043::RegRead 48-bit CMD_0001_0010_d16o8_d16o8_Rd04_ADCab" + // TODO: support long SPI read CMD_0001_0010_d16o8_d16o8_Rd04_ADCab // %SW 0x12 (0 0 0) (0 0 0) -- for 24-bit read A,B // update adca, adcb // - // TODO: support long SPI read CMD_0001_0110_d24_d24_Rd05_ADCcd + // TODO: support long SPI read CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd // %SW 0x16 (0 0 0) (0 0 0) -- for 24-bit read C,D // update adcc, adcd // @@ -960,13 +754,13 @@ // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]); SPIreadWriteWithLowCS(byteCount, mosiData, misoData); if (ptrRegData) { (*ptrRegData) = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; } - if (commandByte == CMD_0001_0010_d24_d24_Rd04_ADCab) { + if (commandByte == CMD_0001_0010_d16o8_d16o8_Rd04_ADCab) { // TODO1: update adca adca = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; // TODO1: update adcb adcb = (misoData[4] << 16) | (misoData[5] << 8) | misoData[6]; } - if (commandByte == CMD_0001_0110_d24_d24_Rd05_ADCcd) { + if (commandByte == CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd) { // TODO1: update adcc adcc = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; // TODO1: update adcd @@ -974,10 +768,10 @@ } } break; - case 64: // 64-bit register size CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd + case 64: // 64-bit register size CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd // - #warning "Not Implemented Yet: MAX11043::RegRead 64-bit CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd" - // TODO: support long SPI read CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd + #warning "Not Verified Yet: MAX11043::RegRead 64-bit CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd" + // TODO: support long SPI read CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd // %SW 0x1A (0 0) (0 0) (0 0) (0 0) -- for 16-bit read A,B,C,D // update adca, adcb, adcc, adcd // @@ -1001,7 +795,7 @@ // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]); SPIreadWriteWithLowCS(byteCount, mosiData, misoData); if (ptrRegData) { (*ptrRegData) = (misoData[1] << 8) | misoData[2]; } - if (commandByte == CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd) { + if (commandByte == CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd) { // TODO1: update adca adca = (misoData[1] << 8) | misoData[2]; // TODO1: update adcb @@ -1013,10 +807,10 @@ } } break; - case 96: // 96-bit register size CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd + case 96: // 96-bit register size CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd // - #warning "Not Implemented Yet: MAX11043::RegRead 96-bit CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd" - // TODO: support long SPI read CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd + #warning "Not Verified Yet: MAX11043::RegRead 96-bit CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd" + // TODO: support long SPI read CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd // %SW 0x1A (0 0 0) (0 0 0) (0 0 0) (0 0 0) -- for 24-bit read A,B,C,D // update adca, adcb, adcc, adcd // @@ -1044,7 +838,7 @@ // SPIreadWriteWithLowCS(size_t byteCount, uint8_t mosiData[], uint8_t misoData[]); SPIreadWriteWithLowCS(byteCount, mosiData, misoData); if (ptrRegData) { (*ptrRegData) = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; } - if (commandByte == CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd) { + if (commandByte == CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd) { // TODO1: update adca adca = (misoData[1] << 16) | (misoData[2] << 8) | misoData[3]; // TODO1: update adcb @@ -1130,8 +924,8 @@ // %SW 0x02 (0 0) -- for 16-bit read // return 16; // 16-bit register size - case CMD_0001_0010_d24_d24_Rd04_ADCab: - case CMD_0001_0110_d24_d24_Rd05_ADCcd: + case CMD_0001_0010_d16o8_d16o8_Rd04_ADCab: + case CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd: // // TODO: support long SPI read if (config & CONFIG_xxxx_xxxx_xx1x_xxxx_24BIT) @@ -1144,7 +938,7 @@ // %SW 0x16 (0 0) (0 0) -- for 16-bit read C,D // return 32; // 32-bit register size: 2*(16) - case CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd: + case CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd: // // TODO: support long SPI read if (config & CONFIG_xxxx_xxxx_xx1x_xxxx_24BIT) @@ -1228,9 +1022,9 @@ case CMD_0000_0110_d16o8_Rd01_ADCb: return "ADCb"; case CMD_0000_1010_d16o8_Rd02_ADCc: return "ADCc"; case CMD_0000_1110_d16o8_Rd03_ADCd: return "ADCd"; - case CMD_0001_0010_d24_d24_Rd04_ADCab: return "ADCab"; - case CMD_0001_0110_d24_d24_Rd05_ADCcd: return "ADCcd"; - case CMD_0001_1010_d24_d24_d24_d24_Rd06_ADCabcd: return "ADCabcd"; + case CMD_0001_0010_d16o8_d16o8_Rd04_ADCab: return "ADCab"; + case CMD_0001_0110_d16o8_d16o8_Rd05_ADCcd: return "ADCcd"; + case CMD_0001_1010_d16o8_d16o8_d16o8_d16o8_Rd06_ADCabcd: return "ADCabcd"; case CMD_0001_1110_d8_Rd07_Status: return "Status"; case CMD_0010_0000_d16_Wr08_Configuration: return "Configuration"; case CMD_0010_0010_d16_Rd08_Configuration: return "Configuration";