************************* SL100 Revision History *********************************** * * V3-00 11/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 17/8/2007 CPU peripheral instruction added to change PWM frequency: * SPxCmd1, Cmd=0 U(0) Set PWM frequency: * 0 16000 Hz * 1 8000 Hz * 2 4000 Hz * 3 2000 Hz * 4 1000 Hz * 5 500 Hz * 6 250 Hz * 7 125 Hz * * Xwire V1-1 expansion protocol added. Task que timer base can be set between 1 - 255ms by an * SPxCmd1, Cmd=1 U(0) command (default is 10ms). TSP interface has been removed. * * V3-13 15/2/2008 CPU peripheral instruction to change PWM frequency was not implemented in V3-12 * as advertised, but is now implemented in V3-13. A bug has been fixed in the task que timer * code which would cause improper operation for time delays using the "fStTimeSince" instruction * if the delay time exceeded 8,388,607d. 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-14 16/6/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 SL100. 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. Timing issue fixed when using the SPxTxfrU instruction, the symptom of * which was that input data would be corrupted when using this instruction. 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. * * V3-15 25/6/2008 High drive strength enabled on all PWM pins used in this design to improve the accuracy of the generated * analogue voltages. 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. First cut of MODBUS master. * * V3-16 24/3/2009 MODBUS master bug in function 1 and 2 fixed. 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). The FixtoU instruction now preserves W. * * V3-17 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 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-18 19/1/2010 LCD buffer driver added to the SL100 to allow the LCD buffer to be fully manipulated by SPLat LCD program * commands. Using the SL100 as a MODBUS slave, the LCD buffer can be displayed on a touch screen, by reading memory in * the range 2000 - 2039. * * V3-19 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-20 19/4/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. * * V3-21 6/5/2010 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-22 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-23 1/7/2010 Added the RtoX instruction. * * V3-24 6/7/2010 String protocol buffer pointers were not being re-initialised. This became evident when a program * error occurred and the protocol was re-started. * * V3-25 13/7/2010 Bug fixed in the COMTX_Space instruction which would return the number of bytes in the buffer rather * that the number of free bytes. * * V3-26 20/7/2010 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. * * V3-27 12/8/2010 Xwire TX and RX state machines now re-initialise themselves immediately that they are disabled. This * has been done to prevent unwanted beaviour 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. * * V3-28 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-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 Bug fixed in MODBUS slave function 2 which could cause eratic behaviour if more than 8 inputs state were polled for.