Here's a few tips
First off, don't REV anything. That's only going to confuse the issue.
The MCP23S17 expects the bytes to be sent MSB first, that is the first bit clocked out appears at GPx7 and the last bit appears at GPx0.
That's what you should get if you specify MSBFIRST in the SHIFTOUT instruction
Code:
SHIFTOUT SDO, SCLK, 1, [databyte]
If you need to reverse the bits at the output port, then specify LSBFIRST in the SHIFTOUT instruction
Code:
SHIFTOUT SDO, SCLK, 0, [databyte]
Now, on to the ordering of bytes. When you have a word declaration like
Code:
Voltage VAR WORD
VoltageFst VAR Voltage.BYTE0 'this is the lower byte of the word
VoltageSec VAR Voltage.BYTE1 'this is the upper byte of the word
Voltage = $8001
That would give you VoltageFst = $01, and VoltageSec = $80
So, if you used your send routine with those values
Code:
nCSA = 0 'Enable MCP23S17-A
SHIFTOUT SDO, SCLK, 1, [MCP23A,OLATA] ' i.e. SHIFTOUT SDO, SCLK, MSB,[MCP23A,OLATA]
SHIFTOUT SDO, SCLK, 0, [VoltageFst] ' i.e. SHIFTOUT SDO, SCLK, LSB,[VoltageFst]
nCSA = 1 'Disable the MCP23S17
pause 1
nCSA = 0 'Enable MCP23S17-A
SHIFTOUT SDO, SCLK, 1, [MCP23A,OLATB] ' i.e. SHIFTOUT SDO, SCLK, MSB,[MCP23A,OLATB]
SHIFTOUT SDO, SCLK, 0, [VoltageSec] ' i.e. SHIFTOUT SDO, SCLK, LSB,[VoltageSec]
nCSA = 1 'Disable the MCP23S17
RETURN
You end up with:
OLATA7:OLATA0 = $80 ' VoltageFst is $01, but was sent out LSB first so it swapped order
OLATB7:OLATB0 = $01 ' VoltageSec is $80, but was sent out LSB first so it swapped order
If that's not what you need then you'll either have to send VoltageFst to OLATB/VoltageSec to OLATA to swap the bytes,
and/or use MSB in the SHIFTOUT instruction, but that depends on exactly how the output ports are connected to the fiber interface.
In your case I wouldn't bother with trying to using 16-bit mode with the MCP23S17, at least not right now. That'll change all of the
register mapping addresses and likely confuse things even more. 16-bit mode can be faster, but since you're using SHIFTOUT instead
of the hardware MSSP it's already slow.
Bookmarks