Quantcast
Channel: MSP low-power microcontroller forum - Recent Threads
Viewing all articles
Browse latest Browse all 22054

CODECOMPOSER: MSP430 family Assembler with code composer Studio Memory section

$
0
0
Part Number: CODECOMPOSER
Other Parts Discussed in Thread: MSP430FR2476

Tool/software:

Some time ago someone ask if is possible to program with code composer in assembly and if is possible to create
different memory sections , I would like to share with you the method to obtain this, I found this method and work properly .
Is possible to apply this method at all MSP430 family and must be modified the file lnk_msp430xxxxx.cmd,

in this case the file is for the MSP430FR2476, lnk_msp430fr2476.cmd

look at the below file the label, below also the file configuration 

    RAM_DEF                                 : origin = 0x2000, length = 0x0100     /* 255 */

    RAM_LCD                                : origin = 0x2100, length = 0x0400     /* 1024 */

    RAM                                                                               : origin = 0x2500, length = 0x1B00  /* 6912 byte */

    FLASH_DEF                                                               : origin = 0x8000, length = 0x0100

    FLASH_COST                                                           : origin = 0x8100, length = 0x0400

   

                .ram_default        : {} > RAM_DEF                                   /* RAM ZONE DEFAULT  */

                .ram_lcdzone        : {} > RAM_LCD                                     /* RAM ZONE  LCD */

                .ram_base             : {} > RAM                                          /* RAM  */

                .eeprom                : {} > INFO                                /* eeprom section */

                .default_value        : {} > FLASH_DEF                   /* default value Fram section */

                .parameters            : {} > FLASH_COST                      /* constant value Fram section  */

                .init_main_program  : {} > FRAM                                 /* FLASH INIT SECTION LOW MEMORY  */

                .program_sec_high   : {} > FRAM2                                    /* FLASH SECTON HIGH  */

below the entire file nk_msp430fr2476.cmd  and configuration files too for each memory section and following there are examples of file configuration,

for Ram , EEprom, Fram

I Hope that this post can help someone 

/******************************************************************************

*

* Copyright (C) 2012 - 2020 Texas Instruments Incorporated - http://www.ti.com/

*

* 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.

*

* Default linker command file for Texas Instruments MSP430FR2476

*

*****************************************************************************/

 

/******************************************************************************/

/*                                                                            */

/*   Usage:  lnk430 <obj files...>    -o <out file> -m <map file> lnk.cmd     */

/*           cl430  <src files...> -z -o <out file> -m <map file> lnk.cmd     */

/*                                                                            */

/*----------------------------------------------------------------------------*/

/* These linker options are for command line linking only.  For IDE linking,  */

/* you should set your linker options in Project Properties                   */

/* -c                                               LINK USING C CONVENTIONS  */

/* -stack  0x0100                                   SOFTWARE STACK SIZE       */

/* -heap   0x0100                                   HEAP AREA SIZE            */

/*                                                                            */

/*----------------------------------------------------------------------------*/

/* 1.210 */

/*----------------------------------------------------------------------------*/

 

/****************************************************************************/

/* SPECIFY THE SYSTEM MEMORY MAP                                            */

/****************************************************************************/

 

MEMORY

{

    TINYRAM                 : origin = 0x6, length = 0x1A

    BSL0                    : origin = 0x1000, length = 0x800

    INFO                    : origin = 0x1800, length = 0x200

    TLVMEM                  : origin = 0x1A00, length = 0x200

    BOOTCODE                : origin = 0x1C00, length = 0x400

                //RAM                     : origin = 0x2000, length = 0x2000

                //FRAM                    : origin = 0x8000, length = 0x7F80

                //FRAM2                   : origin = 0x10000,length = 0x8000

 

    RAM_DEF                                 : origin = 0x2000, length = 0x0100     /* 255 */

    RAM_LCD                                : origin = 0x2100, length = 0x0400     /* 1024 */

    RAM                                                                               : origin = 0x2500, length = 0x1B00  /* 6912 byte */

    FLASH_DEF                                                               : origin = 0x8000, length = 0x0100

    FLASH_COST                                                           : origin = 0x8100, length = 0x0400

    FRAM                    : origin = 0x8500, length = 0x7A80

    FRAM2                   : origin = 0x10000,length = 0x8000

    ROMLIB                  : origin = 0xC0000, length = 0x4000

    BSL1                    : origin = 0xFFC00, length = 0x400

    JTAGSIGNATURE           : origin = 0xFF80, length = 0x0004, fill = 0xFFFF

    BSLSIGNATURE            : origin = 0xFF84, length = 0x0004, fill = 0xFFFF

    BSLCONFIGURATIONSIGNATURE: origin = 0xFF88, length = 0x0002, fill = 0xFFFF

    BSLCONFIGURATION        : origin = 0xFF8A, length = 0x0002, fill = 0xFFFF

    BSLI2CADDRESS           : origin = 0xFFA0, length = 0x0002, fill = 0xFFFF

    INT00                   : origin = 0xFFA2, length = 0x0002

    INT01                   : origin = 0xFFA4, length = 0x0002

    INT02                   : origin = 0xFFA6, length = 0x0002

    INT03                   : origin = 0xFFA8, length = 0x0002

    INT04                   : origin = 0xFFAA, length = 0x0002

    INT05                   : origin = 0xFFAC, length = 0x0002

    INT06                   : origin = 0xFFAE, length = 0x0002

    INT07                   : origin = 0xFFB0, length = 0x0002

    INT08                   : origin = 0xFFB2, length = 0x0002

    INT09                   : origin = 0xFFB4, length = 0x0002

    INT10                   : origin = 0xFFB6, length = 0x0002

    INT11                   : origin = 0xFFB8, length = 0x0002

    INT12                   : origin = 0xFFBA, length = 0x0002

    INT13                   : origin = 0xFFBC, length = 0x0002

    INT14                   : origin = 0xFFBE, length = 0x0002

    INT15                   : origin = 0xFFC0, length = 0x0002

    INT16                   : origin = 0xFFC2, length = 0x0002

    INT17                   : origin = 0xFFC4, length = 0x0002

    INT18                   : origin = 0xFFC6, length = 0x0002

    INT19                   : origin = 0xFFC8, length = 0x0002

    INT20                   : origin = 0xFFCA, length = 0x0002

    INT21                   : origin = 0xFFCC, length = 0x0002

    INT22                   : origin = 0xFFCE, length = 0x0002

    INT23                   : origin = 0xFFD0, length = 0x0002

    INT24                   : origin = 0xFFD2, length = 0x0002

    INT25                   : origin = 0xFFD4, length = 0x0002

    INT26                   : origin = 0xFFD6, length = 0x0002

    INT27                   : origin = 0xFFD8, length = 0x0002

    INT28                   : origin = 0xFFDA, length = 0x0002

    INT29                   : origin = 0xFFDC, length = 0x0002

    INT30                   : origin = 0xFFDE, length = 0x0002

    INT31                   : origin = 0xFFE0, length = 0x0002

    INT32                   : origin = 0xFFE2, length = 0x0002

    INT33                   : origin = 0xFFE4, length = 0x0002

    INT34                   : origin = 0xFFE6, length = 0x0002

    INT35                   : origin = 0xFFE8, length = 0x0002

    INT36                   : origin = 0xFFEA, length = 0x0002

    INT37                   : origin = 0xFFEC, length = 0x0002

    INT38                   : origin = 0xFFEE, length = 0x0002

    INT39                   : origin = 0xFFF0, length = 0x0002

    INT40                   : origin = 0xFFF2, length = 0x0002

    INT41                   : origin = 0xFFF4, length = 0x0002

    INT42                   : origin = 0xFFF6, length = 0x0002

    INT43                   : origin = 0xFFF8, length = 0x0002

    INT44                   : origin = 0xFFFA, length = 0x0002

    INT45                   : origin = 0xFFFC, length = 0x0002

    RESET                   : origin = 0xFFFE, length = 0x0002

}

 

/****************************************************************************/

/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY                              */

/****************************************************************************/

 

SECTIONS

{

    GROUP(ALL_FRAM)

    {

        GROUP(READ_WRITE_MEMORY)

        {

            .TI.persistent : {}              /* For #pragma persistent            */

            .cio           : {}              /* C I/O Buffer                      */

            .sysmem        : {}              /* Dynamic memory allocation area    */

        } PALIGN(0x0400), RUN_START(fram_rw_start) RUN_END(fram_rx_start)

 

        GROUP(READ_ONLY_MEMORY)

        {

            .cinit      : {}                   /* Initialization tables             */

            .pinit      : {}                   /* C++ constructor tables            */

            .binit      : {}                   /* Boot-time Initialization tables   */

            .init_array : {}                   /* C++ constructor tables            */

            .mspabi.exidx : {}                 /* C++ constructor tables            */

            .mspabi.extab : {}                 /* C++ constructor tables            */

            .const      : {}                   /* Constant data                     */

        }

 

        GROUP(EXECUTABLE_MEMORY)

        {

            .text:_isr  : {}                   /* Code ISRs                         */

        }

    } > FRAM

 

#ifndef __LARGE_DATA_MODEL__

    .const            : {} > FRAM           /* Constant data                     */

#else

    .const            : {} >> FRAM | FRAM2  /* Constant data                     */

#endif

 

#ifndef __LARGE_CODE_MODEL__

    .text             : {} > FRAM           /* Code                              */

#else

    .text             : {} >> FRAM2 | FRAM  /* Code                              */

#endif

 

    #ifdef __TI_COMPILER_VERSION__

        #if __TI_COMPILER_VERSION__ >= 15009000

            #ifndef __LARGE_CODE_MODEL__

                .TI.ramfunc : {} load=FRAM, run=RAM, table(BINIT)

            #else

                .TI.ramfunc : {} load=FRAM | FRAM2, run=RAM, table(BINIT)

            #endif

        #endif

    #endif

 

    .jtagsignature      : {} > JTAGSIGNATURE

    .bslsignature       : {} > BSLSIGNATURE

    .bslconfigsignature : {} > BSLCONFIGURATIONSIGNATURE

    .bslconfig          : {} > BSLCONFIGURATION

    .bsli2caddress      : {} > BSLI2CADDRESS

                .tiny_ram                  : {} > TINYRAM                                      /* RAM ZONA DEI DEFAULT */

    .ram_default        : {} > RAM_DEF                                   /* RAM ZONE DEFAULT  */

                .ram_lcdzone        : {} > RAM_LCD                                     /* RAM ZONE  LCD */

                .ram_base                                      : {} > RAM                                          /* RAM  */

    .eeprom                                      : {} > INFO                /* eeprom section */

                .default_value      : {} > FLASH_DEF                   /* default value Fram section */

    .parameters                              : {} > FLASH_COST                      /* constant value Fram section  */

                .init_main_program  : {} > FRAM                                                       /* FLASH INIT SECTION LOW MEMORY  */

                .program_sec_high   : {} > FRAM2                                    /* FLASH SECTON HIGH  */

 

    .tinyram    : {} > TINYRAM              /* Tiny RAM                          */

 

    /* MSP430 INFO memory segments */

    .info : type = NOINIT{} > INFO

 

 

    /* MSP430 interrupt vectors */

 

    .int00       : {}               > INT00

    .int01       : {}               > INT01

    .int02       : {}               > INT02

    .int03       : {}               > INT03

    .int04       : {}               > INT04

    .int05       : {}               > INT05

    .int06       : {}               > INT06

    .int07       : {}               > INT07

    .int08       : {}               > INT08

    .int09       : {}               > INT09

    .int10       : {}               > INT10

    .int11       : {}               > INT11

    .int12       : {}               > INT12

    .int13       : {}               > INT13

    .int14       : {}               > INT14

    .int15       : {}               > INT15

    .int16       : {}               > INT16

    .int17       : {}               > INT17

    .int18       : {}               > INT18

    .int19       : {}               > INT19

    COMPARATOR   : { * ( .int20 ) } > INT20 type = VECT_INIT

    PORT6        : { * ( .int21 ) } > INT21 type = VECT_INIT

    PORT5        : { * ( .int22 ) } > INT22 type = VECT_INIT

    PORT4        : { * ( .int23 ) } > INT23 type = VECT_INIT

    PORT3        : { * ( .int24 ) } > INT24 type = VECT_INIT

    PORT2        : { * ( .int25 ) } > INT25 type = VECT_INIT

    PORT1        : { * ( .int26 ) } > INT26 type = VECT_INIT

    ADC          : { * ( .int27 ) } > INT27 type = VECT_INIT

    EUSCI_B1     : { * ( .int28 ) } > INT28 type = VECT_INIT

    EUSCI_B0     : { * ( .int29 ) } > INT29 type = VECT_INIT

    EUSCI_A1     : { * ( .int30 ) } > INT30 type = VECT_INIT

    EUSCI_A0     : { * ( .int31 ) } > INT31 type = VECT_INIT

    WDT          : { * ( .int32 ) } > INT32 type = VECT_INIT

    RTC          : { * ( .int33 ) } > INT33 type = VECT_INIT

    TIMER0_B1    : { * ( .int34 ) } > INT34 type = VECT_INIT

    TIMER0_B0    : { * ( .int35 ) } > INT35 type = VECT_INIT

    TIMER3_A1    : { * ( .int36 ) } > INT36 type = VECT_INIT

    TIMER3_A0    : { * ( .int37 ) } > INT37 type = VECT_INIT

    TIMER2_A1    : { * ( .int38 ) } > INT38 type = VECT_INIT

    TIMER2_A0    : { * ( .int39 ) } > INT39 type = VECT_INIT

    TIMER1_A1    : { * ( .int40 ) } > INT40 type = VECT_INIT

    TIMER1_A0    : { * ( .int41 ) } > INT41 type = VECT_INIT

    TIMER0_A1    : { * ( .int42 ) } > INT42 type = VECT_INIT

    TIMER0_A0    : { * ( .int43 ) } > INT43 type = VECT_INIT

    UNMI         : { * ( .int44 ) } > INT44 type = VECT_INIT

    SYSNMI       : { * ( .int45 ) } > INT45 type = VECT_INIT

    .reset       : {}               > RESET  /* MSP430 reset vector         */

 

}

/****************************************************************************/

/* FRAM WRITE PROTECTION SEGMENT DEFINITONS                                 */

/****************************************************************************/

 

#ifdef _FRWP_ENABLE

    __mpu_enable=1;

    start_protection_offset_address = (fram_rx_start - fram_rw_start) >> 10;

    program_fram_protection = 0x1;

    #ifdef _INFO_FRWP_ENABLE

        info_fram_protection = 0x1;

    #else

        info_fram_protection = 0x0;

    #endif

#endif

 

/****************************************************************************/

/* INCLUDE PERIPHERALS MEMORY MAP                                           */

/****************************************************************************/

 

-l msp430fr2476.cmd

;***************************************************************************************************************************

main file Configuration example 


                  .cdecls C,LIST, "define_lcd.h"
                  .cdecls C,LIST, "msp430.h"
                 .cdecls C,LIST, "define_port.h"
                 .include "macro.asm"
                 .include "macro_lcd_128x64.asm" ;* file di macro
                  .mlist

                   .text          ; Assemble into program memory.
                   .retain           ; Override ELF conditional linking ; and retain current section.
                                        
                    .retainrefs        ; And retain any sections that have
                                           ; references to current section.

;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
                   .def main_,end_main

                     .global watchdog

;********************* IN FLASH ************************************************
;* init program

                   .sect ".init_main_program"                        ;** section of init program defined into the file lnk_msp430fr2476.cmd

main_:
          movx.w #STACK_POINTER,SP ;* INIZIALIZZA LO STACK POINTER
         .....  instruction 

          .......

watchdog

       bra main_
end_main:

;****************************************************************************************************************************************

;*******************************************************************************

;*************RAM section configuration 


            .data
            .sect ".ram_default"

           ;* Ram default Section

default1 .word 1  ;* ATTIVAZIONI VARIE FUNZIONI ;*

;**********Byte Section

default1 .word 1

default1 .byte 1


;*************** ram LCD section

                .data
                .sect ".ram_lcdzone"

DISP_Row0 .space 128
DISP_Row1 .space 128
….
….

;*************** ram basic section

             .data
             .sect ".ram_base"

ram0 .word

;*********Byte section 

ram1 .byte
ram2 .byte

;****************************** FRAM section default value configuration 

                 .text
                  .sect ".default_value"        ; default value section 

default0            .word 

default1            .word 

.......

;***************byte section 

default2        .byte 

;********************************************* eeprom (info section) section memory

               .text
               .sect ".eeprom"

eeprom0          .word

eeprom1         .word

;*****************byte seciton 

eeprom2         .byte            


Viewing all articles
Browse latest Browse all 22054

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>