ICC430 Readme file Make sure you subscribe to the icc-430 mailing list for program update announcements. Refer to http://www.dragonsgate.net/mailman/listinfo for details. [ STARTING 6.07+, R12-R15 are now being used for passing function arguments. The only visible change is that if you have your own asm module, a called function will no longer have to preserve R8/R9. ] CHANGE LOGS: 08/16/2005 - V6.08 NoICE debugger - ICC430 no longer includes NoICE430 demo as it is difficult to maintain consistency of the DLLs. You should download the NoICE430 debugger demo from http://www.noicedebugger.com. MSP430 NOI files (files with IO register definitions) can be found at c:\icc\noice\bin Library and Headers - added typedef struct { long quot; long rem; } ldiv_t; typedef struct { int quot; int rem; } div_t; ldiv_t ldiv(long a, long b); // a/b and a%b div_t div(int a, int b); // a/b and a%b The header file stdlib.h contains these definitions IDE - Fixed RAM address for F1611 - Added support for USB JTAG dongle ICC430DL, command line flash downloader - Added support for USB JTAG (type just the name of program for Help) 03/02/2005 - V6.07B Compiler - Fixed a number of register allocation problems 07/12/2004 - V6.07A IDE - The IDE now generates the following defines for the appropriate devices: F1101, F1111, F112, F1121, F1122, F1132, F122, F1222, F1232, F133, F135, F147, F1471, F148, F1481, F149, F1491, F155, F156, F157, F1610, F1611, F167, F168, F169, F412, F413, F415, F457, F435, F436, F437, F447, F448, F449, FW423, FW425, FW427 (basically, all the device names on the drop down Options->Target->Device list). You may use it as: #if defined(F149) ... - Updated MSP430.DLL to better support flash burning for F169 (IDE and Flash Burner) - If you exit the IDE with no opened project, when the IDE is invoke next time, it will not open the old project - The IDE's title now includes the Project name, this will make it easier to identify when IDE minimized icons when there are multiple IDEs running Compiler - Due to a typo to support R12/R13 as argument registers, wrong code was generated for foo(unsigned_long_var / , unsigned_char_var); - Under some rare conditions, the lifetime of an argument register may be miscalculated and the compiler would incorrectly assign the wrong register to it. - Under some rare conditions, the compiler may loop on complex statements with long variables Examples - uexec (the micro multitasking executive kernel) has been ported to ICC430, see \icc\examples.430\uexec.zip 05/24/2004 - V6.07 IDE - Changed AppBuilder initialization. Changed Device list setup. Compiler - Disable AND/OR immediate optimizations on IO registers - Register History was accidentally not tracking registers optimally. - Changed to use R12-R15 for passing function arguments. This should improve code size ~1%. Assembler - Assembler was flipping the B/W bit for the DADD instructions. 03/8/2004 - 6.06 (PRO VERSION FIRST RELEASE) IDE - All Scroll Mice are now supported under the editor - Include all known MSP430 flash devices in the Project->Options->Target Device list - Enabled Code Compressor (PRO only, and trial mode for STD/DEMO) Compiler - Better code for using the results of function calls. Should see ~1% code improvement. - Register History was not tracking a double indirection from a global variable to a register correctly - Better code for byte moves to registers Assmebler - Now complains about using #imm as the destination of a CMP instruction Linker - Now the linker complains if two different bytes are being written to the same code space location. - Enabled Code Compressor, most programs are compressed from 2-8%. SIDE EFFECTS - If you use your own startup file, you must modify it to declare the areas similar to what is done in the default crt430.s - All indirect function calls must now be done using an indirect function entry, e.g. OLD: mov #_func,R4 call R4 NEW: mov #PL_func,R4 call @R4 ... .area func_lit PL_func: .word _func The compiler does the right thing if you are using C, and create an indirect entry for a reference to a function address. - your program will run slower due to more function calls. The average seems to be around 1-2%. - To disable Code Compression temporarily, use the new assembler directives: .nocc_start ; code that should not be compressed, e.g. timing loop ; or timing sensitive code ... .nocc_end In C, the header file msp430def.h contains #define NOCC_START() asm(".nocc_start") #define NOCC_END() asm(".nocc_end") Do not use these inline asm outside of a function body. Library - string functions (str?cmp, memcmp...) were incorrectly using signed compare instead of unsigned compare - strlen/strcmp/strrchr (asm versions) were using "CMP @R14+,#0" which it appears that the CPU sometimes execute as intended and sometimes not. 01/27/04 - 6.05 Header Files - Complete set of header files for all current MSP430 members Assembler - if the source file is very large and contains many forward branches, the assembler gave spurious "PC changed" errors. Library - All the common string.h functions are now written in assembly. Examples - Added \icc\examples.430\easyweb_test.zip. ICC430 compatible code for the Olimex Easyweb TCP/IP code. More details: http://www.olimex.com/dev/mspprojects.html - Added \icc\examples.430\i2c\ I2C routines, tested with the D413 demo board and the TMP100 temperature sensor 10/27/03 - 6.04 IDE - Added Project->Options->Compiler->"Generate Assembly Line Numbers for NoICE430" Compiler - LCC4.2 version version merge. It *possibly* eliminates the spurious illegal characters \0 errors on remote NT source files. - Register History was not handling writes to global variables correctly. - Eliminated spurious "idata area bytes not the same size as data area" messages. - Register History was not handling "mov.b" followed by "mov" correctly. - Added peephole to eliminate "and #0xFF,..." followed by "movb..." - Fixed problems for assignments such as x = y - x; Previously, sometimes "y" is moved into where "x" is and clobbered "x" before it is used. Utility - Added ICC430DL to \icc\bin, a command line utility for downloading program to the MSP430. Type "ICC430DL -h" for usage info. 8/25/03 - 6.03 [ Enabled 4K limited licensing ] [ DEMO NOW expires in 45 days instead of 30 days ] IDE - V3.00 of the dongle driver - File->SaveAs now asks for confirmation if the file already exists - Added "Salvo Config" tab to Project->Options - Added (Directory) Browse buttons to the "PATHS" tab in Project->Options. - Added Tools->EnvOptions->Terminal->Font... Compiler - returning the first function argument caused the compiler to always move the argument out of R14 - "word = long_word >> 16" was copying the wrong word - Some combinations of signed and unsigned 8 bits divide/moid were using the incorrect 8 bit div/mod Library - 8 bit unsigned / was returning the wrong result if it should be zero. NoICE430 - NoICE430 files are now under its own directories: \noice\bin - program files, *.noi symbol files \noice\doc - help files for NoICE - NoICE path can be set in IDE's Tools->EnvOptions->Preferences - A complete set of *.noi files for all known MSP430 devices under \noice\bin 6/02/03 - 6.02E Header files - Added header files for all currently known MSP430 devices. Compiler - In some rare cases, an ISR might not save some of the local registers if they are only used for "very-temp'ing." Linker - Interrupt vectors were accidentally eliminated from the HEX output file 5/22/03 - 6.02D Compiler - "A = B - A" was generating incorrect code - Changed to generate @Rx instead of 0(Rx) for source operand. 2 bytes shorter - Pre-enbleng Code Compressor. 4/23/03 - V6.02C Compiler - typo in AND/OR optimization that 2 consecutive AND/OR operations with the same immediate values were incorrectly optimized. e.g. a |= 0x10; b |= 0x10; // incorrectly got deleted 4/15/03 - V6.02B Compiler - (expr OP const) OP const optimization bug fix - Better code for operations on the IO registers Assembler - the constant generator addressing modes were accidentally disabled 4/07/03 - V6.02A Compiler - Improved constant folding for exprs: (expr OP const) OP const and where OP is a commutative operator Library - divmod8u was expecting R14's upper byte to be clear, but it may not be. This could cause incorrect result when doing 8 bits unsigned divide or modulo. - putchar() now does buffer status checking 3/04/03 - V6.02 IDE - Find in Files went into infinite loop if a pattern is found in the last line of a file - Device setting is changed to specify the starting address of the text (flash) area, to be more compatible with the other ICC IDEs Compiler - INTRINSIC_BIS_IRQ incorrectly generated BIC instead of BIS. - Added Register History. Now generates fewer moves between registers and loading of constants/external/stacked. (More improvements forthcoming) - Spilling a long temporary generated incorrect code when reloading, e.g. long a(), b(); foo(a(), b()); - the compiler did not adjust the offset correctly when generating PUSH x(SP) ; SP is decremented FIRST! This mainly affect long operations with operands on the stack Library - FP divide sometimes returned incorrect sign when dividing a negative number by a positive number - 8 bit divide/modulo function was returning the remainder in upper byte of R14 when the compiler was expecting it to be in R15. Changed the routine to return remainder in R15 NoICE430 - NoICE430 V7.4 DEMO is now included [ 2.53B4 dongle ] 1/20/03 - V6.01B Compiler - The Peepholer was incorrectly eliminating function return result that "lives" across blocks, e.g. foo(bar() | (x ? 1 : 2)); - Reading a long pointer may trash the index register if the target and index are the same, e.g. long *ptr, l; .... l = ptr[i]; might have generated mov 0(R12),R12 mov 2(R12),R13 Library - Floating Point Add was accidentally broken. Sorry. - FAST math.c is now the default. Do not use mathx.h 1/10/03 - V6.01A fixed minor typo in NoICE430.noi IDE - [from 6.01 ] The new dongle wrapper was causing the IDE to run very slowly on some W95/W98 systems. - General speed cleanup - If you specify an output directory that does not exist, it might got created under \icc\bin in addition to the project directory. Header File - Added msp430x44x.h ilibw - Increased the number of input .o files to 256 1/06/03 - V6.01 [ An experimental FASTER set of trig and other high level math functions are available. Simply #include instead of . ] [ Known Bug - when you invoke the AppBuilder, it always selects the F149 device regardless of the setting in Project->Options->Target. However, you can still select another device once you are inside the Builder. ] [ New dongle drivers ] IDE - APPLICATION Builder - added support for: F110x, F112x, F122, F133, F135, F147, F148, F149, F412, F413, F435, F436, F447, F448, F449 - Added .dbg as argument when invoking NoICE430 - Added checkbox for "Reserve Information Memory." - Opening a read only file will no longer change its file permission - Better behavior when the specified external editor cannot be found Compiler - if one of the operands is a local var on the stack X(SP), using the HW multiplier did not adjust the offset for the pushed SR - *p++ did not assign the updated value back if p is a global variable or a local variable that is not allocated to a register Library - printf %f now works with precision and width - added %e %E %g %G to printf - FP division resulting in < 1.0 was broken Listing File - References to functions with the CALL instruction and references to global variables should now show up in the .lst listing file with the names instead of addresses V1.00 - 10/27/02 Compiler - Full 8/16/32 bit integers support - Full 32 bit FP support. - Advanced register allocator, including generating @Rx and @Rx+ mode - Interrupt handlers - stdarg, interrupt handler, ctask, monitor special function pragmas - Interrupt safe HW Multiplier. IDE - editors, project manager, code browser - Builtin FLASH burner - AppBuilder Libraries - printf (including floating point output) - string functions - ctype - memory allocation - setjmp/long - [sin/cos/exp/etc. will be supported later] Header Files - most target specific files (msp430x???.h) - macro definitions such as DINT and EINT in msp430def.h NoICE430 Debugger - breakpoints, step/in/over, watch points, ... Examples - Some LED blinking examples, including using Timer interrupts under \icc\examples.430