]> code.bitgloo.com Git - bitgloo/alee-forth.git/commitdiff
msp430 impl targets msp430fr2476
authorClyne Sullivan <clyne@bitgloo.com>
Thu, 2 Nov 2023 12:17:07 +0000 (08:17 -0400)
committerClyne Sullivan <clyne@bitgloo.com>
Thu, 2 Nov 2023 12:17:07 +0000 (08:17 -0400)
Makefile
forth/msp430.fth
msp430/alee-msp430.cpp
msp430/msp430fr2476.ld [new file with mode: 0644]
msp430/msp430g2553.ld [deleted file]

index e54b3fba47657a2ec3d862682114e9d932cf4b14..beaea6b70529002fbbd1920b7926fe8d9da6b2c5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -12,10 +12,10 @@ all: alee
 
 msp430: CXX := msp430-elf-g++
 msp430: AR := msp430-elf-gcc-ar
-msp430: CXXFLAGS += -I.
-msp430: CXXFLAGS += -Os -mmcu=msp430g2553 -ffunction-sections -fdata-sections
-msp430: CXXFLAGS += -DMEMDICTSIZE=128 -flto -fno-asynchronous-unwind-tables -fno-threadsafe-statics -fno-stack-protector
-msp430: LDFLAGS += -L/usr/msp430-elf/usr/include -Tmsp430/msp430g2553.ld -Wl,-gc-sections
+msp430: CXXFLAGS += -I. -I/usr/msp430-elf/usr/include
+msp430: CXXFLAGS += -Os -mmcu=msp430fr2476 -ffunction-sections -fdata-sections
+msp430: CXXFLAGS += -DMEMDICTSIZE=1024 -flto -fno-asynchronous-unwind-tables -fno-threadsafe-statics -fno-stack-protector
+msp430: LDFLAGS += -L/usr/msp430-elf/usr/include -Tmsp430/msp430fr2476.ld -Wl,-gc-sections
 msp430: clean-lib msp430/alee-msp430
 
 msp430-prep: STANDALONE += forth/msp430.fth
index 1497e04269aea279bb2187747d1710e64e0c261c..9ba88bfe9250147fe1a9627c906b1aee332c835e 100644 (file)
 
 16 base !
 
-: ie1              0000 ;
-: ifg1             0002 ;
-: ie2              0001 ;
-: ifg2             0003 ;
-: adc10dtc0        0048 ;
-: adc10dtc1        0049 ;
-: adc10ae0         004a ;
-: adc10ctl0        01b0 ;
-: adc10ctl1        01b2 ;
-: adc10mem         01b4 ;
-: adc10sa          01bc ;
-: dcoctl           0056 ;
-: bcsctl1          0057 ;
-: bcsctl2          0058 ;
-: bcsctl3          0053 ;
-: cactl1           0059 ;
-: cactl2           005a ;
-: capd             005b ;
-: fctl1            0128 ;
-: fctl2            012a ;
-: fctl3            012c ;
-: p1in             0020 ;
-: p1out            0021 ;
-: p1dir            0022 ;
-: p1ifg            0023 ;
-: p1ies            0024 ;
-: p1ie             0025 ;
-: p1sel            0026 ;
-: p1sel2           0041 ;
-: p1ren            0027 ;
-: p2in             0028 ;
-: p2out            0029 ;
-: p2dir            002a ;
-: p2ifg            002b ;
-: p2ies            002c ;
-: p2ie             002d ;
-: p2sel            002e ;
-: p2sel2           0042 ;
-: p2ren            002f ;
-: p3in             0018 ;
-: p3out            0019 ;
-: p3dir            001a ;
-: p3sel            001b ;
-: p3sel2           0043 ;
-: p3ren            0010 ;
-: ta0iv            012e ;
-: ta0ctl           0160 ;
-: ta0cctl0         0162 ;
-: ta0cctl1         0164 ;
-: ta0cctl2         0166 ;
-: ta0r             0170 ;
-: ta0ccr0          0172 ;
-: ta0ccr1          0174 ;
-: ta0ccr2          0176 ;
-: ta1iv            011e ;
-: ta1ctl           0180 ;
-: ta1cctl0         0182 ;
-: ta1cctl1         0184 ;
-: ta1cctl2         0186 ;
-: ta1r             0190 ;
-: ta1ccr0          0192 ;
-: ta1ccr1          0194 ;
-: ta1ccr2          0196 ;
-: uca0ctl0         0060 ;
-: uca0ctl1         0061 ;
-: uca0br0          0062 ;
-: uca0br1          0063 ;
-: uca0mctl         0064 ;
-: uca0stat         0065 ;
-: uca0rxbuf        0066 ;
-: uca0txbuf        0067 ;
-: uca0abctl        005d ;
-: uca0irtctl       005e ;
-: uca0irrctl       005f ;
-: ucb0ctl0         0068 ;
-: ucb0ctl1         0069 ;
-: ucb0br0          006a ;
-: ucb0br1          006b ;
-: ucb0i2cie        006c ;
-: ucb0stat         006d ;
-: ucb0rxbuf        006e ;
-: ucb0txbuf        006f ;
-: ucb0i2coa        0118 ;
-: ucb0i2csa        011a ;
-: wdtctl           0120 ;
-: caldco_16mhz     10f8 ;
-: calbc1_16mhz     10f9 ;
-: caldco_12mhz     10fa ;
-: calbc1_12mhz     10fb ;
-: caldco_8mhz      10fc ;
-: calbc1_8mhz      10fd ;
-: caldco_1mhz      10fe ;
-: calbc1_1mhz      10ff ;
-: tlv_checksum     10c0 ;
-: tlv_dco_30_tag   10f6 ;
-: tlv_dco_30_len   10f7 ;
-: tlv_adc10_1_tag  10da ;
-: tlv_adc10_1_len  10db ;
+: ADCCTL0            0700 ;
+: ADCCTL0_L          0700 ;
+: ADCCTL0_H          0701 ;
+: ADCCTL1            0702 ;
+: ADCCTL1_L          0702 ;
+: ADCCTL1_H          0703 ;
+: ADCCTL2            0704 ;
+: ADCCTL2_L          0704 ;
+: ADCCTL2_H          0705 ;
+: ADCLO              0706 ;
+: ADCLO_L            0706 ;
+: ADCLO_H            0707 ;
+: ADCHI              0708 ;
+: ADCHI_L            0708 ;
+: ADCHI_H            0709 ;
+: ADCMCTL0           070A ;
+: ADCMCTL0_L         070A ;
+: ADCMCTL0_H         070B ;
+: ADCMEM0            0712 ;
+: ADCMEM0_L          0712 ;
+: ADCMEM0_H          0713 ;
+: ADCIE              071A ;
+: ADCIE_L            071A ;
+: ADCIE_H            071B ;
+: ADCIFG             071C ;
+: ADCIFG_L           071C ;
+: ADCIFG_H           071D ;
+: ADCIV              071E ;
+: ADCIV_L            071E ;
+: ADCIV_H            071F ;
+: BAKMEM0            0660 ;
+: BAKMEM0_L          0660 ;
+: BAKMEM0_H          0661 ;
+: BAKMEM1            0662 ;
+: BAKMEM1_L          0662 ;
+: BAKMEM1_H          0663 ;
+: BAKMEM2            0664 ;
+: BAKMEM2_L          0664 ;
+: BAKMEM2_H          0665 ;
+: BAKMEM3            0666 ;
+: BAKMEM3_L          0666 ;
+: BAKMEM3_H          0667 ;
+: BAKMEM4            0668 ;
+: BAKMEM4_L          0668 ;
+: BAKMEM4_H          0669 ;
+: BAKMEM5            066A ;
+: BAKMEM5_L          066A ;
+: BAKMEM5_H          066B ;
+: BAKMEM6            066C ;
+: BAKMEM6_L          066C ;
+: BAKMEM6_H          066D ;
+: BAKMEM7            066E ;
+: BAKMEM7_L          066E ;
+: BAKMEM7_H          066F ;
+: BAKMEM8            0670 ;
+: BAKMEM8_L          0670 ;
+: BAKMEM8_H          0671 ;
+: BAKMEM9            0672 ;
+: BAKMEM9_L          0672 ;
+: BAKMEM9_H          0673 ;
+: BAKMEM10           0674 ;
+: BAKMEM10_L         0674 ;
+: BAKMEM10_H         0675 ;
+: BAKMEM11           0676 ;
+: BAKMEM11_L         0676 ;
+: BAKMEM11_H         0677 ;
+: BAKMEM12           0678 ;
+: BAKMEM12_L         0678 ;
+: BAKMEM12_H         0679 ;
+: BAKMEM13           067A ;
+: BAKMEM13_L         067A ;
+: BAKMEM13_H         067B ;
+: BAKMEM14           067C ;
+: BAKMEM14_L         067C ;
+: BAKMEM14_H         067D ;
+: BAKMEM15           067E ;
+: BAKMEM15_L         067E ;
+: BAKMEM15_H         067F ;
+: CRCDI              01C0 ;
+: CRCDI_L            01C0 ;
+: CRCDI_H            01C1 ;
+: CRCDIRB            01C2 ;
+: CRCDIRB_L          01C2 ;
+: CRCDIRB_H          01C3 ;
+: CRCINIRES          01C4 ;
+: CRCINIRES_L        01C4 ;
+: CRCINIRES_H        01C5 ;
+: CRCRESR            01C6 ;
+: CRCRESR_L          01C6 ;
+: CRCRESR_H          01C7 ;
+: CSCTL0             0180 ;
+: CSCTL0_L           0180 ;
+: CSCTL0_H           0181 ;
+: CSCTL1             0182 ;
+: CSCTL1_L           0182 ;
+: CSCTL1_H           0183 ;
+: CSCTL2             0184 ;
+: CSCTL2_L           0184 ;
+: CSCTL2_H           0185 ;
+: CSCTL3             0186 ;
+: CSCTL3_L           0186 ;
+: CSCTL3_H           0187 ;
+: CSCTL4             0188 ;
+: CSCTL4_L           0188 ;
+: CSCTL4_H           0189 ;
+: CSCTL5             018A ;
+: CSCTL5_L           018A ;
+: CSCTL5_H           018B ;
+: CSCTL6             018C ;
+: CSCTL6_L           018C ;
+: CSCTL6_H           018D ;
+: CSCTL7             018E ;
+: CSCTL7_L           018E ;
+: CSCTL7_H           018F ;
+: CSCTL8             0190 ;
+: CSCTL8_L           0190 ;
+: CSCTL8_H           0191 ;
+: PAIN               0200 ;
+: PAIN_L             0200 ;
+: PAIN_H             0201 ;
+: PAOUT              0202 ;
+: PAOUT_L            0202 ;
+: PAOUT_H            0203 ;
+: PADIR              0204 ;
+: PADIR_L            0204 ;
+: PADIR_H            0205 ;
+: PAREN              0206 ;
+: PAREN_L            0206 ;
+: PAREN_H            0207 ;
+: PASEL0             020A ;
+: PASEL0_L           020A ;
+: PASEL0_H           020B ;
+: PASEL1             020C ;
+: PASEL1_L           020C ;
+: PASEL1_H           020D ;
+: P1IV               020E ;
+: P1IV_L             020E ;
+: P1IV_H             020F ;
+: PASELC             0216 ;
+: PASELC_L           0216 ;
+: PASELC_H           0217 ;
+: PAIES              0218 ;
+: PAIES_L            0218 ;
+: PAIES_H            0219 ;
+: PAIE               021A ;
+: PAIE_L             021A ;
+: PAIE_H             021B ;
+: PAIFG              021C ;
+: PAIFG_L            021C ;
+: PAIFG_H            021D ;
+: P2IV               021E ;
+: P2IV_L             021E ;
+: P2IV_H             021F ;
+: PBIN               0220 ;
+: PBIN_L             0220 ;
+: PBIN_H             0221 ;
+: PBOUT              0222 ;
+: PBOUT_L            0222 ;
+: PBOUT_H            0223 ;
+: PBDIR              0224 ;
+: PBDIR_L            0224 ;
+: PBDIR_H            0225 ;
+: PBREN              0226 ;
+: PBREN_L            0226 ;
+: PBREN_H            0227 ;
+: PBSEL0             022A ;
+: PBSEL0_L           022A ;
+: PBSEL0_H           022B ;
+: PBSEL1             022C ;
+: PBSEL1_L           022C ;
+: PBSEL1_H           022D ;
+: P3IV               022E ;
+: P3IV_L             022E ;
+: P3IV_H             022F ;
+: PBSELC             0236 ;
+: PBSELC_L           0236 ;
+: PBSELC_H           0237 ;
+: PBIES              0238 ;
+: PBIES_L            0238 ;
+: PBIES_H            0239 ;
+: PBIE               023A ;
+: PBIE_L             023A ;
+: PBIE_H             023B ;
+: PBIFG              023C ;
+: PBIFG_L            023C ;
+: PBIFG_H            023D ;
+: P4IV               023E ;
+: P4IV_L             023E ;
+: P4IV_H             023F ;
+: PCIN               0240 ;
+: PCIN_L             0240 ;
+: PCIN_H             0241 ;
+: PCOUT              0242 ;
+: PCOUT_L            0242 ;
+: PCOUT_H            0243 ;
+: PCDIR              0244 ;
+: PCDIR_L            0244 ;
+: PCDIR_H            0245 ;
+: PCREN              0246 ;
+: PCREN_L            0246 ;
+: PCREN_H            0247 ;
+: PCSEL0             024A ;
+: PCSEL0_L           024A ;
+: PCSEL0_H           024B ;
+: PCSEL1             024C ;
+: PCSEL1_L           024C ;
+: PCSEL1_H           024D ;
+: P5IV               024E ;
+: P5IV_L             024E ;
+: P5IV_H             024F ;
+: PCSELC             0256 ;
+: PCSELC_L           0256 ;
+: PCSELC_H           0257 ;
+: PCIES              0258 ;
+: PCIES_L            0258 ;
+: PCIES_H            0259 ;
+: PCIE               025A ;
+: PCIE_L             025A ;
+: PCIE_H             025B ;
+: PCIFG              025C ;
+: PCIFG_L            025C ;
+: PCIFG_H            025D ;
+: P6IV               025E ;
+: P6IV_L             025E ;
+: P6IV_H             025F ;
+: PJIN               0320 ;
+: PJIN_L             0320 ;
+: PJIN_H             0321 ;
+: PJOUT              0322 ;
+: PJOUT_L            0322 ;
+: PJOUT_H            0323 ;
+: PJDIR              0324 ;
+: PJDIR_L            0324 ;
+: PJDIR_H            0325 ;
+: PJREN              0326 ;
+: PJREN_L            0326 ;
+: PJREN_H            0327 ;
+: PJSEL0             032A ;
+: PJSEL0_L           032A ;
+: PJSEL0_H           032B ;
+: PJSEL1             032C ;
+: PJSEL1_L           032C ;
+: PJSEL1_H           032D ;
+: PJSELC             0336 ;
+: PJSELC_L           0336 ;
+: PJSELC_H           0337 ;
+: P1IN               0200 ;
+: P2IN               0201 ;
+: P2OUT              0203 ;
+: P1OUT              0202 ;
+: P1DIR              0204 ;
+: P2DIR              0205 ;
+: P1REN              0206 ;
+: P2REN              0207 ;
+: P1SEL0             020A ;
+: P2SEL0             020B ;
+: P1SEL1             020C ;
+: P2SEL1             020D ;
+: P1SELC             0216 ;
+: P2SELC             0217 ;
+: P1IES              0218 ;
+: P2IES              0219 ;
+: P1IE               021A ;
+: P2IE               021B ;
+: P1IFG              021C ;
+: P2IFG              021D ;
+: P3IN               0220 ;
+: P4IN               0221 ;
+: P3OUT              0222 ;
+: P4OUT              0223 ;
+: P3DIR              0224 ;
+: P4DIR              0225 ;
+: P3REN              0226 ;
+: P4REN              0227 ;
+: P4SEL0             022B ;
+: P3SEL0             022A ;
+: P3SEL1             022C ;
+: P4SEL1             022D ;
+: P3SELC             0236 ;
+: P4SELC             0237 ;
+: P3IES              0238 ;
+: P4IES              0239 ;
+: P3IE               023A ;
+: P4IE               023B ;
+: P3IFG              023C ;
+: P4IFG              023D ;
+: P5IN               0240 ;
+: P6IN               0241 ;
+: P5OUT              0242 ;
+: P6OUT              0243 ;
+: P5DIR              0244 ;
+: P6DIR              0245 ;
+: P5REN              0246 ;
+: P6REN              0247 ;
+: P5SEL0             024A ;
+: P6SEL0             024B ;
+: P5SEL1             024C ;
+: P6SEL1             024D ;
+: P5SELC             0256 ;
+: P6SELC             0257 ;
+: P5IES              0258 ;
+: P6IES              0259 ;
+: P5IE               025A ;
+: P6IE               025B ;
+: P5IFG              025C ;
+: P6IFG              025D ;
+: FRCTL0             01A0 ;
+: FRCTL0_L           01A0 ;
+: FRCTL0_H           01A1 ;
+: GCCTL0             01A4 ;
+: GCCTL0_L           01A4 ;
+: GCCTL0_H           01A5 ;
+: GCCTL1             01A6 ;
+: GCCTL1_L           01A6 ;
+: GCCTL1_H           01A7 ;
+: MPY                04C0 ;
+: MPY_L              04C0 ;
+: MPY_H              04C1 ;
+: MPYS               04C2 ;
+: MPYS_L             04C2 ;
+: MPYS_H             04C3 ;
+: MAC                04C4 ;
+: MAC_L              04C4 ;
+: MAC_H              04C5 ;
+: MACS               04C6 ;
+: MACS_L             04C6 ;
+: MACS_H             04C7 ;
+: OP2                04C8 ;
+: OP2_L              04C8 ;
+: OP2_H              04C9 ;
+: RESLO              04CA ;
+: RESLO_L            04CA ;
+: RESLO_H            04CB ;
+: RESHI              04CC ;
+: RESHI_L            04CC ;
+: RESHI_H            04CD ;
+: SUMEXT             04CE ;
+: SUMEXT_L           04CE ;
+: SUMEXT_H           04CF ;
+: MPY32L             04D0 ;
+: MPY32L_L           04D0 ;
+: MPY32L_H           04D1 ;
+: MPY32H             04D2 ;
+: MPY32H_L           04D2 ;
+: MPY32H_H           04D3 ;
+: MPYS32L            04D4 ;
+: MPYS32L_L          04D4 ;
+: MPYS32L_H          04D5 ;
+: MPYS32H            04D6 ;
+: MPYS32H_L          04D6 ;
+: MPYS32H_H          04D7 ;
+: MAC32L             04D8 ;
+: MAC32L_L           04D8 ;
+: MAC32L_H           04D9 ;
+: MAC32H             04DA ;
+: MAC32H_L           04DA ;
+: MAC32H_H           04DB ;
+: MACS32L            04DC ;
+: MACS32L_L          04DC ;
+: MACS32L_H          04DD ;
+: MACS32H            04DE ;
+: MACS32H_L          04DE ;
+: MACS32H_H          04DF ;
+: OP2L               04E0 ;
+: OP2L_L             04E0 ;
+: OP2L_H             04E1 ;
+: OP2H               04E2 ;
+: OP2H_L             04E2 ;
+: OP2H_H             04E3 ;
+: RES0               04E4 ;
+: RES0_L             04E4 ;
+: RES0_H             04E5 ;
+: RES1               04E6 ;
+: RES1_L             04E6 ;
+: RES1_H             04E7 ;
+: RES2               04E8 ;
+: RES2_L             04E8 ;
+: RES2_H             04E9 ;
+: RES3               04EA ;
+: RES3_L             04EA ;
+: RES3_H             04EB ;
+: MPY32CTL0          04EC ;
+: MPY32CTL0_L        04EC ;
+: MPY32CTL0_H        04ED ;
+: PMMCTL0            0120 ;
+: PMMCTL0_L          0120 ;
+: PMMCTL0_H          0121 ;
+: PMMCTL1            0122 ;
+: PMMCTL1_L          0122 ;
+: PMMCTL1_H          0123 ;
+: PMMCTL2            0124 ;
+: PMMCTL2_L          0124 ;
+: PMMCTL2_H          0125 ;
+: PMMIFG             012A ;
+: PMMIFG_L           012A ;
+: PMMIFG_H           012B ;
+: PM5CTL0            0130 ;
+: PM5CTL0_L          0130 ;
+: PM5CTL0_H          0131 ;
+: RTCCTL             0300 ;
+: RTCCTL_L           0300 ;
+: RTCCTL_H           0301 ;
+: RTCIV              0304 ;
+: RTCIV_L            0304 ;
+: RTCIV_H            0305 ;
+: RTCMOD             0308 ;
+: RTCMOD_L           0308 ;
+: RTCMOD_H           0309 ;
+: RTCCNT             030C ;
+: RTCCNT_L           030C ;
+: RTCCNT_H           030D ;
+: SFRIE1             0100 ;
+: SFRIE1_L           0100 ;
+: SFRIE1_H           0101 ;
+: SFRIFG1            0102 ;
+: SFRIFG1_L          0102 ;
+: SFRIFG1_H          0103 ;
+: SFRRPCR            0104 ;
+: SFRRPCR_L          0104 ;
+: SFRRPCR_H          0105 ;
+: SYSCTL             0140 ;
+: SYSCTL_L           0140 ;
+: SYSCTL_H           0141 ;
+: SYSBSLC            0142 ;
+: SYSBSLC_L          0142 ;
+: SYSBSLC_H          0143 ;
+: SYSJMBC            0146 ;
+: SYSJMBC_L          0146 ;
+: SYSJMBC_H          0147 ;
+: SYSJMBI0           0148 ;
+: SYSJMBI0_L         0148 ;
+: SYSJMBI0_H         0149 ;
+: SYSJMBI1           014A ;
+: SYSJMBI1_L         014A ;
+: SYSJMBI1_H         014B ;
+: SYSJMBO0           014C ;
+: SYSJMBO0_L         014C ;
+: SYSJMBO0_H         014D ;
+: SYSJMBO1           014E ;
+: SYSJMBO1_L         014E ;
+: SYSJMBO1_H         014F ;
+: SYSUNIV            015A ;
+: SYSUNIV_L          015A ;
+: SYSUNIV_H          015B ;
+: SYSSNIV            015C ;
+: SYSSNIV_L          015C ;
+: SYSSNIV_H          015D ;
+: SYSRSTIV           015E ;
+: SYSRSTIV_L         015E ;
+: SYSRSTIV_H         015F ;
+: SYSCFG0            0160 ;
+: SYSCFG0_L          0160 ;
+: SYSCFG0_H          0161 ;
+: SYSCFG1            0162 ;
+: SYSCFG1_L          0162 ;
+: SYSCFG1_H          0163 ;
+: SYSCFG2            0164 ;
+: SYSCFG2_L          0164 ;
+: SYSCFG2_H          0165 ;
+: SYSCFG3            0166 ;
+: SYSCFG3_L          0166 ;
+: SYSCFG3_H          0167 ;
+: TA0CTL             0380 ;
+: TA0CTL_L           0380 ;
+: TA0CTL_H           0381 ;
+: TA0CCTL0           0382 ;
+: TA0CCTL0_L         0382 ;
+: TA0CCTL0_H         0383 ;
+: TA0CCTL1           0384 ;
+: TA0CCTL1_L         0384 ;
+: TA0CCTL1_H         0385 ;
+: TA0CCTL2           0386 ;
+: TA0CCTL2_L         0386 ;
+: TA0CCTL2_H         0387 ;
+: TA0R               0390 ;
+: TA0R_L             0390 ;
+: TA0R_H             0391 ;
+: TA0CCR0            0392 ;
+: TA0CCR0_L          0392 ;
+: TA0CCR0_H          0393 ;
+: TA0CCR1            0394 ;
+: TA0CCR1_L          0394 ;
+: TA0CCR1_H          0395 ;
+: TA0CCR2            0396 ;
+: TA0CCR2_L          0396 ;
+: TA0CCR2_H          0397 ;
+: TA0EX0             03A0 ;
+: TA0EX0_L           03A0 ;
+: TA0EX0_H           03A1 ;
+: TA0IV              03AE ;
+: TA0IV_L            03AE ;
+: TA0IV_H            03AF ;
+: TA1CTL             03C0 ;
+: TA1CTL_L           03C0 ;
+: TA1CTL_H           03C1 ;
+: TA1CCTL0           03C2 ;
+: TA1CCTL0_L         03C2 ;
+: TA1CCTL0_H         03C3 ;
+: TA1CCTL1           03C4 ;
+: TA1CCTL1_L         03C4 ;
+: TA1CCTL1_H         03C5 ;
+: TA1CCTL2           03C6 ;
+: TA1CCTL2_L         03C6 ;
+: TA1CCTL2_H         03C7 ;
+: TA1R               03D0 ;
+: TA1R_L             03D0 ;
+: TA1R_H             03D1 ;
+: TA1CCR0            03D2 ;
+: TA1CCR0_L          03D2 ;
+: TA1CCR0_H          03D3 ;
+: TA1CCR1            03D4 ;
+: TA1CCR1_L          03D4 ;
+: TA1CCR1_H          03D5 ;
+: TA1CCR2            03D6 ;
+: TA1CCR2_L          03D6 ;
+: TA1CCR2_H          03D7 ;
+: TA1EX0             03E0 ;
+: TA1EX0_L           03E0 ;
+: TA1EX0_H           03E1 ;
+: TA1IV              03EE ;
+: TA1IV_L            03EE ;
+: TA1IV_H            03EF ;
+: TA2CTL             0400 ;
+: TA2CTL_L           0400 ;
+: TA2CTL_H           0401 ;
+: TA2CCTL0           0402 ;
+: TA2CCTL0_L         0402 ;
+: TA2CCTL0_H         0403 ;
+: TA2CCTL1           0404 ;
+: TA2CCTL1_L         0404 ;
+: TA2CCTL1_H         0405 ;
+: TA2CCTL2           0406 ;
+: TA2CCTL2_L         0406 ;
+: TA2CCTL2_H         0407 ;
+: TA2R               0410 ;
+: TA2R_L             0410 ;
+: TA2R_H             0411 ;
+: TA2CCR0            0412 ;
+: TA2CCR0_L          0412 ;
+: TA2CCR0_H          0413 ;
+: TA2CCR1            0414 ;
+: TA2CCR1_L          0414 ;
+: TA2CCR1_H          0415 ;
+: TA2CCR2            0416 ;
+: TA2CCR2_L          0416 ;
+: TA2CCR2_H          0417 ;
+: TA2EX0             0420 ;
+: TA2EX0_L           0420 ;
+: TA2EX0_H           0421 ;
+: TA2IV              042E ;
+: TA2IV_L            042E ;
+: TA2IV_H            042F ;
+: TA3CTL             0440 ;
+: TA3CTL_L           0440 ;
+: TA3CTL_H           0441 ;
+: TA3CCTL0           0442 ;
+: TA3CCTL0_L         0442 ;
+: TA3CCTL0_H         0443 ;
+: TA3CCTL1           0444 ;
+: TA3CCTL1_L         0444 ;
+: TA3CCTL1_H         0445 ;
+: TA3CCTL2           0446 ;
+: TA3CCTL2_L         0446 ;
+: TA3CCTL2_H         0447 ;
+: TA3R               0450 ;
+: TA3R_L             0450 ;
+: TA3R_H             0451 ;
+: TA3CCR0            0452 ;
+: TA3CCR0_L          0452 ;
+: TA3CCR0_H          0453 ;
+: TA3CCR1            0454 ;
+: TA3CCR1_L          0454 ;
+: TA3CCR1_H          0455 ;
+: TA3CCR2            0456 ;
+: TA3CCR2_L          0456 ;
+: TA3CCR2_H          0457 ;
+: TA3EX0             0460 ;
+: TA3EX0_L           0460 ;
+: TA3EX0_H           0461 ;
+: TA3IV              046E ;
+: TA3IV_L            046E ;
+: TA3IV_H            046F ;
+: TB0CTL             0480 ;
+: TB0CTL_L           0480 ;
+: TB0CTL_H           0481 ;
+: TB0CCTL0           0482 ;
+: TB0CCTL0_L         0482 ;
+: TB0CCTL0_H         0483 ;
+: TB0CCTL1           0484 ;
+: TB0CCTL1_L         0484 ;
+: TB0CCTL1_H         0485 ;
+: TB0CCTL2           0486 ;
+: TB0CCTL2_L         0486 ;
+: TB0CCTL2_H         0487 ;
+: TB0CCTL3           0488 ;
+: TB0CCTL3_L         0488 ;
+: TB0CCTL3_H         0489 ;
+: TB0CCTL4           048A ;
+: TB0CCTL4_L         048A ;
+: TB0CCTL4_H         048B ;
+: TB0CCTL5           048C ;
+: TB0CCTL5_L         048C ;
+: TB0CCTL5_H         048D ;
+: TB0CCTL6           048E ;
+: TB0CCTL6_L         048E ;
+: TB0CCTL6_H         048F ;
+: TB0R               0490 ;
+: TB0R_L             0490 ;
+: TB0R_H             0491 ;
+: TB0CCR0            0492 ;
+: TB0CCR0_L          0492 ;
+: TB0CCR0_H          0493 ;
+: TB0CCR1            0494 ;
+: TB0CCR1_L          0494 ;
+: TB0CCR1_H          0495 ;
+: TB0CCR2            0496 ;
+: TB0CCR2_L          0496 ;
+: TB0CCR2_H          0497 ;
+: TB0CCR3            0498 ;
+: TB0CCR3_L          0498 ;
+: TB0CCR3_H          0499 ;
+: TB0CCR4            049A ;
+: TB0CCR4_L          049A ;
+: TB0CCR4_H          049B ;
+: TB0CCR5            049C ;
+: TB0CCR5_L          049C ;
+: TB0CCR5_H          049D ;
+: TB0CCR6            049E ;
+: TB0CCR6_L          049E ;
+: TB0CCR6_H          049F ;
+: TB0EX0             04A0 ;
+: TB0EX0_L           04A0 ;
+: TB0EX0_H           04A1 ;
+: TB0IV              04AE ;
+: TB0IV_L            04AE ;
+: TB0IV_H            04AF ;
+: WDTCTL             01CC ;
+: WDTCTL_L           01CC ;
+: WDTCTL_H           01CD ;
+: CP0CTL0            08E0 ;
+: CP0CTL0_L          08E0 ;
+: CP0CTL0_H          08E1 ;
+: CP0CTL1            08E2 ;
+: CP0CTL1_L          08E2 ;
+: CP0CTL1_H          08E3 ;
+: CP0INT             08E6 ;
+: CP0INT_L           08E6 ;
+: CP0INT_H           08E7 ;
+: CP0IV              08E8 ;
+: CP0IV_L            08E8 ;
+: CP0IV_H            08E9 ;
+: CP0DACCTL          08F0 ;
+: CP0DACCTL_L        08F0 ;
+: CP0DACCTL_H        08F1 ;
+: CP0DACDATA         08F2 ;
+: CP0DACDATA_L       08F2 ;
+: CP0DACDATA_H       08F3 ;
+: UCA0CTLW0          0500 ;
+: UCA0CTLW0_L        0500 ;
+: UCA0CTLW0_H        0501 ;
+: UCA0CTLW1          0502 ;
+: UCA0CTLW1_L        0502 ;
+: UCA0CTLW1_H        0503 ;
+: UCA0BRW            0506 ;
+: UCA0BRW_L          0506 ;
+: UCA0BRW_H          0507 ;
+: UCA0MCTLW          0508 ;
+: UCA0MCTLW_L        0508 ;
+: UCA0MCTLW_H        0509 ;
+: UCA0STATW          050A ;
+: UCA0STATW_L        050A ;
+: UCA0STATW_H        050B ;
+: UCA0RXBUF          050C ;
+: UCA0RXBUF_L        050C ;
+: UCA0RXBUF_H        050D ;
+: UCA0TXBUF          050E ;
+: UCA0TXBUF_L        050E ;
+: UCA0TXBUF_H        050F ;
+: UCA0ABCTL          0510 ;
+: UCA0ABCTL_L        0510 ;
+: UCA0ABCTL_H        0511 ;
+: UCA0IRCTL          0512 ;
+: UCA0IRCTL_L        0512 ;
+: UCA0IRCTL_H        0513 ;
+: UCA0IE             051A ;
+: UCA0IE_L           051A ;
+: UCA0IE_H           051B ;
+: UCA0IFG            051C ;
+: UCA0IFG_L          051C ;
+: UCA0IFG_H          051D ;
+: UCA0IV             051E ;
+: UCA0IV_L           051E ;
+: UCA0IV_H           051F ;
+: UCA1CTLW0          0520 ;
+: UCA1CTLW0_L        0520 ;
+: UCA1CTLW0_H        0521 ;
+: UCA1CTLW1          0522 ;
+: UCA1CTLW1_L        0522 ;
+: UCA1CTLW1_H        0523 ;
+: UCA1BRW            0526 ;
+: UCA1BRW_L          0526 ;
+: UCA1BRW_H          0527 ;
+: UCA1MCTLW          0528 ;
+: UCA1MCTLW_L        0528 ;
+: UCA1MCTLW_H        0529 ;
+: UCA1STATW          052A ;
+: UCA1STATW_L        052A ;
+: UCA1STATW_H        052B ;
+: UCA1RXBUF          052C ;
+: UCA1RXBUF_L        052C ;
+: UCA1RXBUF_H        052D ;
+: UCA1TXBUF          052E ;
+: UCA1TXBUF_L        052E ;
+: UCA1TXBUF_H        052F ;
+: UCA1ABCTL          0530 ;
+: UCA1ABCTL_L        0530 ;
+: UCA1ABCTL_H        0531 ;
+: UCA1IRCTL          0532 ;
+: UCA1IRCTL_L        0532 ;
+: UCA1IRCTL_H        0533 ;
+: UCA1IE             053A ;
+: UCA1IE_L           053A ;
+: UCA1IE_H           053B ;
+: UCA1IFG            053C ;
+: UCA1IFG_L          053C ;
+: UCA1IFG_H          053D ;
+: UCA1IV             053E ;
+: UCA1IV_L           053E ;
+: UCA1IV_H           053F ;
+: UCB0CTLW0          0540 ;
+: UCB0CTLW0_L        0540 ;
+: UCB0CTLW0_H        0541 ;
+: UCB0CTLW1          0542 ;
+: UCB0CTLW1_L        0542 ;
+: UCB0CTLW1_H        0543 ;
+: UCB0BRW            0546 ;
+: UCB0BRW_L          0546 ;
+: UCB0BRW_H          0547 ;
+: UCB0STATW          0548 ;
+: UCB0STATW_L        0548 ;
+: UCB0STATW_H        0549 ;
+: UCB0TBCNT          054A ;
+: UCB0TBCNT_L        054A ;
+: UCB0TBCNT_H        054B ;
+: UCB0RXBUF          054C ;
+: UCB0RXBUF_L        054C ;
+: UCB0RXBUF_H        054D ;
+: UCB0TXBUF          054E ;
+: UCB0TXBUF_L        054E ;
+: UCB0TXBUF_H        054F ;
+: UCB0I2COA0         0554 ;
+: UCB0I2COA0_L       0554 ;
+: UCB0I2COA0_H       0555 ;
+: UCB0I2COA1         0556 ;
+: UCB0I2COA1_L       0556 ;
+: UCB0I2COA1_H       0557 ;
+: UCB0I2COA2         0558 ;
+: UCB0I2COA2_L       0558 ;
+: UCB0I2COA2_H       0559 ;
+: UCB0I2COA3         055A ;
+: UCB0I2COA3_L       055A ;
+: UCB0I2COA3_H       055B ;
+: UCB0ADDRX          055C ;
+: UCB0ADDRX_L        055C ;
+: UCB0ADDRX_H        055D ;
+: UCB0ADDMASK        055E ;
+: UCB0ADDMASK_L      055E ;
+: UCB0ADDMASK_H      055F ;
+: UCB0I2CSA          0560 ;
+: UCB0I2CSA_L        0560 ;
+: UCB0I2CSA_H        0561 ;
+: UCB0IE             056A ;
+: UCB0IE_L           056A ;
+: UCB0IE_H           056B ;
+: UCB0IFG            056C ;
+: UCB0IFG_L          056C ;
+: UCB0IFG_H          056D ;
+: UCB0IV             056E ;
+: UCB0IV_L           056E ;
+: UCB0IV_H           056F ;
+: UCB1CTLW0          0580 ;
+: UCB1CTLW0_L        0580 ;
+: UCB1CTLW0_H        0581 ;
+: UCB1CTLW1          0582 ;
+: UCB1CTLW1_L        0582 ;
+: UCB1CTLW1_H        0583 ;
+: UCB1BRW            0586 ;
+: UCB1BRW_L          0586 ;
+: UCB1BRW_H          0587 ;
+: UCB1STATW          0588 ;
+: UCB1STATW_L        0588 ;
+: UCB1STATW_H        0589 ;
+: UCB1TBCNT          058A ;
+: UCB1TBCNT_L        058A ;
+: UCB1TBCNT_H        058B ;
+: UCB1RXBUF          058C ;
+: UCB1RXBUF_L        058C ;
+: UCB1RXBUF_H        058D ;
+: UCB1TXBUF          058E ;
+: UCB1TXBUF_L        058E ;
+: UCB1TXBUF_H        058F ;
+: UCB1I2COA0         0594 ;
+: UCB1I2COA0_L       0594 ;
+: UCB1I2COA0_H       0595 ;
+: UCB1I2COA1         0596 ;
+: UCB1I2COA1_L       0596 ;
+: UCB1I2COA1_H       0597 ;
+: UCB1I2COA2         0598 ;
+: UCB1I2COA2_L       0598 ;
+: UCB1I2COA2_H       0599 ;
+: UCB1I2COA3         059A ;
+: UCB1I2COA3_L       059A ;
+: UCB1I2COA3_H       059B ;
+: UCB1ADDRX          059C ;
+: UCB1ADDRX_L        059C ;
+: UCB1ADDRX_H        059D ;
+: UCB1ADDMASK        059E ;
+: UCB1ADDMASK_L      059E ;
+: UCB1ADDMASK_H      059F ;
+: UCB1I2CSA          05A0 ;
+: UCB1I2CSA_L        05A0 ;
+: UCB1I2CSA_H        05A1 ;
+: UCB1IE             05AA ;
+: UCB1IE_L           05AA ;
+: UCB1IE_H           05AB ;
+: UCB1IFG            05AC ;
+: UCB1IFG_L          05AC ;
+: UCB1IFG_H          05AD ;
+: UCB1IV             05AE ;
+: UCB1IV_L           05AE ;
+: UCB1IV_H           05AF ;
 
 decimal
-
index 4bb82efb53e7a7e93eddc8c2c6ab8edd742ae5ac..fba9c6f43adf41ef1e45c5d56c5027facce4a39e 100644 (file)
@@ -32,24 +32,18 @@ static void serput(int c);
 static void serputs(const char *s);
 static void printint(DoubleCell n, char *buf);
 
+static void initGPIO();
+static void initClock();
+static void initUART();
+static void Software_Trim();
+#define MCLK_FREQ_MHZ (8)    // MCLK = 8MHz
+
 int main()
 {
     WDTCTL = WDTPW | WDTHOLD;
-    DCOCTL = 0;
-    BCSCTL1 = CALBC1_16MHZ;
-    DCOCTL = CALDCO_16MHZ;
-
-    P1SEL |= BIT1 | BIT2;
-    P1SEL2 |= BIT1 | BIT2;
-
-    UCA0CTL1 = UCSWRST;
-    UCA0CTL1 |= UCSSEL_2;
-    UCA0BR0 = 139;
-    UCA0BR1 = 0;
-    UCA0MCTL = UCBRS0;
-    UCA0CTL1 &= (uint8_t)~UCSWRST;
-
-    __enable_interrupt();
+    initGPIO();
+    initClock();
+    initUART();
 
     static SplitMemDict<alee_dat_len> dict (alee_dat);
     State state (dict, readchar);
@@ -58,8 +52,8 @@ int main()
 
     auto ptr = strbuf;
     while (1) {
-        if (IFG2 & UCA0RXIFG) {
-            char c = UCA0RXBUF;
+        if (UCA0IFG & UCRXIFG) {
+            auto c = static_cast<char>(UCA0RXBUF);
             serput(c);
 
             if (c == '\r') {
@@ -95,13 +89,13 @@ int main()
     }
 }
 
-static void readchar(State& state)
+void readchar(State& state)
 {
     auto idx = state.dict.read(Dictionary::Input);
     Addr addr = Dictionary::Input + sizeof(Cell) + idx;
 
-    while (!(IFG2 & UCA0RXIFG));
-    auto c = UCA0RXBUF;
+    while (!(UCA0IFG & UCRXIFG));
+    auto c = static_cast<uint8_t>(UCA0RXBUF);
     if (isupper(c))
         c += 32;
     state.dict.writebyte(addr, c ? c : ' ');
@@ -109,8 +103,8 @@ static void readchar(State& state)
 
 void serput(int c)
 {
-    while (!(IFG2 & UCA0TXIFG));
-    UCA0TXBUF = (char)c;
+    while (!(UCA0IFG & UCTXIFG));
+    UCA0TXBUF = static_cast<char>(c);
 }
 
 void serputs(const char *s)
@@ -128,7 +122,7 @@ void printint(DoubleCell n, char *buf)
         n = -n;
 
     do {
-        *ptr++ = (char)(n % 10) + '0';
+        *ptr++ = static_cast<char>((n % 10) + '0');
     } while ((n /= 10));
 
     if (neg)
@@ -164,6 +158,128 @@ void user_sys(State& state)
     }
 }
 
-extern "C" int atexit(void (*)()) { return 0; }
-void operator delete(void *) {}
-void operator delete(void *, std::size_t) {}
+void initGPIO()
+{
+    // Unnecessary, but done by TI example
+    P1DIR = 0xFF; P2DIR = 0xFF;
+    P1REN = 0xFF; P2REN = 0xFF;
+    P1OUT = 0x00; P2OUT = 0x00;
+
+    // Set LED pins to outputs
+    P6DIR |= BIT0 | BIT1 | BIT2;
+    P6OUT |= BIT0 | BIT1 | BIT2;
+    P5DIR |= BIT5 | BIT6 | BIT7;
+    P5OUT |= BIT5 | BIT6 | BIT7;
+
+    // Allow GPIO configurations to be applied
+    PM5CTL0 &= ~LOCKLPM5;
+
+    // Safety measure, prevent unwarranted interrupts
+    P5IFG = 0;
+    P6IFG = 0;
+}
+
+void initClock()
+{
+    __bis_SR_register(SCG0);                 // disable FLL
+    CSCTL3 |= SELREF__REFOCLK;               // Set REFO as FLL reference source
+    CSCTL1 = DCOFTRIMEN_1 | DCOFTRIM0 | DCOFTRIM1 | DCORSEL_3;// DCOFTRIM=3, DCO Range = 8MHz
+    CSCTL2 = FLLD_0 + 243;                   // DCODIV = 8MHz
+    __delay_cycles(3);
+    __bic_SR_register(SCG0);                // enable FLL
+    Software_Trim();                        // Software Trim to get the best DCOFTRIM value
+
+    CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK; // set default REFO(~32768Hz) as ACLK source, ACLK = 32768Hz
+                                               // default DCODIV as MCLK and SMCLK source
+}
+
+void initUART()
+{
+    // Configure UART pins
+    P5SEL0 |= BIT1 | BIT2;                    // set 2-UART pin as second function
+    SYSCFG3|=USCIA0RMP;                       //Set the remapping source
+    // Configure UART
+    UCA0CTLW0 |= UCSWRST;
+    UCA0CTLW0 |= UCSSEL__SMCLK;
+
+    // Baud Rate calculation
+    // 8000000/(16*9600) = 52.083
+    // Fractional portion = 0.083
+    // User's Guide Table 17-4: UCBRSx = 0x49
+    // UCBRFx = int ( (52.083-52)*16) = 1
+    UCA0BR0 = 52;                             // 8000000/16/9600
+    UCA0BR1 = 0x00;
+    UCA0MCTLW = 0x4900 | UCOS16 | UCBRF_1;
+
+    UCA0CTLW0 &= ~UCSWRST;                    // Initialize eUSCI
+}
+
+void Software_Trim()
+{
+    unsigned int oldDcoTap = 0xffff;
+    unsigned int newDcoTap = 0xffff;
+    unsigned int newDcoDelta = 0xffff;
+    unsigned int bestDcoDelta = 0xffff;
+    unsigned int csCtl0Copy = 0;
+    unsigned int csCtl1Copy = 0;
+    unsigned int csCtl0Read = 0;
+    unsigned int csCtl1Read = 0;
+    unsigned int dcoFreqTrim = 3;
+    unsigned char endLoop = 0;
+
+    do
+    {
+        CSCTL0 = 0x100;                         // DCO Tap = 256
+        do
+        {
+            CSCTL7 &= ~DCOFFG;                  // Clear DCO fault flag
+        }while (CSCTL7 & DCOFFG);               // Test DCO fault flag
+
+        __delay_cycles((unsigned int)3000 * MCLK_FREQ_MHZ);// Wait FLL lock status (FLLUNLOCK) to be stable
+                                                           // Suggest to wait 24 cycles of divided FLL reference clock
+        while((CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)) && ((CSCTL7 & DCOFFG) == 0));
+
+        csCtl0Read = CSCTL0;                   // Read CSCTL0
+        csCtl1Read = CSCTL1;                   // Read CSCTL1
+
+        oldDcoTap = newDcoTap;                 // Record DCOTAP value of last time
+        newDcoTap = csCtl0Read & 0x01ff;       // Get DCOTAP value of this time
+        dcoFreqTrim = (csCtl1Read & 0x0070)>>4;// Get DCOFTRIM value
+
+        if(newDcoTap < 256)                    // DCOTAP < 256
+        {
+            newDcoDelta = 256 - newDcoTap;     // Delta value between DCPTAP and 256
+            if((oldDcoTap != 0xffff) && (oldDcoTap >= 256)) // DCOTAP cross 256
+                endLoop = 1;                   // Stop while loop
+            else
+            {
+                dcoFreqTrim--;
+                CSCTL1 = (csCtl1Read & (~DCOFTRIM)) | (dcoFreqTrim<<4);
+            }
+        }
+        else                                   // DCOTAP >= 256
+        {
+            newDcoDelta = newDcoTap - 256;     // Delta value between DCPTAP and 256
+            if(oldDcoTap < 256)                // DCOTAP cross 256
+                endLoop = 1;                   // Stop while loop
+            else
+            {
+                dcoFreqTrim++;
+                CSCTL1 = (csCtl1Read & (~DCOFTRIM)) | (dcoFreqTrim<<4);
+            }
+        }
+
+        if(newDcoDelta < bestDcoDelta)         // Record DCOTAP closest to 256
+        {
+            csCtl0Copy = csCtl0Read;
+            csCtl1Copy = csCtl1Read;
+            bestDcoDelta = newDcoDelta;
+        }
+
+    }while(endLoop == 0);                      // Poll until endLoop == 1
+
+    CSCTL0 = csCtl0Copy;                       // Reload locked DCOTAP
+    CSCTL1 = csCtl1Copy;                       // Reload locked DCOFTRIM
+    while(CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)); // Poll until FLL is locked
+}
+
diff --git a/msp430/msp430fr2476.ld b/msp430/msp430fr2476.ld
new file mode 100644 (file)
index 0000000..011683b
--- /dev/null
@@ -0,0 +1,463 @@
+/* ============================================================================ */\r
+/* Copyright (c) 2021, Texas Instruments Incorporated                           */\r
+/*  All rights reserved.                                                        */\r
+/*                                                                              */\r
+/*  Redistribution and use in source and binary forms, with or without          */\r
+/*  modification, are permitted provided that the following conditions          */\r
+/*  are met:                                                                    */\r
+/*                                                                              */\r
+/*  *  Redistributions of source code must retain the above copyright           */\r
+/*     notice, this list of conditions and the following disclaimer.            */\r
+/*                                                                              */\r
+/*  *  Redistributions in binary form must reproduce the above copyright        */\r
+/*     notice, this list of conditions and the following disclaimer in the      */\r
+/*     documentation and/or other materials provided with the distribution.     */\r
+/*                                                                              */\r
+/*  *  Neither the name of Texas Instruments Incorporated nor the names of      */\r
+/*     its contributors may be used to endorse or promote products derived      */\r
+/*     from this software without specific prior written permission.            */\r
+/*                                                                              */\r
+/*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" */\r
+/*  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,       */\r
+/*  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR      */\r
+/*  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR            */\r
+/*  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,       */\r
+/*  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,         */\r
+/*  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; */\r
+/*  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,    */\r
+/*  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR     */\r
+/*  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,              */\r
+/*  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                          */\r
+/* ============================================================================ */\r
+\r
+/* This file supports MSP430FR2476 devices. */\r
+/* Version: 1.212 */\r
+/* Default linker script, for normal executables */\r
+\r
+OUTPUT_ARCH(msp430)\r
+ENTRY(_start)\r
+\r
+MEMORY {\r
+  TINYRAM          : ORIGIN = 0x0006, LENGTH = 0x001A /* END=0x001F, size 26 */\r
+  BSL0             : ORIGIN = 0x1000, LENGTH = 0x0800 /* END=0x17FF, size 2048 */\r
+  TLVMEM           : ORIGIN = 0x1A00, LENGTH = 0x0200 /* END=0x1BFF, size 512 */\r
+  BOOTCODE         : ORIGIN = 0x1C00, LENGTH = 0x0400 /* END=0x1FFF, size 1024 */\r
+  ROMLIB           : ORIGIN = 0xC0000, LENGTH = 0x4000 /* END=0xC3FFF, size 16384 */\r
+  BSL1             : ORIGIN = 0xFFC00, LENGTH = 0x0400 /* END=0xFFFFF, size 1024 */\r
+  RAM              : ORIGIN = 0x2000, LENGTH = 0x2000 /* END=0x3FFF, size 8192 */\r
+  INFOMEM          : ORIGIN = 0x1800, LENGTH = 0x0200 /* END=0x19FF, size 512 */\r
+  FRAM (rx)        : ORIGIN = 0x8000, LENGTH = 0x7F80 /* END=0xFF7F, size 32640 */\r
+  HIFRAM (rxw)     : ORIGIN = 0x00010000, LENGTH = 0x00007FFF\r
+  JTAGSIGNATURE    : ORIGIN = 0xFF80, LENGTH = 0x0004\r
+  BSLSIGNATURE     : ORIGIN = 0xFF84, LENGTH = 0x0004\r
+  BSLCONFIGURATIONSIGNATURE : ORIGIN = 0xFF88, LENGTH = 0x0002\r
+  BSLCONFIGURATION : ORIGIN = 0xFF8A, LENGTH = 0x0002\r
+  BSLI2CADDRESS    : ORIGIN = 0xFFA0, LENGTH = 0x0002\r
+  VECT0            : ORIGIN = 0xFFA2, LENGTH = 0x0002\r
+  VECT1            : ORIGIN = 0xFFA4, LENGTH = 0x0002\r
+  VECT2            : ORIGIN = 0xFFA6, LENGTH = 0x0002\r
+  VECT3            : ORIGIN = 0xFFA8, LENGTH = 0x0002\r
+  VECT4            : ORIGIN = 0xFFAA, LENGTH = 0x0002\r
+  VECT5            : ORIGIN = 0xFFAC, LENGTH = 0x0002\r
+  VECT6            : ORIGIN = 0xFFAE, LENGTH = 0x0002\r
+  VECT7            : ORIGIN = 0xFFB0, LENGTH = 0x0002\r
+  VECT8            : ORIGIN = 0xFFB2, LENGTH = 0x0002\r
+  VECT9            : ORIGIN = 0xFFB4, LENGTH = 0x0002\r
+  VECT10           : ORIGIN = 0xFFB6, LENGTH = 0x0002\r
+  VECT11           : ORIGIN = 0xFFB8, LENGTH = 0x0002\r
+  VECT12           : ORIGIN = 0xFFBA, LENGTH = 0x0002\r
+  VECT13           : ORIGIN = 0xFFBC, LENGTH = 0x0002\r
+  VECT14           : ORIGIN = 0xFFBE, LENGTH = 0x0002\r
+  VECT15           : ORIGIN = 0xFFC0, LENGTH = 0x0002\r
+  VECT16           : ORIGIN = 0xFFC2, LENGTH = 0x0002\r
+  VECT17           : ORIGIN = 0xFFC4, LENGTH = 0x0002\r
+  VECT18           : ORIGIN = 0xFFC6, LENGTH = 0x0002\r
+  VECT19           : ORIGIN = 0xFFC8, LENGTH = 0x0002\r
+  VECT20           : ORIGIN = 0xFFCA, LENGTH = 0x0002\r
+  VECT21           : ORIGIN = 0xFFCC, LENGTH = 0x0002\r
+  VECT22           : ORIGIN = 0xFFCE, LENGTH = 0x0002\r
+  VECT23           : ORIGIN = 0xFFD0, LENGTH = 0x0002\r
+  VECT24           : ORIGIN = 0xFFD2, LENGTH = 0x0002\r
+  VECT25           : ORIGIN = 0xFFD4, LENGTH = 0x0002\r
+  VECT26           : ORIGIN = 0xFFD6, LENGTH = 0x0002\r
+  VECT27           : ORIGIN = 0xFFD8, LENGTH = 0x0002\r
+  VECT28           : ORIGIN = 0xFFDA, LENGTH = 0x0002\r
+  VECT29           : ORIGIN = 0xFFDC, LENGTH = 0x0002\r
+  VECT30           : ORIGIN = 0xFFDE, LENGTH = 0x0002\r
+  VECT31           : ORIGIN = 0xFFE0, LENGTH = 0x0002\r
+  VECT32           : ORIGIN = 0xFFE2, LENGTH = 0x0002\r
+  VECT33           : ORIGIN = 0xFFE4, LENGTH = 0x0002\r
+  VECT34           : ORIGIN = 0xFFE6, LENGTH = 0x0002\r
+  VECT35           : ORIGIN = 0xFFE8, LENGTH = 0x0002\r
+  VECT36           : ORIGIN = 0xFFEA, LENGTH = 0x0002\r
+  VECT37           : ORIGIN = 0xFFEC, LENGTH = 0x0002\r
+  VECT38           : ORIGIN = 0xFFEE, LENGTH = 0x0002\r
+  VECT39           : ORIGIN = 0xFFF0, LENGTH = 0x0002\r
+  VECT40           : ORIGIN = 0xFFF2, LENGTH = 0x0002\r
+  VECT41           : ORIGIN = 0xFFF4, LENGTH = 0x0002\r
+  VECT42           : ORIGIN = 0xFFF6, LENGTH = 0x0002\r
+  VECT43           : ORIGIN = 0xFFF8, LENGTH = 0x0002\r
+  VECT44           : ORIGIN = 0xFFFA, LENGTH = 0x0002\r
+  VECT45           : ORIGIN = 0xFFFC, LENGTH = 0x0002\r
+  RESETVEC         : ORIGIN = 0xFFFE, LENGTH = 0x0002\r
+}\r
+\r
+SECTIONS\r
+{\r
+  .jtagsignature      : {} > JTAGSIGNATURE\r
+  .bslsignature       : {} > BSLSIGNATURE\r
+  .bslconfigsignature : {} > BSLCONFIGURATIONSIGNATURE\r
+  .bslconfig          : {} > BSLCONFIGURATION\r
+  .bsli2caddress      : {} > BSLI2CADDRESS\r
+\r
+  __interrupt_vector_0   : { KEEP (*(__interrupt_vector_0 )) } > VECT0\r
+  __interrupt_vector_1   : { KEEP (*(__interrupt_vector_1 )) } > VECT1\r
+  __interrupt_vector_2   : { KEEP (*(__interrupt_vector_2 )) } > VECT2\r
+  __interrupt_vector_3   : { KEEP (*(__interrupt_vector_3 )) } > VECT3\r
+  __interrupt_vector_4   : { KEEP (*(__interrupt_vector_4 )) } > VECT4\r
+  __interrupt_vector_5   : { KEEP (*(__interrupt_vector_5 )) } > VECT5\r
+  __interrupt_vector_6   : { KEEP (*(__interrupt_vector_6 )) } > VECT6\r
+  __interrupt_vector_7   : { KEEP (*(__interrupt_vector_7 )) } > VECT7\r
+  __interrupt_vector_8   : { KEEP (*(__interrupt_vector_8 )) } > VECT8\r
+  __interrupt_vector_9   : { KEEP (*(__interrupt_vector_9 )) } > VECT9\r
+  __interrupt_vector_10  : { KEEP (*(__interrupt_vector_10)) } > VECT10\r
+  __interrupt_vector_11  : { KEEP (*(__interrupt_vector_11)) } > VECT11\r
+  __interrupt_vector_12  : { KEEP (*(__interrupt_vector_12)) } > VECT12\r
+  __interrupt_vector_13  : { KEEP (*(__interrupt_vector_13)) } > VECT13\r
+  __interrupt_vector_14  : { KEEP (*(__interrupt_vector_14)) } > VECT14\r
+  __interrupt_vector_15  : { KEEP (*(__interrupt_vector_15)) } > VECT15\r
+  __interrupt_vector_16  : { KEEP (*(__interrupt_vector_16)) } > VECT16\r
+  __interrupt_vector_17  : { KEEP (*(__interrupt_vector_17)) } > VECT17\r
+  __interrupt_vector_18  : { KEEP (*(__interrupt_vector_18)) } > VECT18\r
+  __interrupt_vector_19  : { KEEP (*(__interrupt_vector_19)) } > VECT19\r
+  __interrupt_vector_20  : { KEEP (*(__interrupt_vector_20)) KEEP (*(__interrupt_vector_ecomp0)) } > VECT20\r
+  __interrupt_vector_21  : { KEEP (*(__interrupt_vector_21)) KEEP (*(__interrupt_vector_port6)) } > VECT21\r
+  __interrupt_vector_22  : { KEEP (*(__interrupt_vector_22)) KEEP (*(__interrupt_vector_port5)) } > VECT22\r
+  __interrupt_vector_23  : { KEEP (*(__interrupt_vector_23)) KEEP (*(__interrupt_vector_port4)) } > VECT23\r
+  __interrupt_vector_24  : { KEEP (*(__interrupt_vector_24)) KEEP (*(__interrupt_vector_port3)) } > VECT24\r
+  __interrupt_vector_25  : { KEEP (*(__interrupt_vector_25)) KEEP (*(__interrupt_vector_port2)) } > VECT25\r
+  __interrupt_vector_26  : { KEEP (*(__interrupt_vector_26)) KEEP (*(__interrupt_vector_port1)) } > VECT26\r
+  __interrupt_vector_27  : { KEEP (*(__interrupt_vector_27)) KEEP (*(__interrupt_vector_adc)) } > VECT27\r
+  __interrupt_vector_28  : { KEEP (*(__interrupt_vector_28)) KEEP (*(__interrupt_vector_eusci_b1)) } > VECT28\r
+  __interrupt_vector_29  : { KEEP (*(__interrupt_vector_29)) KEEP (*(__interrupt_vector_eusci_b0)) } > VECT29\r
+  __interrupt_vector_30  : { KEEP (*(__interrupt_vector_30)) KEEP (*(__interrupt_vector_eusci_a1)) } > VECT30\r
+  __interrupt_vector_31  : { KEEP (*(__interrupt_vector_31)) KEEP (*(__interrupt_vector_eusci_a0)) } > VECT31\r
+  __interrupt_vector_32  : { KEEP (*(__interrupt_vector_32)) KEEP (*(__interrupt_vector_wdt)) } > VECT32\r
+  __interrupt_vector_33  : { KEEP (*(__interrupt_vector_33)) KEEP (*(__interrupt_vector_rtc)) } > VECT33\r
+  __interrupt_vector_34  : { KEEP (*(__interrupt_vector_34)) KEEP (*(__interrupt_vector_timer0_b1)) } > VECT34\r
+  __interrupt_vector_35  : { KEEP (*(__interrupt_vector_35)) KEEP (*(__interrupt_vector_timer0_b0)) } > VECT35\r
+  __interrupt_vector_36  : { KEEP (*(__interrupt_vector_36)) KEEP (*(__interrupt_vector_timer3_a1)) } > VECT36\r
+  __interrupt_vector_37  : { KEEP (*(__interrupt_vector_37)) KEEP (*(__interrupt_vector_timer3_a0)) } > VECT37\r
+  __interrupt_vector_38  : { KEEP (*(__interrupt_vector_38)) KEEP (*(__interrupt_vector_timer2_a1)) } > VECT38\r
+  __interrupt_vector_39  : { KEEP (*(__interrupt_vector_39)) KEEP (*(__interrupt_vector_timer2_a0)) } > VECT39\r
+  __interrupt_vector_40  : { KEEP (*(__interrupt_vector_40)) KEEP (*(__interrupt_vector_timer1_a1)) } > VECT40\r
+  __interrupt_vector_41  : { KEEP (*(__interrupt_vector_41)) KEEP (*(__interrupt_vector_timer1_a0)) } > VECT41\r
+  __interrupt_vector_42  : { KEEP (*(__interrupt_vector_42)) KEEP (*(__interrupt_vector_timer0_a1)) } > VECT42\r
+  __interrupt_vector_43  : { KEEP (*(__interrupt_vector_43)) KEEP (*(__interrupt_vector_timer0_a0)) } > VECT43\r
+  __interrupt_vector_44  : { KEEP (*(__interrupt_vector_44)) KEEP (*(__interrupt_vector_unmi)) } > VECT44\r
+  __interrupt_vector_45  : { KEEP (*(__interrupt_vector_45)) KEEP (*(__interrupt_vector_sysnmi)) } > VECT45\r
+  __reset_vector :\r
+  {\r
+    KEEP (*(__interrupt_vector_46))\r
+    KEEP (*(__interrupt_vector_reset))\r
+    KEEP (*(.resetvec))\r
+  } > RESETVEC\r
+\r
+  .lower.rodata :\r
+  {\r
+    . = ALIGN(2);\r
+    *(.lower.rodata.* .lower.rodata)\r
+  } > FRAM\r
+\r
+  .rodata :\r
+  {\r
+    . = ALIGN(2);\r
+    *(.plt)\r
+    *(.rodata .rodata.* .gnu.linkonce.r.* .const .const:*)\r
+    *(.rodata1)\r
+    KEEP (*(.gcc_except_table)) *(.gcc_except_table.*)\r
+  } > FRAM\r
+\r
+  /* Note: This is a separate .rodata section for sections which are\r
+     read only but which older linkers treat as read-write.\r
+     This prevents older linkers from marking the entire .rodata\r
+     section as read-write.  */\r
+  .rodata2 :\r
+  {\r
+    . = ALIGN(2);\r
+    PROVIDE (__preinit_array_start = .);\r
+    KEEP (*(.preinit_array))\r
+    PROVIDE (__preinit_array_end = .);\r
+    . = ALIGN(2);\r
+    PROVIDE (__init_array_start = .);\r
+    KEEP (*(SORT(.init_array.*)))\r
+    KEEP (*(.init_array))\r
+    PROVIDE (__init_array_end = .);\r
+    . = ALIGN(2);\r
+    PROVIDE (__fini_array_start = .);\r
+    KEEP (*(.fini_array))\r
+    KEEP (*(SORT(.fini_array.*)))\r
+    PROVIDE (__fini_array_end = .);\r
+    . = ALIGN(2);\r
+    *(.eh_frame_hdr)\r
+    KEEP (*(.eh_frame))\r
+\r
+    /* gcc uses crtbegin.o to find the start of the constructors, so\r
+       we make sure it is first.  Because this is a wildcard, it\r
+       doesn't matter if the user does not actually link against\r
+       crtbegin.o; the linker won't look for a file to match a\r
+       wildcard.  The wildcard also means that it doesn't matter which\r
+       directory crtbegin.o is in.  */\r
+    KEEP (*crtbegin*.o(.ctors))\r
+\r
+    /* We don't want to include the .ctor section from the crtend.o\r
+       file until after the sorted ctors.  The .ctor section from\r
+       the crtend file contains the end of ctors marker and it must\r
+       be last */\r
+    KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))\r
+    KEEP (*(SORT(.ctors.*)))\r
+    KEEP (*(.ctors))\r
+\r
+    KEEP (*crtbegin*.o(.dtors))\r
+    KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))\r
+    KEEP (*(SORT(.dtors.*)))\r
+    KEEP (*(.dtors))\r
+  } > FRAM\r
+\r
+  .upper.rodata :\r
+  {\r
+    *(.upper.rodata.* .upper.rodata)\r
+  } > HIFRAM\r
+\r
+  /* This section contains data that is initialised during load\r
+     but not on application reset.  */\r
+  .persistent :\r
+  {\r
+    . = ALIGN(2);\r
+    PROVIDE (__persistent_start = .);\r
+    *(.persistent)\r
+    . = ALIGN(2);\r
+    PROVIDE (__persistent_end = .);\r
+  } > FRAM\r
+\r
+  .tinyram : {} > TINYRAM\r
+\r
+  .lower.data :\r
+  {\r
+    . = ALIGN(2);\r
+    PROVIDE (__datastart = .);\r
+    *(.lower.data.* .lower.data)\r
+  } > RAM AT> FRAM\r
+\r
+  .data :\r
+  {\r
+    . = ALIGN(2);\r
+\r
+    KEEP (*(.jcr))\r
+    *(.data.rel.ro.local) *(.data.rel.ro*)\r
+    *(.dynamic)\r
+\r
+    *(.data .data.* .gnu.linkonce.d.*)\r
+    KEEP (*(.gnu.linkonce.d.*personality*))\r
+    SORT(CONSTRUCTORS)\r
+    *(.data1)\r
+    *(.got.plt) *(.got)\r
+\r
+    /* We want the small data sections together, so single-instruction offsets\r
+       can access them all, and initialized data all before uninitialized, so\r
+       we can shorten the on-disk segment size.  */\r
+    . = ALIGN(2);\r
+    *(.sdata .sdata.* .gnu.linkonce.s.* D_2 D_1)\r
+\r
+    . = ALIGN(2);\r
+\r
+    _edata = .;\r
+    PROVIDE (edata = .);\r
+    PROVIDE (__dataend = .);\r
+  } > RAM AT> FRAM\r
+\r
+  /* Note that crt0 assumes this is a multiple of two; all the\r
+     start/stop symbols are also assumed word-aligned.  */\r
+  PROVIDE(__romdatastart = LOADADDR(.lower.data));\r
+  PROVIDE (__romdatacopysize = SIZEOF(.lower.data) + SIZEOF(.data));\r
+\r
+  .upper.data :\r
+  {\r
+    __upper_data_init = LOADADDR (.upper.data);\r
+    /* Status word.  */\r
+    SHORT(1);\r
+    __high_datastart = .;\r
+    *(.upper.data.* .upper.data)\r
+    __high_dataend = .;\r
+  } > HIFRAM AT> FRAM\r
+\r
+  __rom_highdatacopysize = SIZEOF(.upper.data) - 2;\r
+  __rom_highdatastart = LOADADDR(.upper.data) + 2;\r
+\r
+  .lower.bss :\r
+  {\r
+    . = ALIGN(2);\r
+    PROVIDE (__bssstart = .);\r
+    *(.lower.bss.* .lower.bss)\r
+  } > RAM\r
+\r
+  .bss :\r
+  {\r
+    . = ALIGN(2);\r
+    *(.dynbss)\r
+    *(.sbss .sbss.*)\r
+    *(.bss .bss.* .gnu.linkonce.b.*)\r
+    . = ALIGN(2);\r
+    *(COMMON)\r
+    PROVIDE (__bssend = .);\r
+  } > RAM\r
+  PROVIDE (__bsssize = SIZEOF(.lower.bss) + SIZEOF(.bss));\r
+\r
+  .upper.bss :\r
+  {\r
+    . = ALIGN(2);\r
+    __high_bssstart = .;\r
+    *(.upper.bss.* .upper.bss)\r
+    . = ALIGN(2);\r
+    __high_bssend = .;\r
+  } > HIFRAM\r
+  __high_bsssize = SIZEOF(.upper.bss);\r
+\r
+  /* This section contains data that is not initialised during load\r
+     or application reset.  */\r
+  .noinit (NOLOAD) :\r
+  {\r
+    . = ALIGN(2);\r
+    PROVIDE (__noinit_start = .);\r
+    *(.noinit)\r
+    . = ALIGN(2);\r
+    PROVIDE (__noinit_end = .);\r
+  } > RAM\r
+\r
+  /* We create this section so that "end" will always be in the\r
+     RAM region (matching .stack below), even if the .bss\r
+     section is empty.  */\r
+  .heap (NOLOAD) :\r
+  {\r
+    . = ALIGN(2);\r
+    __heap_start__ = .;\r
+    _end = __heap_start__;\r
+    PROVIDE (end = .);\r
+    KEEP (*(.heap))\r
+    _end = .;\r
+    PROVIDE (end = .);\r
+    /* This word is here so that the section is not empty, and thus\r
+       not discarded by the linker.  The actual value does not matter\r
+       and is ignored.  */\r
+    LONG(0);\r
+    __heap_end__ = .;\r
+    __HeapLimit = __heap_end__;\r
+  } > RAM\r
+  /* WARNING: Do not place anything in RAM here.\r
+     The heap section must be the last section in RAM and the stack\r
+     section must be placed at the very end of the RAM region.  */\r
+\r
+  .stack (ORIGIN (RAM) + LENGTH(RAM)) :\r
+  {\r
+    PROVIDE (__stack = .);\r
+    *(.stack)\r
+  }\r
+\r
+  .lower.text :\r
+  {\r
+    . = ALIGN(2);\r
+    *(.lower.text.* .lower.text)\r
+  } > FRAM\r
+\r
+  .text :\r
+  {\r
+    PROVIDE (_start = .);\r
+\r
+    . = ALIGN(2);\r
+    KEEP (*(SORT(.crt_*)))\r
+\r
+    . = ALIGN(2);\r
+    KEEP (*(.lowtext))\r
+\r
+    . = ALIGN(2);\r
+    *(.text .stub .text.* .gnu.linkonce.t.* .text:*)\r
+\r
+    KEEP (*(.text.*personality*))\r
+    /* .gnu.warning sections are handled specially by elf32.em.  */\r
+    *(.gnu.warning)\r
+    *(.interp .hash .dynsym .dynstr .gnu.version*)\r
+    PROVIDE (__etext = .);\r
+    PROVIDE (_etext = .);\r
+    PROVIDE (etext = .);\r
+    . = ALIGN(2);\r
+    KEEP (*(.init))\r
+    KEEP (*(.fini))\r
+    KEEP (*(.tm_clone_table))\r
+  } > FRAM\r
+\r
+  .upper.text :\r
+  {\r
+    . = ALIGN(2);\r
+    *(.upper.text.* .upper.text)\r
+  } > HIFRAM\r
+\r
+  .info (NOLOAD) : {} > INFOMEM              /* MSP430 INFO FLASH MEMORY SEGMENTS */\r
+\r
+  /* The rest are all not normally part of the runtime image.  */\r
+\r
+  .MSP430.attributes 0 :\r
+  {\r
+    KEEP (*(.MSP430.attributes))\r
+    KEEP (*(.gnu.attributes))\r
+    KEEP (*(__TI_build_attributes))\r
+  }\r
+\r
+  /* Stabs debugging sections.  */\r
+  .stab          0 : { *(.stab) }\r
+  .stabstr       0 : { *(.stabstr) }\r
+  .stab.excl     0 : { *(.stab.excl) }\r
+  .stab.exclstr  0 : { *(.stab.exclstr) }\r
+  .stab.index    0 : { *(.stab.index) }\r
+  .stab.indexstr 0 : { *(.stab.indexstr) }\r
+  .comment       0 : { *(.comment) }\r
+  /* DWARF debug sections.\r
+     Symbols in the DWARF debugging sections are relative to the beginning\r
+     of the section so we begin them at 0.  */\r
+  /* DWARF 1.  */\r
+  .debug          0 : { *(.debug) }\r
+  .line           0 : { *(.line) }\r
+  /* GNU DWARF 1 extensions.  */\r
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }\r
+  .debug_sfnames  0 : { *(.debug_sfnames) }\r
+  /* DWARF 1.1 and DWARF 2.  */\r
+  .debug_aranges  0 : { *(.debug_aranges) }\r
+  .debug_pubnames 0 : { *(.debug_pubnames) }\r
+  /* DWARF 2.  */\r
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }\r
+  .debug_abbrev   0 : { *(.debug_abbrev) }\r
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end ) }\r
+  .debug_frame    0 : { *(.debug_frame) }\r
+  .debug_str      0 : { *(.debug_str) }\r
+  .debug_loc      0 : { *(.debug_loc) }\r
+  .debug_macinfo  0 : { *(.debug_macinfo) }\r
+  /* SGI/MIPS DWARF 2 extensions.  */\r
+  .debug_weaknames 0 : { *(.debug_weaknames) }\r
+  .debug_funcnames 0 : { *(.debug_funcnames) }\r
+  .debug_typenames 0 : { *(.debug_typenames) }\r
+  .debug_varnames  0 : { *(.debug_varnames) }\r
+  /* DWARF 3 */\r
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }\r
+  .debug_ranges   0 : { *(.debug_ranges) }\r
+  /* DWARF Extension.  */\r
+  .debug_macro    0 : { *(.debug_macro) }\r
+\r
+  /DISCARD/ : { *(.note.GNU-stack) }\r
+}\r
+\r
+\r
+/****************************************************************************/\r
+/* Include peripherals memory map                                           */\r
+/****************************************************************************/\r
+\r
+INCLUDE msp430fr2476_symbols.ld\r
+\r
diff --git a/msp430/msp430g2553.ld b/msp430/msp430g2553.ld
deleted file mode 100644 (file)
index 0845667..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-/* ============================================================================ */
-/* Copyright (c) 2021, Texas Instruments Incorporated                           */
-/*  All rights reserved.                                                        */
-/*                                                                              */
-/*  Redistribution and use in source and binary forms, with or without          */
-/*  modification, are permitted provided that the following conditions          */
-/*  are met:                                                                    */
-/*                                                                              */
-/*  *  Redistributions of source code must retain the above copyright           */
-/*     notice, this list of conditions and the following disclaimer.            */
-/*                                                                              */
-/*  *  Redistributions in binary form must reproduce the above copyright        */
-/*     notice, this list of conditions and the following disclaimer in the      */
-/*     documentation and/or other materials provided with the distribution.     */
-/*                                                                              */
-/*  *  Neither the name of Texas Instruments Incorporated nor the names of      */
-/*     its contributors may be used to endorse or promote products derived      */
-/*     from this software without specific prior written permission.            */
-/*                                                                              */
-/*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" */
-/*  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,       */
-/*  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR      */
-/*  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR            */
-/*  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,       */
-/*  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,         */
-/*  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; */
-/*  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,    */
-/*  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR     */
-/*  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,              */
-/*  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                          */
-/* ============================================================================ */
-
-/* This file supports MSP430G2553 devices. */
-/* Version: 1.212 */
-/* Default linker script, for normal executables */
-
-OUTPUT_ARCH(msp430)
-ENTRY(_start)
-
-MEMORY {
-  SFR              : ORIGIN = 0x0000, LENGTH = 0x0010 /* END=0x0010, size 16 */
-  RAM              : ORIGIN = 0x0200, LENGTH = 0x0200 /* END=0x03FF, size 512 */
-  INFOMEM          : ORIGIN = 0x1000, LENGTH = 0x0100 /* END=0x10FF, size 256 as 4 64-byte segments */
-  INFOA            : ORIGIN = 0x10C0, LENGTH = 0x0040 /* END=0x10FF, size 64 */
-  INFOB            : ORIGIN = 0x1080, LENGTH = 0x0040 /* END=0x10BF, size 64 */
-  INFOC            : ORIGIN = 0x1040, LENGTH = 0x0040 /* END=0x107F, size 64 */
-  INFOD            : ORIGIN = 0x1000, LENGTH = 0x0040 /* END=0x103F, size 64 */
-  ROM (rx)         : ORIGIN = 0xC000, LENGTH = 0x3FDE /* END=0xFFDD, size 16350 */
-  BSLSIGNATURE     : ORIGIN = 0xFFDE, LENGTH = 0x0002
-  VECT1            : ORIGIN = 0xFFE0, LENGTH = 0x0002
-  VECT2            : ORIGIN = 0xFFE2, LENGTH = 0x0002
-  VECT3            : ORIGIN = 0xFFE4, LENGTH = 0x0002
-  VECT4            : ORIGIN = 0xFFE6, LENGTH = 0x0002
-  VECT5            : ORIGIN = 0xFFE8, LENGTH = 0x0002
-  VECT6            : ORIGIN = 0xFFEA, LENGTH = 0x0002
-  VECT7            : ORIGIN = 0xFFEC, LENGTH = 0x0002
-  VECT8            : ORIGIN = 0xFFEE, LENGTH = 0x0002
-  VECT9            : ORIGIN = 0xFFF0, LENGTH = 0x0002
-  VECT10           : ORIGIN = 0xFFF2, LENGTH = 0x0002
-  VECT11           : ORIGIN = 0xFFF4, LENGTH = 0x0002
-  VECT12           : ORIGIN = 0xFFF6, LENGTH = 0x0002
-  VECT13           : ORIGIN = 0xFFF8, LENGTH = 0x0002
-  VECT14           : ORIGIN = 0xFFFA, LENGTH = 0x0002
-  VECT15           : ORIGIN = 0xFFFC, LENGTH = 0x0002
-  RESETVEC         : ORIGIN = 0xFFFE, LENGTH = 0x0002
-}
-
-SECTIONS
-{
-  .bslsignature       : {} > BSLSIGNATURE
-  __interrupt_vector_1   : { KEEP (*(__interrupt_vector_1 )) KEEP (*(__interrupt_vector_trapint)) } > VECT1
-  __interrupt_vector_2   : { KEEP (*(__interrupt_vector_2 )) } > VECT2
-  __interrupt_vector_3   : { KEEP (*(__interrupt_vector_3 )) KEEP (*(__interrupt_vector_port1)) } > VECT3
-  __interrupt_vector_4   : { KEEP (*(__interrupt_vector_4 )) KEEP (*(__interrupt_vector_port2)) } > VECT4
-  __interrupt_vector_5   : { KEEP (*(__interrupt_vector_5 )) } > VECT5
-  __interrupt_vector_6   : { KEEP (*(__interrupt_vector_6 )) KEEP (*(__interrupt_vector_adc10)) } > VECT6
-  __interrupt_vector_7   : { KEEP (*(__interrupt_vector_7 )) KEEP (*(__interrupt_vector_usciab0tx)) } > VECT7
-  __interrupt_vector_8   : { KEEP (*(__interrupt_vector_8 )) KEEP (*(__interrupt_vector_usciab0rx)) } > VECT8
-  __interrupt_vector_9   : { KEEP (*(__interrupt_vector_9 )) KEEP (*(__interrupt_vector_timer0_a1)) } > VECT9
-  __interrupt_vector_10  : { KEEP (*(__interrupt_vector_10)) KEEP (*(__interrupt_vector_timer0_a0)) } > VECT10
-  __interrupt_vector_11  : { KEEP (*(__interrupt_vector_11)) KEEP (*(__interrupt_vector_wdt)) } > VECT11
-  __interrupt_vector_12  : { KEEP (*(__interrupt_vector_12)) KEEP (*(__interrupt_vector_comparatora)) } > VECT12
-  __interrupt_vector_13  : { KEEP (*(__interrupt_vector_13)) KEEP (*(__interrupt_vector_timer1_a1)) } > VECT13
-  __interrupt_vector_14  : { KEEP (*(__interrupt_vector_14)) KEEP (*(__interrupt_vector_timer1_a0)) } > VECT14
-  __interrupt_vector_15  : { KEEP (*(__interrupt_vector_15)) KEEP (*(__interrupt_vector_nmi)) } > VECT15
-  __reset_vector :
-  {
-    KEEP (*(__interrupt_vector_16))
-    KEEP (*(__interrupt_vector_reset))
-    KEEP (*(.resetvec))
-  } > RESETVEC
-
-  .rodata :
-  {
-    . = ALIGN(2);
-    *(.plt)
-    *(.rodata .rodata.* .gnu.linkonce.r.* .const .const:*)
-    *(.rodata1)
-    KEEP (*(.gcc_except_table)) *(.gcc_except_table.*)
-  } > ROM
-
-  /* Note: This is a separate .rodata section for sections which are
-     read only but which older linkers treat as read-write.
-     This prevents older linkers from marking the entire .rodata
-     section as read-write.  */
-  .rodata2 :
-  {
-    . = ALIGN(2);
-    PROVIDE (__preinit_array_start = .);
-    KEEP (*(.preinit_array))
-    PROVIDE (__preinit_array_end = .);
-    . = ALIGN(2);
-    PROVIDE (__init_array_start = .);
-    KEEP (*(SORT(.init_array.*)))
-    KEEP (*(.init_array))
-    PROVIDE (__init_array_end = .);
-    . = ALIGN(2);
-    PROVIDE (__fini_array_start = .);
-    KEEP (*(.fini_array))
-    KEEP (*(SORT(.fini_array.*)))
-    PROVIDE (__fini_array_end = .);
-    /* . = ALIGN(2);
-    *(.eh_frame_hdr)
-    KEEP (*(.eh_frame)) */
-
-    /* gcc uses crtbegin.o to find the start of the constructors, so
-       we make sure it is first.  Because this is a wildcard, it
-       doesn't matter if the user does not actually link against
-       crtbegin.o; the linker won't look for a file to match a
-       wildcard.  The wildcard also means that it doesn't matter which
-       directory crtbegin.o is in.  */
-    KEEP (*crtbegin*.o(.ctors))
-
-    /* We don't want to include the .ctor section from the crtend.o
-       file until after the sorted ctors.  The .ctor section from
-       the crtend file contains the end of ctors marker and it must
-       be last */
-    KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
-    KEEP (*(SORT(.ctors.*)))
-    KEEP (*(.ctors))
-
-    KEEP (*crtbegin*.o(.dtors))
-    KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
-    KEEP (*(SORT(.dtors.*)))
-    KEEP (*(.dtors))
-  } > ROM
-
-  .text :
-  {
-    . = ALIGN(2);
-    PROVIDE (_start = .);
-    KEEP (*(SORT(.crt_*)))
-    *(.lowtext .text .stub .text.* .gnu.linkonce.t.* .text:*)
-    KEEP (*(.text.*personality*))
-    /* .gnu.warning sections are handled specially by elf32.em.  */
-    *(.gnu.warning)
-    *(.interp .hash .dynsym .dynstr .gnu.version*)
-    PROVIDE (__etext = .);
-    PROVIDE (_etext = .);
-    PROVIDE (etext = .);
-    . = ALIGN(2);
-    KEEP (*(.init))
-    KEEP (*(.fini))
-    KEEP (*(.tm_clone_table))
-  } > ROM
-
-  .data :
-  {
-    . = ALIGN(2);
-    PROVIDE (__datastart = .);
-
-    KEEP (*(.jcr))
-    *(.data.rel.ro.local) *(.data.rel.ro*)
-    *(.dynamic)
-
-    *(.data .data.* .gnu.linkonce.d.*)
-    KEEP (*(.gnu.linkonce.d.*personality*))
-    SORT(CONSTRUCTORS)
-    *(.data1)
-    *(.got.plt) *(.got)
-
-    /* We want the small data sections together, so single-instruction offsets
-       can access them all, and initialized data all before uninitialized, so
-       we can shorten the on-disk segment size.  */
-    . = ALIGN(2);
-    *(.sdata .sdata.* .gnu.linkonce.s.* D_2 D_1)
-
-    . = ALIGN(2);
-    _edata = .;
-    PROVIDE (edata = .);
-    PROVIDE (__dataend = .);
-  } > RAM AT>ROM
-
-  /* Note that crt0 assumes this is a multiple of two; all the
-     start/stop symbols are also assumed word-aligned.  */
-  PROVIDE(__romdatastart = LOADADDR(.data));
-  PROVIDE (__romdatacopysize = SIZEOF(.data));
-
-  .bss :
-  {
-    . = ALIGN(2);
-    PROVIDE (__bssstart = .);
-    *(.dynbss)
-    *(.sbss .sbss.*)
-    *(.bss .bss.* .gnu.linkonce.b.*)
-    . = ALIGN(2);
-    *(COMMON)
-    PROVIDE (__bssend = .);
-  } > RAM
-  PROVIDE (__bsssize = SIZEOF(.bss));
-
-  /* This section contains data that is not initialised during load
-     or application reset.  */
-  .noinit (NOLOAD) :
-  {
-    . = ALIGN(2);
-    PROVIDE (__noinit_start = .);
-    *(.noinit)
-    . = ALIGN(2);
-    PROVIDE (__noinit_end = .);
-    end = .;
-  } > RAM
-
-  /* We create this section so that "end" will always be in the
-     RAM region (matching .stack below), even if the .bss
-     section is empty.  */
-  .heap (NOLOAD) :
-  {
-    . = ALIGN(2);
-    __heap_start__ = .;
-    _end = __heap_start__;
-    PROVIDE (end = .);
-    KEEP (*(.heap))
-    _end = .;
-    PROVIDE (end = .);
-    /* This word is here so that the section is not empty, and thus
-       not discarded by the linker.  The actual value does not matter
-       and is ignored.  */
-    LONG(0);
-    __heap_end__ = .;
-    __HeapLimit = __heap_end__;
-  } > RAM
-  /* WARNING: Do not place anything in RAM here.
-     The heap section must be the last section in RAM and the stack
-     section must be placed at the very end of the RAM region.  */
-
-  .stack (ORIGIN (RAM) + LENGTH(RAM)) :
-  {
-    PROVIDE (__stack = .);
-    *(.stack)
-  }
-
-  .infoA     : {} > INFOA              /* MSP430 INFO FLASH MEMORY SEGMENTS */
-  .infoB     : {} > INFOB
-  .infoC     : {} > INFOC
-  .infoD     : {} > INFOD
-
-  /* The rest are all not normally part of the runtime image.  */
-
-  .MSP430.attributes 0 :
-  {
-    KEEP (*(.MSP430.attributes))
-    KEEP (*(.gnu.attributes))
-    KEEP (*(__TI_build_attributes))
-  }
-
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  .comment       0 : { *(.comment) }
-  /* DWARF debug sections.
-     Symbols in the DWARF debugging sections are relative to the beginning
-     of the section so we begin them at 0.  */
-  /* DWARF 1.  */
-  .debug          0 : { *(.debug) }
-  .line           0 : { *(.line) }
-  /* GNU DWARF 1 extensions.  */
-  .debug_srcinfo  0 : { *(.debug_srcinfo) }
-  .debug_sfnames  0 : { *(.debug_sfnames) }
-  /* DWARF 1.1 and DWARF 2.  */
-  .debug_aranges  0 : { *(.debug_aranges) }
-  .debug_pubnames 0 : { *(.debug_pubnames) }
-  /* DWARF 2.  */
-  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
-  .debug_abbrev   0 : { *(.debug_abbrev) }
-  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end ) }
-  .debug_frame    0 : { *(.debug_frame) }
-  .debug_str      0 : { *(.debug_str) }
-  .debug_loc      0 : { *(.debug_loc) }
-  .debug_macinfo  0 : { *(.debug_macinfo) }
-  /* SGI/MIPS DWARF 2 extensions.  */
-  .debug_weaknames 0 : { *(.debug_weaknames) }
-  .debug_funcnames 0 : { *(.debug_funcnames) }
-  .debug_typenames 0 : { *(.debug_typenames) }
-  .debug_varnames  0 : { *(.debug_varnames) }
-  /* DWARF 3 */
-  .debug_pubtypes 0 : { *(.debug_pubtypes) }
-  .debug_ranges   0 : { *(.debug_ranges) }
-  /* DWARF Extension.  */
-  .debug_macro    0 : { *(.debug_macro) }
-
-  /DISCARD/ : { *(.note.GNU-stack) }
-}
-
-
-/****************************************************************************/
-/* Include peripherals memory map                                           */
-/****************************************************************************/
-
-INCLUDE msp430g2553_symbols.ld
-