Fixed a bug that could cause a lockup to occur
authorJason Reeder <jreeder@ti.com>
Thu, 2 Aug 2018 18:17:49 +0000 (13:17 -0500)
committerJason Reeder <jreeder@ti.com>
Thu, 2 Aug 2018 18:31:59 +0000 (13:31 -0500)
There was one handshake that did not use a temporary variable
before checking the value in the while loop. Without the
temporary variable the XIN instruction may place the value to
be checked into a different core register than the one being
checked.

This commit adds a temporary variable in order to force the
compiler to copy the value to the variable being checked by
the while loop. All other while loops involving the XIN
instruction already used this method.

Signed-off-by: Jason Reeder <jreeder@ti.com>
PRU_ADS8688_Controller/PRU_ADS8688_Controller.c

index 99adfbe8ec1ef8d5fc5dc96f9142ca8261e1bbe7..75cb40bc5f6639613921a06dd157b078f3a9c2f1 100644 (file)
@@ -149,7 +149,8 @@ send_command(uint16_t continuous) {
 
        /* Wait for SPI coprocessor to acknowledge the command */
        while (!(status & SEND_ACK_BIT)) {
-               __xin(SCRATCHPAD_1, STATUS_REG, 0, status);
+               __xin(SCRATCHPAD_1, STATUS_REG, 0, temp);
+               status = temp;
        } 
 
        /* Clear the start bit */