OK, here is some code that shows the problem. I use OpenSUSE LEAP 42.1 as the operating system and have both compilers installed in /opt under 2 different names ("msp430-elf-gcc" for the TI and "msp-gcc" for the 'old' P.A.Bigot compiler). Hope it's not too much, I've tried to keep it as small as reasonable without hiding anything.
The source: ======================================================================================== /* ****************************************************************************** ****************************************************************************** Compiler test: msp430-elf-gcc Includes and Interrupt definition syntax different for 'old' mspgcc Otherwise identical ****************************************************************************** ****************************************************************************** */ #include <msp430.h> #include <stdint.h> /* ****************************************************************************** Programmer information *** DO NOT USE IFDEFS *** (AWK'ed by avrprog etc) OK to comment out with '//' ****************************************************************************** */ #define MCU_TARGET msp430g2232 #define LED BIT0 // LED on P1.0 #define TXD BIT1 // TXD on P1.1 #define RXD BIT2 // RXD on P1.2 #define Bit_time 104 // 9600 Baud, SMCLK=1MHz (1MHz/9600)=104 #define Bit_time_5 52 // Time for half a bit. volatile uint16_t BitCnt; // Bit count, used when transmitting byte volatile uint16_t TXByte; // Value sent over UART when put_char() is called uint16_t result, status, checksum; /* ****************************************************************************** Write a character to RS232 ****************************************************************************** */ static void put_char(uint8_t databyte) { TXByte = databyte; TXByte |= 0x100; // Add stop bit (= 1) TXByte <<= 1; // Add start bit (= 0) BitCnt = 10; // Load Bit counter, 8 bits + start + stop P1OUT |= TXD; TACTL = TASSEL_2 + MC_2; // SMCLK, continuous mode TACCR0 = TAR; // Initialize compare register TACCR0 += Bit_time; // Set time of first bit TACCTL0 = CCIE; // Enable interrupts while (TACCTL0 & CCIE ) {}; // Wait for TX completion (by the interrupt) } /* ****************************************************************************** Main ****************************************************************************** */ void main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop WDT BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; // SMCLK = DCO = 1MHz P1DIR |= TXD | LED; _NOP(); _EINT(); // interrupts enabled while(1) { put_char('+'); } } /* ****************************************************************************** Timer A0 interrupt service routine (RS-232 9600 Baud Tx). Handles Tx bit timing. ****************************************************************************** */ void __attribute__ ((interrupt (TIMER0_A0_VECTOR))) TIMER0_A0_ISR(void) { P1OUT &= ~LED; // Turn LED on (start of interrupt) TACCR0 += Bit_time; // Add Offset to TACCR0 if (BitCnt == 0) // If all bits TXed { TACTL = TASSEL_2; // SMCLK selected, timer off (for power consumption) TACCTL0 &= ~CCIE ; // Disable interrupt } else { if (TXByte & 0x01) P1OUT |= TXD; else P1OUT &= ~TXD; TXByte >>= 1; BitCnt--; } P1OUT |= LED; // Turn LED on (end of interrupt) } ======================================================================================== The compile command for msp430-elf-gcc (taken from running my 'make'). msp430-elf-gcc -I/opt/msp430-gcc/include/ -O2 -Wall -g -mmcu=msp430g2232 -Wno-main -minrt -fshort-enums -Wno-unused-function -c -o main.o main.c msp430-elf-gcc -I/opt/msp430-gcc/include/ -O2 -Wall -g -mmcu=msp430g2232 -Wno-main -minrt -fshort-enums -Wno-unused-function -Wl,-Map,main.map -o main.elf main.o msp430-elf-objdump -h -S main.elf > main.lst The compile command for 'old' mspgcc (taken from running my 'make').msp430-gcc -Os -Wall -g -mmcu=msp430g2232 -Wno-main -fshort-enums -Wno-unused-function -c -o main.o main.c msp430-gcc -Os -Wall -g -mmcu=msp430g2232 -Wno-main -fshort-enums -Wno-unused-function -Wl,-Map,main.map -o main.elf main.o msp430-objdump -h -S main.elf > main.lst ======================================================================================== Listing for msp430-elf-gcc main.elf: file format elf32-msp430 Sections: Idx Name Size VMA LMA File off Algn 0 __interrupt_vector_10 00000002 0000fff2 0000fff2 000002a2 2**0 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 __reset_vector 00000002 0000fffe 0000fffe 000002a6 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 2 .rodata 00000000 0000f800 0000f800 000002a8 2**0 CONTENTS, ALLOC, LOAD, DATA 3 .rodata2 00000000 0000f800 0000f800 000002a8 2**0 CONTENTS 4 .text 000001cc 0000f800 0000f800 000000d4 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 5 .data 00000000 00000200 0000f9cc 000002a0 2**0 CONTENTS, ALLOC, LOAD, DATA 6 .bss 0000000a 00000200 0000f9cc 000002a0 2**1 ALLOC 7 .noinit 00000000 0000020a 0000020a 000002a8 2**0 CONTENTS 8 .heap 00000004 0000020a 0000f9cc 000002a2 2**0 ALLOC 9 .MSP430.attributes 00000017 00000000 00000000 000002a8 2**0 CONTENTS, READONLY 10 .comment 00000049 00000000 00000000 000002bf 2**0 CONTENTS, READONLY 11 .debug_aranges 00000020 00000000 00000000 00000308 2**0 CONTENTS, READONLY, DEBUGGING 12 .debug_info 00000c87 00000000 00000000 00000328 2**0 CONTENTS, READONLY, DEBUGGING 13 .debug_abbrev 000001c1 00000000 00000000 00000faf 2**0 CONTENTS, READONLY, DEBUGGING 14 .debug_line 0000026f 00000000 00000000 00001170 2**0 CONTENTS, READONLY, DEBUGGING 15 .debug_frame 000000a0 00000000 00000000 000013e0 2**2 CONTENTS, READONLY, DEBUGGING 16 .debug_str 0000074c 00000000 00000000 00001480 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section __interrupt_vector_10: 0000fff2 <__interrupt_vector_10>: fff2: 8a f8 interrupt service routine at 0xf88a Disassembly of section .text: 0000f800 <__crt0_start>: f800: 31 40 00 03 mov #768, r1 ;#0x0300 0000f804 <__crt0_init_bss>: f804: 3c 40 00 02 mov #512, r12 ;#0x0200 0000f808 <.Loc.74.1>: f808: 0d 43 clr r13 ; 0000f80a <.Loc.75.1>: f80a: 3e 40 0a 00 mov #10, r14 ;#0x000a 0000f80e <.Loc.79.1>: f80e: b0 12 b8 f9 call #63928 ;#0xf9b8 0000f812 <__crt0_call_just_main>: f812: 0c 43 clr r12 ; 0000f814 <.Loc.181.1>: f814: b0 12 18 f8 call #63512 ;#0xf818 0000f818 <main>: #include "twi.c" #include "util.c" void main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop WDT f818: b2 40 80 5a mov #23168, &0x0120 ;#0x5a80 f81c: 20 01 0000f81e <.Loc.87.1>: BCSCTL1 = CALBC1_1MHZ; // Set range f81e: d2 42 ff 10 mov.b &0x10ff,&0x0057 ;0x10ff f822: 57 00 0000f824 <.Loc.88.1>: DCOCTL = CALDCO_1MHZ; // SMCLK = DCO = 1MHz f824: d2 42 fe 10 mov.b &0x10fe,&0x0056 ;0x10fe f828: 56 00 0000f82a <.Loc.90.1>: P1DIR |= TXD | LED; f82a: f2 d0 03 00 bis.b #3, &0x0022 ; f82e: 22 00 0000f830 <.Loc.92.1>: _NOP(); f830: 03 43 nop 0000f832 <.Loc.93.1>: _EINT(); // interrupts enabled f832: 32 d2 eint f834: 03 43 nop 0000f836 <.LBB4>: ****************************************************************************** */ static void put_char(uint8_t databyte) { TXByte = databyte; f836: 7b 40 2b 00 mov.b #43, r11 ;#0x002b 0000f83a <.Loc.62.1>: TXByte |= 0x100; // Add stop bit (= 1) TXByte <<= 1; // Add start bit (= 0) BitCnt = 10; // Load Bit counter, 8 bits + start + stop f83a: 7f 40 0a 00 mov.b #10, r15 ;#0x000a 0000f83e <.Loc.65.1>: P1OUT |= TXD; TACTL = TASSEL_2 + MC_2; // SMCLK, continuous mode f83e: 3e 40 20 02 mov #544, r14 ;#0x0220 0000f842 <.Loc.68.1>: TACCR0 = TAR; // Initialize compare register TACCR0 += Bit_time; // Set time of first bit TACCTL0 = CCIE; // Enable interrupts f842: 7d 40 10 00 mov.b #16, r13 ;#0x0010 0000f846 <.L3>: ****************************************************************************** */ static void put_char(uint8_t databyte) { TXByte = databyte; f846: 82 4b 02 02 mov r11, &0x0202 ; 0000f84a <.Loc.60.1>: TXByte |= 0x100; // Add stop bit (= 1) f84a: b2 d0 00 01 bis #256, &0x0202 ;#0x0100 f84e: 02 02 0000f850 <.Loc.61.1>: TXByte <<= 1; // Add start bit (= 0) f850: 1c 42 02 02 mov &0x0202,r12 ;0x0202 f854: 0c 5c rla r12 ; f856: 82 4c 02 02 mov r12, &0x0202 ; 0000f85a <.Loc.62.1>: BitCnt = 10; // Load Bit counter, 8 bits + start + stop f85a: 82 4f 00 02 mov r15, &0x0200 ; 0000f85e <.Loc.64.1>: P1OUT |= TXD; f85e: e2 d3 21 00 bis.b #2, &0x0021 ;r3 As==10 0000f862 <.Loc.65.1>: TACTL = TASSEL_2 + MC_2; // SMCLK, continuous mode f862: 82 4e 60 01 mov r14, &0x0160 ; 0000f866 <.Loc.66.1>: TACCR0 = TAR; // Initialize compare register f866: 92 42 70 01 mov &0x0170,&0x0172 ;0x0170 f86a: 72 01 0000f86c <.Loc.67.1>: TACCR0 += Bit_time; // Set time of first bit f86c: b2 50 68 00 add #104, &0x0172 ;#0x0068 f870: 72 01 0000f872 <.Loc.68.1>: TACCTL0 = CCIE; // Enable interrupts f872: 82 4d 62 01 mov r13, &0x0162 ; 0000f876 <.L2>: while (TACCTL0 & CCIE ) {}; // Wait for TX completion (by the interrupt) f876: b2 b0 10 00 bit #16, &0x0162 ;#0x0010 f87a: 62 01 f87c: e4 27 jz $-54 ;abs 0xf846 f87e: b2 b0 10 00 bit #16, &0x0162 ;#0x0010 f882: 62 01 f884: f8 23 jnz $-14 ;abs 0xf876 f886: 30 40 46 f8 br #0xf846 ; 0000f88a <TIMER0_A0_ISR>: Handles Tx bit timing. ****************************************************************************** */ void __attribute__ ((interrupt (TIMER0_A0_VECTOR))) TIMER0_A0_ISR(void) { f88a: 0f 12 push r15 ; 0000f88c <.LCFI0>: f88c: 0e 12 push r14 ; 0000f88e <.LCFI1>: f88e: 0d 12 push r13 ; 0000f890 <.LCFI2>: f890: 0c 12 push r12 ; 0000f892 <.LCFI3>: f892: 0b 12 push r11 ; 0000f894 <.LCFI4>: f894: 0a 12 push r10 ; 0000f896 <.LCFI5>: f896: 09 12 push r9 ; 0000f898 <.LCFI6>: f898: 08 12 push r8 ; 0000f89a <.LCFI7>: f89a: 07 12 push r7 ; 0000f89c <.LCFI8>: f89c: 06 12 push r6 ; 0000f89e <.LCFI9>: f89e: 05 12 push r5 ; 0000f8a0 <.LCFI10>: f8a0: 04 12 push r4 ; 0000f8a2 <.LCFI11>: P1OUT &= ~LED; // Turn LED on (start of interrupt) f8a2: d2 c3 21 00 bic.b #1, &0x0021 ;r3 As==01 0000f8a6 <.Loc.118.1>: TACCR0 += Bit_time; // Add Offset to TACCR0 f8a6: b2 50 68 00 add #104, &0x0172 ;#0x0068 f8aa: 72 01 0000f8ac <.Loc.119.1>: if (BitCnt == 0) // If all bits TXed f8ac: 1c 42 00 02 mov &0x0200,r12 ;0x0200 f8b0: 0c 93 cmp #0, r12 ;r3 As==00 f8b2: 20 24 jz $+66 ;abs 0xf8f4 0000f8b4 <.Loc.126.1>: TACTL = TASSEL_2; // SMCLK selected, timer off (for power consumption) TACCTL0 &= ~CCIE ; // Disable interrupt } else { if (TXByte & 0x01) f8b4: 92 b3 02 02 bit #1, &0x0202 ;r3 As==01 f8b8: 19 20 jnz $+52 ;abs 0xf8ec 0000f8ba <.Loc.129.1>: P1OUT |= TXD; else P1OUT &= ~TXD; f8ba: e2 c3 21 00 bic.b #2, &0x0021 ;r3 As==10 0000f8be <.L11>: TXByte >>= 1; f8be: 1c 42 02 02 mov &0x0202,r12 ;0x0202 f8c2: b0 12 3c f9 call #63804 ;#0xf93c f8c6: 82 4c 02 02 mov r12, &0x0202 ; 0000f8ca <.Loc.132.1>: BitCnt--; f8ca: b2 53 00 02 add #-1, &0x0200 ;r3 As==11 0000f8ce <.L9>: } P1OUT |= LED; // Turn LED on (end of interrupt) f8ce: d2 d3 21 00 bis.b #1, &0x0021 ;r3 As==01 0000f8d2 <.Loc.135.1>: } f8d2: 34 41 pop r4 ; f8d4: 35 41 pop r5 ; f8d6: 36 41 pop r6 ; f8d8: 37 41 pop r7 ; f8da: 38 41 pop r8 ; f8dc: 39 41 pop r9 ; f8de: 3a 41 pop r10 ; f8e0: 3b 41 pop r11 ; f8e2: 3c 41 pop r12 ; f8e4: 3d 41 pop r13 ; f8e6: 3e 41 pop r14 ; f8e8: 3f 41 pop r15 ; f8ea: 00 13 reti 0000f8ec <.L13>: TACCTL0 &= ~CCIE ; // Disable interrupt } else { if (TXByte & 0x01) P1OUT |= TXD; f8ec: e2 d3 21 00 bis.b #2, &0x0021 ;r3 As==10 f8f0: 30 40 be f8 br #0xf8be ; 0000f8f4 <.L12>: { P1OUT &= ~LED; // Turn LED on (start of interrupt) TACCR0 += Bit_time; // Add Offset to TACCR0 if (BitCnt == 0) // If all bits TXed { TACTL = TASSEL_2; // SMCLK selected, timer off (for power consumption) f8f4: b2 40 00 02 mov #512, &0x0160 ;#0x0200 f8f8: 60 01 0000f8fa <.Loc.122.1>: TACCTL0 &= ~CCIE ; // Disable interrupt f8fa: b2 f0 ef ff and #65519, &0x0162 ;#0xffef f8fe: 62 01 f900: 30 40 ce f8 br #0xf8ce ; 0000f904 <__mspabi_srli_15>: f904: 12 c3 clrc f906: 0c 10 rrc r12 ; 0000f908 <__mspabi_srli_14>: f908: 12 c3 clrc f90a: 0c 10 rrc r12 ; 0000f90c <__mspabi_srli_13>: f90c: 12 c3 clrc f90e: 0c 10 rrc r12 ; 0000f910 <__mspabi_srli_12>: f910: 12 c3 clrc f912: 0c 10 rrc r12 ; 0000f914 <__mspabi_srli_11>: f914: 12 c3 clrc f916: 0c 10 rrc r12 ; 0000f918 <__mspabi_srli_10>: f918: 12 c3 clrc f91a: 0c 10 rrc r12 ; 0000f91c <__mspabi_srli_9>: f91c: 12 c3 clrc f91e: 0c 10 rrc r12 ; 0000f920 <__mspabi_srli_8>: f920: 12 c3 clrc f922: 0c 10 rrc r12 ; 0000f924 <__mspabi_srli_7>: f924: 12 c3 clrc f926: 0c 10 rrc r12 ; 0000f928 <__mspabi_srli_6>: f928: 12 c3 clrc f92a: 0c 10 rrc r12 ; 0000f92c <__mspabi_srli_5>: f92c: 12 c3 clrc f92e: 0c 10 rrc r12 ; 0000f930 <__mspabi_srli_4>: f930: 12 c3 clrc f932: 0c 10 rrc r12 ; 0000f934 <__mspabi_srli_3>: f934: 12 c3 clrc f936: 0c 10 rrc r12 ; 0000f938 <__mspabi_srli_2>: f938: 12 c3 clrc f93a: 0c 10 rrc r12 ; 0000f93c <__mspabi_srli_1>: f93c: 12 c3 clrc f93e: 0c 10 rrc r12 ; f940: 30 41 ret 0000f942 <.L11>: f942: 3d 53 add #-1, r13 ;r3 As==11 f944: 12 c3 clrc f946: 0c 10 rrc r12 ; 0000f948 <__mspabi_srli>: f948: 0d 93 cmp #0, r13 ;r3 As==00 f94a: fb 23 jnz $-8 ;abs 0xf942 f94c: 30 41 ret 0000f94e <__mspabi_srll_15>: f94e: 12 c3 clrc f950: 0d 10 rrc r13 ; f952: 0c 10 rrc r12 ; 0000f954 <__mspabi_srll_14>: f954: 12 c3 clrc f956: 0d 10 rrc r13 ; f958: 0c 10 rrc r12 ; 0000f95a <__mspabi_srll_13>: f95a: 12 c3 clrc f95c: 0d 10 rrc r13 ; f95e: 0c 10 rrc r12 ; 0000f960 <__mspabi_srll_12>: f960: 12 c3 clrc f962: 0d 10 rrc r13 ; f964: 0c 10 rrc r12 ; 0000f966 <__mspabi_srll_11>: f966: 12 c3 clrc f968: 0d 10 rrc r13 ; f96a: 0c 10 rrc r12 ; 0000f96c <__mspabi_srll_10>: f96c: 12 c3 clrc f96e: 0d 10 rrc r13 ; f970: 0c 10 rrc r12 ; 0000f972 <__mspabi_srll_9>: f972: 12 c3 clrc f974: 0d 10 rrc r13 ; f976: 0c 10 rrc r12 ; 0000f978 <__mspabi_srll_8>: f978: 12 c3 clrc f97a: 0d 10 rrc r13 ; f97c: 0c 10 rrc r12 ; 0000f97e <__mspabi_srll_7>: f97e: 12 c3 clrc f980: 0d 10 rrc r13 ; f982: 0c 10 rrc r12 ; 0000f984 <__mspabi_srll_6>: f984: 12 c3 clrc f986: 0d 10 rrc r13 ; f988: 0c 10 rrc r12 ; 0000f98a <__mspabi_srll_5>: f98a: 12 c3 clrc f98c: 0d 10 rrc r13 ; f98e: 0c 10 rrc r12 ; 0000f990 <__mspabi_srll_4>: f990: 12 c3 clrc f992: 0d 10 rrc r13 ; f994: 0c 10 rrc r12 ; 0000f996 <__mspabi_srll_3>: f996: 12 c3 clrc f998: 0d 10 rrc r13 ; f99a: 0c 10 rrc r12 ; 0000f99c <__mspabi_srll_2>: f99c: 12 c3 clrc f99e: 0d 10 rrc r13 ; f9a0: 0c 10 rrc r12 ; 0000f9a2 <__mspabi_srll_1>: f9a2: 12 c3 clrc f9a4: 0d 10 rrc r13 ; f9a6: 0c 10 rrc r12 ; f9a8: 30 41 ret 0000f9aa <.L12>: f9aa: 3e 53 add #-1, r14 ;r3 As==11 f9ac: 12 c3 clrc f9ae: 0d 10 rrc r13 ; f9b0: 0c 10 rrc r12 ; 0000f9b2 <__mspabi_srll>: f9b2: 0e 93 cmp #0, r14 ;r3 As==00 f9b4: fa 23 jnz $-10 ;abs 0xf9aa f9b6: 30 41 ret 0000f9b8 <memset>: f9b8: 0f 4c mov r12, r15 ; f9ba: 0e 5c add r12, r14 ; 0000f9bc <.L2>: f9bc: 0f 9e cmp r14, r15 ; f9be: 01 20 jnz $+4 ;abs 0xf9c2 0000f9c0 <.Loc.104.1>: f9c0: 30 41 ret 0000f9c2 <.L3>: f9c2: cf 4d 00 00 mov.b r13, 0(r15) ; f9c6: 1f 53 inc r15 ; 0000f9c8 <.LVL4>: f9c8: 30 40 bc f9 br #0xf9bc ; ======================================================================================== Listing for 'old' mspgcc. main.elf: file format elf32-msp430 Sections: Idx Name Size VMA LMA File off Algn 0 .text 000000fa 0000f800 0000f800 000000b4 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .bss 0000000a 00000200 0000f8fa 000001ae 2**1 ALLOC 2 .noinit 00000002 0000020a 0000f8fa 000001ae 2**1 ALLOC 3 .vectors 00000020 0000ffe0 0000ffe0 000001ae 2**0 CONTENTS, ALLOC, LOAD, READONLY, CODE 4 .comment 00000030 00000000 00000000 000001ce 2**0 CONTENTS, READONLY 5 .debug_aranges 000000a4 00000000 00000000 00000200 2**2 CONTENTS, READONLY, DEBUGGING 6 .debug_info 000005d2 00000000 00000000 000002a4 2**0 CONTENTS, READONLY, DEBUGGING 7 .debug_abbrev 00000169 00000000 00000000 00000876 2**0 CONTENTS, READONLY, DEBUGGING 8 .debug_line 00000340 00000000 00000000 000009df 2**0 CONTENTS, READONLY, DEBUGGING 9 .debug_frame 00000030 00000000 00000000 00000d20 2**1 CONTENTS, READONLY, DEBUGGING 10 .debug_str 000001a1 00000000 00000000 00000d50 2**0 CONTENTS, READONLY, DEBUGGING 11 .debug_loc 00000014 00000000 00000000 00000ef1 2**0 CONTENTS, READONLY, DEBUGGING 12 .debug_ranges 0000000c 00000000 00000000 00000f05 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 0000f800 <__watchdog_support>: f800: 55 42 20 01 mov.b &0x0120,r5 f804: 35 d0 08 5a bis #23048, r5 ;#0x5a08 f808: 82 45 0a 02 mov r5, &0x020a 0000f80c <__init_stack>: f80c: 31 40 00 03 mov #768, r1 ;#0x0300 0000f810 <__do_copy_data>: f810: 3f 40 00 00 mov #0, r15 ;#0x0000 f814: 0f 93 tst r15 f816: 08 24 jz $+18 ;abs 0xf828 f818: 92 42 0a 02 mov &0x020a,&0x0120 f81c: 20 01 f81e: 2f 83 decd r15 f820: 9f 4f fa f8 mov -1798(r15),512(r15);0xf8fa(r15), 0x0200(r15) f824: 00 02 f826: f8 23 jnz $-14 ;abs 0xf818 0000f828 <__do_clear_bss>: f828: 3f 40 0a 00 mov #10, r15 ;#0x000a f82c: 0f 93 tst r15 f82e: 07 24 jz $+16 ;abs 0xf83e f830: 92 42 0a 02 mov &0x020a,&0x0120 f834: 20 01 f836: 1f 83 dec r15 f838: cf 43 00 02 mov.b #0, 512(r15);r3 As==00, 0x0200(r15) f83c: f9 23 jnz $-12 ;abs 0xf830 0000f83e <main>: #include "twi.c" #include "util.c" void main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop WDT f83e: b2 40 80 5a mov #23168, &0x0120 ;#0x5a80 f842: 20 01 BCSCTL1 = CALBC1_1MHZ; // Set range f844: d2 42 ff 10 mov.b &0x10ff,&0x0057 f848: 57 00 DCOCTL = CALDCO_1MHZ; // SMCLK = DCO = 1MHz f84a: d2 42 fe 10 mov.b &0x10fe,&0x0056 f84e: 56 00 P1DIR |= TXD | LED; f850: f2 d0 03 00 bis.b #3, &0x0022 ;#0x0003 f854: 22 00 _NOP(); f856: 03 43 nop _EINT(); // interrupts enabled f858: 32 d2 eint ****************************************************************************** */ static void put_char(uint8_t databyte) { TXByte = databyte; f85a: b2 40 2b 00 mov #43, &0x0202 ;#0x002b f85e: 02 02 TXByte |= 0x100; // Add stop bit (= 1) f860: b2 d0 00 01 bis #256, &0x0202 ;#0x0100 f864: 02 02 TXByte <<= 1; // Add start bit (= 0) f866: 1f 42 02 02 mov &0x0202,r15 f86a: 0f 5f rla r15 f86c: 82 4f 02 02 mov r15, &0x0202 BitCnt = 10; // Load Bit counter, 8 bits + start + stop f870: b2 40 0a 00 mov #10, &0x0200 ;#0x000a f874: 00 02 P1OUT |= TXD; f876: e2 d3 21 00 bis.b #2, &0x0021 ;r3 As==10 TACTL = TASSEL_2 + MC_2; // SMCLK, continuous mode f87a: b2 40 20 02 mov #544, &0x0160 ;#0x0220 f87e: 60 01 TACCR0 = TAR; // Initialize compare register f880: 92 42 70 01 mov &0x0170,&0x0172 f884: 72 01 TACCR0 += Bit_time; // Set time of first bit f886: b2 50 68 00 add #104, &0x0172 ;#0x0068 f88a: 72 01 TACCTL0 = CCIE; // Enable interrupts f88c: b2 40 10 00 mov #16, &0x0162 ;#0x0010 f890: 62 01 while (TACCTL0 & CCIE ) {}; // Wait for TX completion (by the interrupt) f892: b2 b0 10 00 bit #16, &0x0162 ;#0x0010 f896: 62 01 f898: fc 23 jnz $-6 ;abs 0xf892 f89a: df 3f jmp $-64 ;abs 0xf85a 0000f89c <__stop_progExec__>: f89c: 32 d0 f0 00 bis #240, r2 ;#0x00f0 f8a0: fd 3f jmp $-4 ;abs 0xf89c 0000f8a2 <__ctors_end>: f8a2: 30 40 f8 f8 br #0xf8f8 0000f8a6 <TIMER0_A0_ISR>: Handles Tx bit timing. ****************************************************************************** */ interrupt (TIMER0_A0_VECTOR) TIMER0_A0_ISR(void) { f8a6: 0f 12 push r15 P1OUT &= ~LED; // Turn LED on (start of interrupt) f8a8: d2 c3 21 00 bic.b #1, &0x0021 ;r3 As==01 TACCR0 += Bit_time; // Add Offset to TACCR0 f8ac: b2 50 68 00 add #104, &0x0172 ;#0x0068 f8b0: 72 01 if (BitCnt == 0) // If all bits TXed f8b2: 1f 42 00 02 mov &0x0200,r15 f8b6: 0f 93 tst r15 f8b8: 07 20 jnz $+16 ;abs 0xf8c8 { TACTL = TASSEL_2; // SMCLK selected, timer off (for power consumption) f8ba: b2 40 00 02 mov #512, &0x0160 ;#0x0200 f8be: 60 01 TACCTL0 &= ~CCIE ; // Disable interrupt f8c0: b2 f0 ef ff and #-17, &0x0162 ;#0xffef f8c4: 62 01 f8c6: 14 3c jmp $+42 ;abs 0xf8f0 } else { if (TXByte & 0x01) f8c8: 92 b3 02 02 bit #1, &0x0202 ;r3 As==01 f8cc: 04 24 jz $+10 ;abs 0xf8d6 P1OUT |= TXD; f8ce: 5f 42 21 00 mov.b &0x0021,r15 f8d2: 6f d3 bis.b #2, r15 ;r3 As==10 f8d4: 03 3c jmp $+8 ;abs 0xf8dc else P1OUT &= ~TXD; f8d6: 5f 42 21 00 mov.b &0x0021,r15 f8da: 6f c3 bic.b #2, r15 ;r3 As==10 f8dc: c2 4f 21 00 mov.b r15, &0x0021 TXByte >>= 1; f8e0: 1f 42 02 02 mov &0x0202,r15 f8e4: 12 c3 clrc f8e6: 0f 10 rrc r15 f8e8: 82 4f 02 02 mov r15, &0x0202 BitCnt--; f8ec: b2 53 00 02 add #-1, &0x0200 ;r3 As==11 } P1OUT |= LED; // Turn LED on (end of interrupt) f8f0: d2 d3 21 00 bis.b #1, &0x0021 ;r3 As==01 } f8f4: 3f 41 pop r15 f8f6: 00 13 reti 0000f8f8 <_unexpected_>: f8f8: 00 13 reti Disassembly of section .vectors: 0000ffe0 <__ivtbl_16>: ffe0: a2 f8 a2 f8 a2 f8 a2 f8 a2 f8 a2 f8 a2 f8 a2 f8 ................ fff0: a2 f8 a6 f8 a2 f8 a2 f8 a2 f8 a2 f8 a2 f8 00 f8 ................ ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users