On Mar 30, 2013, at 1:37 PM, php5...@netcourrier.com wrote: > can i program msp430 in assembler with mspgcc ? How to ?
Sure. Name your file "program.S", and assemble using msp430-gcc program.S The .S extension tells gcc that the file is assembler, with preprocessing. Be aware that the gnu assembler (known as "gas") does not have the same syntax as the TI assembler. Here's some MSP430 code written in the gnu assembler: .macro entry f .section .text.\f, "x" .global \f \f: .endm entry _getportpin ;;; Given a pin# as the first argument in a C function (in R15), ;;; convert this to the port address base in R15 and a bit in R13. ;;; return with Z set if the translation is bad. mov.b r15, r13 ; get pin mov.b p2port(r13),r15 ; get port based on pin (extend to word.) mov.b p2bit(r13),r13 ; get bit tst r15 ; see if it's valid; leave Z set if not. ret ;;; pin# to port address translation table (stored in flash) ;;; In the current tables, pin#'s are based on the individual chip pins, ;;; so the first usable "pin" is "2" p2port: .byte 0,0 ;0 not used. Pin 1 = Vdd .byte 0x20, 0x20, 0x20, 0x20 , 0x20, 0x20, 0x20, 0x20 ;pin 2-9 .byte 0,0 ; pin 10 = RST, pin 11=TEST .byte 0x28, 0x28 ; pin 12, 13 .byte 0 ; pin 14 = VSS ;;; pin# to bit (within a port) translation table. p2bit: .byte 0,0 .byte 1,2,4,8, 16,32,64,128 .byte 0,0 .byte 128,64 .byte 0 ;;; _digitalWrite(int pin, int value) ;;; actual code to implement the digitalWrite Arduino function (if it ;;; can't be implemented faster inline for the case where args are constant.) ;;; Write a digital value (zero or non-zero) to a particlar pin, ;;; assuming the pin is already set up properly as an output. entry _digitalWrite ; (uint8_t pin , uint8_t val) call #_getportpin ;get portbase, bit to r15, r13 jz dwret ;errorn inc r15 ; adjust to xxOUT tst.b r14 ;check value jnz dw_nz bic.b r13,0(r15) ret dw_nz: bis.b r13,0(r15) dwret: ret ;;; int _digitalRead(int pin) ;;; actual code to implement the digitalRead Arduino function (if it ;;; can't be implemented faster inline for the case where args are constant.) ;;; return 0 if the pin input is low, 1 if it is high. entry _digitalRead call #_getportpin ;get portbase, bit to r15, r13 jz drret ;digital read of invalid pin is 0 mov.b @r15, r15 ;read port (offset from base is 0 for IN) and.b r13, r15 ;test bit jz drret ; zero. retval in r15 is also conveniently zero mov.b #1, r15 drret: ret ------------------------------------------------------------------------------ Own the Future-Intel(R) Level Up Game Demo Contest 2013 Rise to greatness in Intel's independent game demo contest. Compete for recognition, cash, and the chance to get your game on Steam. $5K grand prize plus 10 genre and skill prizes. Submit your demo by 6/6/13. http://altfarm.mediaplex.com/ad/ck/12124-176961-30367-2 _______________________________________________ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users