diff --git a/hwTestSuite/tests.c b/hwTestSuite/tests.c index 9a66b9a..0ed0794 100644 --- a/hwTestSuite/tests.c +++ b/hwTestSuite/tests.c @@ -478,7 +478,6 @@ var selfProbeSpi2(){ static Boolean firstRun = true; uint16_t testWriteValue = 0xF0F1; uint16_t y = 0; - uint8_t scootTest = 0x0F; if(firstRun){ firstRun = false; @@ -490,23 +489,28 @@ var selfProbeSpi2(){ exitSubprogram(); } - writeArbitraryMemory16(HW_REG_ADDR(SPIDATA2), 0x0001); + /*enable SPI2*/ + writeArbitraryMemory16(HW_REG_ADDR(SPICONT2), 0x0200); + + /*set output value*/ + writeArbitraryMemory16(HW_REG_ADDR(SPIDATA2), 0x00F0); StrPrintF(sharedDataBuffer, "SPIDATA2:0x%04X", readArbitraryMemory16(HW_REG_ADDR(SPIDATA2))); UG_PutString(0, y, sharedDataBuffer); y += FONT_HEIGHT + 1; - writeArbitraryMemory16(HW_REG_ADDR(SPICONT2), 0x0200);/*enable SPI2*/ - writeArbitraryMemory16(HW_REG_ADDR(SPICONT2), 0x0300);/*shift in 1 bit*/ - StrPrintF(sharedDataBuffer, "Shift left 1"); + writeArbitraryMemory16(HW_REG_ADDR(SPICONT2), 0x0301);/*shift in 2 bits*/ + StrPrintF(sharedDataBuffer, "Shift left 2"); UG_PutString(0, y, sharedDataBuffer); y += FONT_HEIGHT + 1; StrPrintF(sharedDataBuffer, "New SPIDATA2:0x%04X", readArbitraryMemory16(HW_REG_ADDR(SPIDATA2))); UG_PutString(0, y, sharedDataBuffer); y += FONT_HEIGHT + 1; - StrPrintF(sharedDataBuffer, "Scoot Test:0x%04X", scootTest << 8); + writeArbitraryMemory16(HW_REG_ADDR(SPICONT2), 0xE000);/*disable SPI2*/ + StrPrintF(sharedDataBuffer, "Disabled SPICONT2:0x%04X", readArbitraryMemory16(HW_REG_ADDR(SPICONT2))); UG_PutString(0, y, sharedDataBuffer); y += FONT_HEIGHT + 1; - StrPrintF(sharedDataBuffer, "Scoot Test 2:0x%04X", (uint16_t)scootTest << 8); + writeArbitraryMemory16(HW_REG_ADDR(SPICONT2), 0xC000);/*write after disabled test*/ + StrPrintF(sharedDataBuffer, "Written SPICONT2:0x%04X", readArbitraryMemory16(HW_REG_ADDR(SPICONT2))); UG_PutString(0, y, sharedDataBuffer); y += FONT_HEIGHT + 1; diff --git a/hwTestSuite/tools.c b/hwTestSuite/tools.c index 0cbd2b9..c1dc62a 100644 --- a/hwTestSuite/tools.c +++ b/hwTestSuite/tools.c @@ -73,24 +73,24 @@ uint16_t ads7846GetValue(uint8_t channel, Boolean referenceMode, Boolean mode8bi writeArbitraryMemory16(HW_REG_ADDR(SPICONT2), 0x4207); /*set data to send*/ - writeArbitraryMemory16(HW_REG_ADDR(SPIDATA2), config << 8); + writeArbitraryMemory16(HW_REG_ADDR(SPIDATA2), config); /*send data*/ writeArbitraryMemory16(HW_REG_ADDR(SPICONT2), 0x4307); while(readArbitraryMemory16(HW_REG_ADDR(SPICONT2)) & 0x0100); - + /*receive data*/ - writeArbitraryMemory16(HW_REG_ADDR(SPICONT2), 0x4300 | (mode8bit ? 0x0008 : 0x000C)); + writeArbitraryMemory16(HW_REG_ADDR(SPICONT2), 0x4300 | (mode8bit ? 0x0007 : 0x000B)); while(readArbitraryMemory16(HW_REG_ADDR(SPICONT2)) & 0x0100); /*get value returned*/ - value = readArbitraryMemory16(HW_REG_ADDR(SPIDATA2)); + value = readArbitraryMemory16(HW_REG_ADDR(SPIDATA2)) & (mode8bit ? 0x00FF : 0x0FFF); /*disable SPI2*/ writeArbitraryMemory16(HW_REG_ADDR(SPICONT2), 0xE000); /*misc configs from HwrADC*/ - *((uint8_t*)0xFFFFF431) |= 0x04; + //*((volatile uint8_t*)0xFFFFF431) |= 0x04; return value; } diff --git a/src/hardwareRegistersAccessors.c.h b/src/hardwareRegistersAccessors.c.h index 1373774..c50073f 100644 --- a/src/hardwareRegistersAccessors.c.h +++ b/src/hardwareRegistersAccessors.c.h @@ -248,12 +248,15 @@ static inline void setSpiCont2(uint16_t value){ if(value & oldSpiCont2 & 0x0200 && value & 0x0100){ //enabled and exchange set uint8_t bitCount = (value & 0x000F) + 1; + uint16_t startBit = 1 << (bitCount - 1); uint16_t spi2Data = registerArrayRead16(SPIDATA2); //uint16_t oldSpi2Data = spi2Data; + //the input data is shifted into the unused bits if the transfer is less than 16 bits for(uint8_t bits = 0; bits < bitCount; bits++){ + bool newBit = ads7846ExchangeBit(spi2Data & startBit); spi2Data <<= 1; - spi2Data |= ads7846ExchangeBit(spi2Data & 0x8000); + spi2Data |= newBit; } registerArrayWrite16(SPIDATA2, spi2Data);