Index: firmware/App/Drivers/ConductivitySensors.c =================================================================== diff -u -rd48829521f698f5fe55157bc688ca196a9376faa -r18f5ac036baf7dca352e881bdd64d6fd742d8c58 --- firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision d48829521f698f5fe55157bc688ca196a9376faa) +++ firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 18f5ac036baf7dca352e881bdd64d6fd742d8c58) @@ -157,7 +157,7 @@ //initFPGAPersistentAlarm( FPGA_PERS_ERROR_P9_COND_SENSOR, ALARM_ID_FP_P9_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); //initFPGAPersistentAlarm( FPGA_PERS_ERROR_P18_COND_SENSOR, ALARM_ID_FP_P18_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); - initConductivityDMAchannels(); + initCondTeensy(); } Index: firmware/App/Drivers/ConductivityTeensy.c =================================================================== diff -u -r60ae19fffcc93ee4bfeb1756af18be93acc9dd70 -r18f5ac036baf7dca352e881bdd64d6fd742d8c58 --- firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision 60ae19fffcc93ee4bfeb1756af18be93acc9dd70) +++ firmware/App/Drivers/ConductivityTeensy.c (.../ConductivityTeensy.c) (revision 18f5ac036baf7dca352e881bdd64d6fd742d8c58) @@ -24,20 +24,28 @@ #include "ConductivityTeensy.h" -#define SCI_RECEIVE_DMA_REQUEST 30 ///< Serial port receive DMA request line. -#define SCI_TRANSMIT_DMA_REQUEST 31 ///< Serial port transmit DMA request line. +#define SCI_RECEIVE_DMA_REQUEST 38 ///< Serial port receive DMA request line. +#define SCI_TRANSMIT_DMA_REQUEST 39 ///< Serial port transmit DMA request line. #define COND_WRITE_CMD_BUFFER_LEN 256 ///< Conductivity write command buffer byte length. -#define COND_READ_CMD_BUFFER_LEN 8 ///< Conductivity read command buffer byte length. #define COND_WRITE_RSP_BUFFER_LEN 8 ///< Conductivity write command response buffer byte length. +#define COND_READ_CMD_BUFFER_LEN 8 ///< Conductivity read command buffer byte length. #define COND_READ_RSP_BUFFER_LEN 256 ///< Conductivity read command response buffer byte length. // ********** private data ********** static CONDUCTIVITY_COMM_STATE_T conductivityCommState = COND_COMM_STATE_START; +static U32 condReceiptCounter = 0; ///< Conductivity response receipt counter. +static U32 condTransmitCounter = 0; ///< Conductivity command transmit counter. +static BOOL condWriteCommandInProgress = FALSE; ///< Flag indicating an Conductivity write command is in progress. +static BOOL condReadCommandInProgress = FALSE; ///< Flag indicating an Conductivity read command is in progress. +static BOOL condBulkWriteAndReadInProgress = FALSE; ///< Flag indicating an Conductivity bulk write and read command are in progress. +static BOOL condWriteCommandResponseReceived = FALSE; ///< Flag indicating a response to an Conductivity write command has been received. +static BOOL condReadCommandResponseReceived = FALSE; ///< Flag indicating a response to an Conductivity read command has been received. + // Conductivity comm buffers static U08 condWriteCmdBuffer[ COND_WRITE_CMD_BUFFER_LEN ]; ///< Conductivity write command buffer. Holds the next Conductivity write command to be transmitted. -static U08 condReadCmdBuffer[ COND_READ_CMD_BUFFER_LEN ]; ///< Conductivity read command buffer. Holds the next Conductivity read command to be transmitted. static U08 condWriteResponseBuffer[ COND_WRITE_RSP_BUFFER_LEN ]; ///< Conductivity write command response buffer. Memory reserved to capture the response to the last Conductivity write command. +static U08 condReadCmdBuffer[ COND_READ_CMD_BUFFER_LEN ]; ///< Conductivity read command buffer. Holds the next Conductivity read command to be transmitted. static U08 condReadResponseBuffer[ COND_READ_RSP_BUFFER_LEN ]; ///< Conductivity read command response buffer. Memory reserved to capture the response to the last Conductivity read command. // Conductivity DMA control records @@ -68,9 +76,9 @@ // ********** private function prototypes ********** +static void initConductivityDMAchannels( void ); static void handleConductivitySendCmd( void ); static void handleConductivityReceiveResponse( void ); - static void consumeUnexpectedConductivityData( void ); static void setupConductivityDMAForWriteCmd( U32 bytes2Transmit ); @@ -119,6 +127,22 @@ static void calculateConductivity( TEENSY_SENSOR_INDEX_T sensorNum ); static void calculateTemperature( TEENSY_SENSOR_INDEX_T sensorNum ); + +void initCondTeensy( void ) +{ + conductivityCommState = COND_COMM_STATE_START; + condReceiptCounter = 0; + condTransmitCounter = 0; + + // initialize Conductivity comm buffers + memset( &condWriteCmdBuffer, 0, COND_WRITE_CMD_BUFFER_LEN ); + memset( &condReadCmdBuffer, 0, COND_READ_CMD_BUFFER_LEN ); + memset( &condWriteResponseBuffer, 0, COND_WRITE_RSP_BUFFER_LEN ); + memset( &condReadResponseBuffer, 0, COND_READ_RSP_BUFFER_LEN ); + + initConductivityDMAchannels(); +} + void execConductivityCommunication( void ) { switch ( conductivityCommState ) @@ -195,18 +219,8 @@ } -static void handleConductivitySendCmd( void ) +static void initConductivityDMAchannels( void ) { - -} -static void handleConductivityReceiveResponse( void ) -{ - -} - - -void initConductivityDMAchannels( void ) -{ // Assign DMA channels to h/w DMA requests dmaReqAssign( DMA_CH1, SCI_RECEIVE_DMA_REQUEST ); dmaReqAssign( DMA_CH3, SCI_TRANSMIT_DMA_REQUEST ); @@ -217,7 +231,7 @@ dmaEnableInterrupt( DMA_CH1, BTC ); dmaEnableInterrupt( DMA_CH3, BTC ); - // Initialize FPGA DMA Write Control Record + // Initialize Conductivity DMA Write Control Record condDMAWriteControlRecord.PORTASGN = 4; // Port B (only choice per datasheet) condDMAWriteControlRecord.SADD = (U32)condWriteCmdBuffer; // Transfer source address condDMAWriteControlRecord.DADD = (U32)(&(sciREG->TD)); // Dest. is SCI xmit register @@ -235,7 +249,7 @@ condDMAWriteControlRecord.FRSOFFSET = 0; // Not used condDMAWriteControlRecord.FRDOFFSET = 0; // Not used - // Initialize FPGA DMA Write Response Control Record + // Initialize Conductivity DMA Write Response Control Record condDMAWriteRespControlRecord.PORTASGN = 4; // Port B (only choice per datasheet) condDMAWriteRespControlRecord.SADD = (U32)(&(sciREG->RD)); // Source is SCI recv register condDMAWriteRespControlRecord.DADD = (U32)condWriteResponseBuffer; // Transfer destination address @@ -253,7 +267,7 @@ condDMAWriteRespControlRecord.FRDOFFSET = 0; // Not used condDMAWriteRespControlRecord.FRSOFFSET = 0; // Not used - // Initialize FPGA DMA Read Control Record + // Initialize Conductivity DMA Read Control Record condDMAReadControlRecord.PORTASGN = 4; // Port B (only choice per datasheet) condDMAReadControlRecord.SADD = (U32)condReadCmdBuffer; // Transfer source address condDMAReadControlRecord.DADD = (U32)(&(sciREG->TD)); // Dest. is SCI xmit register @@ -271,7 +285,7 @@ condDMAReadControlRecord.FRSOFFSET = 0; // Not used condDMAReadControlRecord.FRDOFFSET = 0; // Not used - // Initialize FPGA DMA Read Response Control Record + // Initialize Conductivity DMA Read Response Control Record condDMAReadRespControlRecord.PORTASGN = 4; // Port B (only choice per datasheet) condDMAReadRespControlRecord.SADD = (U32)(&(sciREG->RD)); // Source is SCI recv register condDMAReadRespControlRecord.DADD = (U32)condReadResponseBuffer; // Transfer destination address @@ -295,6 +309,58 @@ /*********************************************************************//** * @brief + * The signalConductivityReceiptCompleted function increments a counter to indicate + * that another DMA receipt from the Conductivity has completed and sets comm flags + * indicating pending response from Conductivity is completed. + * @details \b Inputs: none + * @details \b Outputs: condReceiptCounter, condWriteCommandInProgress, + * condWriteCommandResponseReceived, condReadCommandInProgress, + * condReadCommandResponseReceived, condBulkWriteAndReadInProgress + * @return none + *************************************************************************/ +void signalConductivityReceiptCompleted( void ) +{ + condReceiptCounter++; + // Did Conductivity Ack last command? + if ( TRUE == condWriteCommandInProgress ) + { + condWriteCommandInProgress = FALSE; + condWriteCommandResponseReceived = TRUE; + } + else if ( TRUE == condReadCommandInProgress ) + { + condReadCommandInProgress = FALSE; + condReadCommandResponseReceived = TRUE; + } + + // See if we want to follow up with a bulk read command + if ( TRUE == condBulkWriteAndReadInProgress ) + { + condBulkWriteAndReadInProgress = FALSE; + condReadCommandInProgress = TRUE; + // Initiate bulk read command + startConductivityDMAReceiptOfReadResp(); + startConductivityDMAReadCmd(); + } +} + +/*********************************************************************//** + * @brief + * The signalConductivityTransmitCompleted function increments a counter to indicate + * that another DMA transmit to the Conductivity has completed. + * @details \b Inputs: none + * @details \b Outputs: condTransmitCounter + * @return none + *************************************************************************/ +void signalConductivityTransmitCompleted( void ) +{ + condTransmitCounter++; +} + + + +/*********************************************************************//** + * @brief * The getImpedanceValue function gets the current calculated conductivity / impedance value. * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. @@ -323,6 +389,15 @@ return calculatedMeasurement[sensorNum].Temperature; } +static void handleConductivitySendCmd( void ) +{ + +} +static void handleConductivityReceiveResponse( void ) +{ + +} + static void consumeUnexpectedConductivityData( void ) { // Clear any errors Index: firmware/App/Drivers/ConductivityTeensy.h =================================================================== diff -u -r60ae19fffcc93ee4bfeb1756af18be93acc9dd70 -r18f5ac036baf7dca352e881bdd64d6fd742d8c58 --- firmware/App/Drivers/ConductivityTeensy.h (.../ConductivityTeensy.h) (revision 60ae19fffcc93ee4bfeb1756af18be93acc9dd70) +++ firmware/App/Drivers/ConductivityTeensy.h (.../ConductivityTeensy.h) (revision 18f5ac036baf7dca352e881bdd64d6fd742d8c58) @@ -148,8 +148,10 @@ }CONDUCTIVITY_CALCULATED_MEASUREMENTS_T; // ********** public function prototypes ********** -void initConductivityDMAchannels( void ); +void initCondTeensy( void ); void execConductivityCommunication( void ); +void signalConductivityReceiptCompleted( void ); +void signalConductivityTransmitCompleted( void ); F64 getImpedanceValue( U32 sensorNum ); F64 getRTDValue( U32 sensorNum ); Index: firmware/App/Services/Interrupts.c =================================================================== diff -u -rf7c714a1a09b10d85a8b013712532d37b4d7b97a -r18f5ac036baf7dca352e881bdd64d6fd742d8c58 --- firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision f7c714a1a09b10d85a8b013712532d37b4d7b97a) +++ firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision 18f5ac036baf7dca352e881bdd64d6fd742d8c58) @@ -236,6 +236,16 @@ case DMA_CH2: // FPGA transmit channel clearSCI2DMATransmitInterrupt(); signalFPGATransmitCompleted(); + break; + + case DMA_CH1: // Conductivity receive channel + clearSCIDMAReceiveInterrupt(); + signalConductivityReceiptCompleted(); + break; + + case DMA_CH3: // Conductivity transmit channel + clearSCIDMATransmitInterrupt(); + signalConductivityTransmitCompleted(); break; default: