************************* MS120 Revision History *********************************** * * V3-00 5/12/2006 Initial release * * V3-10 12/1/2007 Bug fixed in PERMSTORE module. * * V3-11 1/2/2007 Bug fixed in the STSCALE mechanism which would prevent the * correct functioning of this instruction with certain numbers. OBCB multi * channel software counter module added, 8 channels implemented on inputs * 0 - 7. Handling of expansion I/O altered to spread the processor interrupt * loading over several timer interrupt cycles. * * V3-12 10/8/2007 Bug fixed which caused the MS120 to do 5 shifts to update expansion * I/O instead of four shifts. This did not cause any problems but wastes CPU time. * Xwire V1-1 expansion protocol added. PWM frequency can now be set by SPLat program * using an SPxCmd1 command. Task que timer base can be set between 1 - 255ms by an * SPxCmd1 command (default is 10ms). TSP interface has been removed. * * V3-13 29/8/2007 Bug fixed in Xwire which would occasionally cause the Xwire UART to stream * if the unit had been running as an Xwire master and a new program was downloaded to * the board which also set the board to Xwire master operation. * * V3-14 15/2/2008 A new CPU call SPxPoll1 (Argument=7) returns the number of tasks running in the SPLat task que. * "Reason for reset" byte now has bit 0 implemented which is set when the SPLat interpreter encounters the * new "WarmBoot" instruction. The OBCB peripheral now has the ability to have the number of channels specified * and an offset added to allow the OBCB inputs to be positioned anywhere in the controllers memory map, * including expansion I/O. The form of the instruction is "$F5 $2C NumberOfChannels StaringInput". The number * of channels is limited by the compilation variable "OBCB_channels". * * V3-15 9/5/2008 A vulnerability has been fixed in the Xwire protocol sequencer that could cause the Xwire module * to stream TX characters if a timing error occured in the received message (ie: message not arriving within * Xwire time parameters). The Xwire comms receive structure now uses an interrupt and small circular buffer * to eliminate comms errors when the receive baud rate is slightly higher than that of the MS120. A bug has * been fixed in the MemToUV and UVtoMem instructions which would not allow the last byte to be accessed. The * FixtoU instruction now preserves W. An interaction between LCD writes and the front panel push buttons has * been fixed. Under certain circumstances, push button inputs could be falsely triggered by LCD screen updates. * * V3-16 10/6/2008 Timing issue fixed when using the SPxTxfrU instruction, the symptom of which was that input data * would be corrupted when using this instruction. * * V3-17 16/6/2008 Bug fixed in Xwire protocol which would cause long corrupted messages to be sent if the data length * was set to zero in either slave or master mode. The FixtoU instruction now really does preserve W as was * advertised as fixed in version 3-15. * * V3-18 19/6/2008 High drive strength enabled on all PWM pins used in this design to improve the accuracy of the generated * analogue voltages. * * V3-19 25/6/2008 Xwire protocol modified so that transmit messages and received data is only tranfered to and from * SPLat memory between the execution of SPLat instructions. This has been done to make it easier for the user * to transfer multibyte variables (ie: floating point) without corruption. * * V3-20 11/3/2009 High drive strength enabled on all PWM pins used in this design to improve the accuracy of the generated * analogue voltages. LCD driver now loads more of the user character RAM cells to allow the displaying of large 7 * segment data on 4 line LCDs (3 lines used for displaying characters. MODBUS master implemented. Bootloader bug fixed * which could prevent successful reflashing of a board if NVEM alters memory to something other than $FF after the end * of the SPLat program. Demo program feature removed to free up space and resources. User program space reduced by 4096 * bytes to allow for future code expansion. User now has 22,016 bytes for program and NVEM storage (previously 26,112 * bytes). LCD back light can now be PWM controlled allowing the LCD to be dimmed or turned off after a programmed amount * of time (0-255 minutes). New CPU calls allow the operating brightness, dimmed brightness and time to dimmed setting to * be set by the user. Pressing any of the front panel buttons will cause the timer to be re-started and the display * to be brought up to the operating brightness level independant of the user program. * * V3-20 24/3/2009 Re-assembled with version 1.2 bootloader to enable code security. * * V3-21 2/6/2009 Re-instated the user program memory size of 26,112 bytes. * * V3-22 8/1/2010 IEEE floating point format <--> SPLat floating point format conversion routines added to make the use of touch * screens easier. 16 bit signed and unsigned <--> SPLat floating point routines added to make working with touch screens * easier. MODBUS Slave Function Type = 3, "Read Memory" using address 2000 --> 2039 returns the contents of the SPLat LCD * buffer to allow existing "oblcd" instructions to display text on the touch screen under program control. MODBUS memory * referencing instructions in WORD mode now have the starting address multiplied by 2 when processed if the address is in * the range 3000 - 3999. The ensures correct behaviour when using SPLat products with touch screens and other MODBUS * devices. Function Types 6 (preset single register) and 16 (preset multiple registers) are affected in MASTER mode. SLAVE * functions 3 (Read memory), 6 (preset single register) and 16 (preset multiple registers) are affected. * An SPxPoll4 0,!CPU returns the floating point temperature of the CPU chip in °C at locations U(0) --> U(3). * An SPxPoll4 1,!CPU returns the floating point temperature of the CPU chip in °F at locations U(0) --> U(3). * Modified SPLat comms to allow much faster download speeds (up to 30 times faster). This firmware is fully backward * compatible with older versions of SPLatPC in terms of downloads, but to get the benefit of the faster downloads, * the user will need SPLatPC Version 10.21.1 or higher. * * V3-23 25/3/2010 Fixed a bug in the comms RX interrupt handler which would cause the board to reset if being used in any UART * profile with parity enabled. MODBUS RX handler modified to be active all the time rather than only after the UART * transmitter has finished sending. This has been done because several MODBUS devices we have used ignore the MODBUS * specification and reply immediately rather than waiting 3.5 character times before replying. MODBUS master mode is now * capable of sending the LCD buffer using function 16 (preset muliple registers) if the address range is set to 2000 - 2079. * The CommRunScript and CommHaltScr commands will now wait for the MODBUS master script parser to be actually stopped * before HALTing or changing the script to be executed, respectively. * * V3-24 10/5/2010 Jindexing has been applied to the instructions "FixToMem16S", "FixToMem16U", "FloatMem16U" and "FloatMem16S". * A Bug has been fixed in the signed versions of these instructions. New instruction added "fSTSinceMark" which loads W * with the time since the tasks private timer was set using a "marktime" instruction. This instruction only works in the * task que. Board reports SPLat dialect 22. * Added counter which is incremented whenever a successful transaction is completed (Xwire slave mode) * or whenever the end of script table is encountered (Xwire master mode). A new instruction is able to * read the value of this counter and clears the counter to zero. Two new instructions have been added * which facillitate the changing of Xwire modes and scripts while a program is running. XwireStop will * command the Xwire communication module to stop after the current transaction and return to an idle * state. XwirePollIdle will return X=true if the Xwire comms module is idle. The current Xwire slave * and Xwire master configuration instructions work as previous but will stop the Xwire comms module and * stall the SPLat interpreter until the Xwire comms module is actually idle (has completed current * transaction). For applications where the SPLat interpreter must not be stalled, the user should stop * Xwire comms, poll until it is idle then run the configuration instruction. If stalling the program * is not important, the configuration instruction can be used by itself. If Xwire is not currently * running when an Xwire configuration instruction is executed, there is no stalling of the users program. * * V3-25 18/6/2010 Abitrary string communications protocol added. This protocol allows the user to create and send ASCII * and binary strings and receive and parse same. Simple 8 bit addition and subtraction, both with and without carry * instructions have been added. The carry/borrow bit for these instruction is held in the R register. Non destructive * floating bit compare and go instructions have been added. Bug fixed which prevented the BranchM instruction from * being jindexed. * * V3-26 12/8/2010 Bug fixed in arbitary string protocol where the buffer pointers were not re-initialised if there * was a program error and the program re-started. RtoX instruction added. Bug fixed in the COMTX_Space instruction which * would return the number of bytes in the buffer rather that the number of free bytes. Bug fixed in Xwire slave sequencer, * other minor Xwire improvements to improve robustness in the slave mode when there are inadvertantly two Xwire masters * on the bus. Xwire TX and RX state machines now re-initialise themselves immediately that they are disabled. This * has been done to prevent unwanted behaviour when there are multiple slaves with the same address on the Xwire bus (PKS). * A bug has been fixed in the SPI module which may cause expansion I/O to be ignored depending on the power up data contents * of the shift registers. RtoX instruction added. * * V3-27 19/5/2011 MODBUS/SPLat/String protocol UART RX interrupt routine and UART interrupt vectors modified to recover * correctly from UART overrun errors. Bug fixed in MODBUS which would cause the 3.5 character delay timer not to be * initialised if the selected baud rate was the same as the current baud rate. Xwire RX interrupt routine and UART * interrupt vectors also modified to recover from overrun errors. MODBUS code modified to always return idle status * when re-initialised.Added 10 new floating point compare instructions which set X either true of false depending on the * floating point comparison. They are non destructive to W and Q. Added "COMRX_fGetNum" instruction to string comms protocol * to allow the extraction of numbers from the ASCII string contained in the receive buffer. The routine will parse both signed * integer and signed decimal numbers and return with the result in W. The SPLat result register R will be zero if a number was * successfully parsed or 1 if a valid number could not be parsed. Added COMRX_StrFind and iiPrintNVText instructions. Bugs * fixed in iiPrintFill and COMRX_peek instructions. Changed buffer arrangements for the LCD driver and string comms protocol * so that the string comms protocol can send strings of up to 255 characters from a single string comms instruction. Previously, * a limit of 40 characters applied to the iiPrintText, iiPrintFill and iiPrintNVText instructions. Also, if the TX buffer was * full when any String protocol instruction which resulted in characters being appended to the TX buffer, an error would be * generated and the SPLat program reset. The user was expected to use the COMTX_Space instruction to ensure this did not * happen. Now, the TX buffer can be written at any time with the caveat that if the buffer becomes full during the execution * of the string comms instruction, the entire SPLat program will be stalled until the currently executing instruction can * deposit all of its characters into the TX buffer. The TX buffer is 128 characters in length. When the destination is the * user RAM, the instructions still execute atomically providing the string fits within the user RAM. If not, an error is * generated and the SPLat program is reset. Reports dialect 27. * * V3-28 4/7/2011 Added iifGetNum, iiFindXinBuf, iiGetHex and iiStrFind instructions to allow string processing from user * RAM. This allows string porcessing of data which may come from an Xwire peripheral, particularly the SX10509 internet * interface, where the server may provide data in ASCII format. iiPrintNVtext instruction now uses record length and * record number as well as the NVEM pointer to index the string to be sent. New TestXY instructions added. Reports dialect 28. * * V3-29 14/10/2011 Bug fixed in COMRX_Peek instruction which would cause it to return a result when peeking at the first character * in the buffer when no characters where in the RX buffer. Also fixed in the same instruction, was a bug which caused it to * return the byte after the one referenced by X. * * V3-30 8/11/2011 Bug fixed which would cause SPLatPC not to connect to an MS120 with 32 expansion I/O's connected and when any of the * last 4 inputs were activated. This would cause the MS120 to stream input update messages. * * V3-31 10/9/2013 Bug fixed in MODBUS slave function 2 which could cause eratic behaviour if more than 8 inputs state were polled for. * * V3-32 29/6/2015 Increased the number of SPLat Multitrack tasks from 32 to 40. * * V3-33 11/9/2017 Fixed a bug in the FixToMem16 instruction which destroyed W instead of preserving it. * * V3-34 1/11/2017 Brought up to date with the latest LCD driver which fixes a display formatting bug when displaying some floating point * numbers. 100 x 0.01 followed by oblcd_fdispw 5,0 would result in the wrong number being displayed. The result should be 1. *