This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F280049C: RFFT sample code which load from flash and run in RAM

Part Number: TMS320F280049C
Other Parts Discussed in Thread: C2000WARE

Dears,

Is there a  RFFT sample code which load "RFFT_f32()"and"RFFT_f32_mag_TMU0()" from flash and run in RAM?

I run the samples of "C:\ti\c2000\C2000Ware_3_01_00_00\libraries\dsp\FPU\c28\examples\fft\2837x_rfft" and found it just copy _RFFT_f32_twiddleFactors to RAM only. while the RFFT_f32() running on flash.

SECTION ALLOCATION MAP

 output                                  attributes/
section   page    origin      length       input sections
--------  ----  ----------  ----------   ----------------
codestart 
*          0    00080000    00000002     
                  00080000    00000002     F2837xD_CodeStartBranch.obj (codestart)

.TI.ramfunc 
*          0    00084000    00000004     RUN ADDR = 00008800
                  00084000    00000004     F2837xD_usDelay.obj (.TI.ramfunc)

.cinit     0    000bc000    0000043c     
                  000bc000    00000203     main.obj (.cinit:_RFFTgoldenOut)
                  000bc203    00000105     main.obj (.cinit:_RFFTgoldenMagnitude)
                  000bc308    00000103     main.obj (.cinit:_RFFTgoldenPhase)
                  000bc40b    00000017     main.obj (.cinit)
                  000bc422    0000000e     rts2800_fpu32.lib : exit.c.obj (.cinit)
                  000bc430    00000005                       : _lock.c.obj (.cinit:__lock)
                  000bc435    00000005                       : _lock.c.obj (.cinit:__unlock)
                  000bc43a    00000002     --HOLE-- [fill = 0]

.text      0    000be000    00001256     
                  000be000    00000585     F2837xD_DefaultISR.obj (.text:retain)
                  000be585    000004ab     F2837xD_SysCtrl.obj (.text)
                  000bea30    00000244     F2837xD_Gpio.obj (.text)
                  000bec74    00000141     main.obj (.text)
                  000bedb5    00000001     rts2800_fpu32.lib : startup.c.obj (.text)
                  000bedb6    0000011d     c28x_fpu_dsp_library_coff.lib : RFFT_f32.obj (.text)
                  000beed3    00000088     rts2800_fpu32.lib : fs_div28.asm.obj (.text)
                  000bef5b    00000001     --HOLE-- [fill = 0]
                  000bef5c    00000086     c28x_fpu_dsp_library_coff.lib : RFFT_f32_phase_TMU0.obj (.text)
                  000befe2    00000063     rts2800_fpu32.lib : s_cosf.c.obj (.text)
                  000bf045    00000059                       : s_sinf.c.obj (.text)
                  000bf09e    00000056                       : boot28.asm.obj (.text)
                  000bf0f4    0000004e     c28x_fpu_dsp_library_coff.lib : RFFT_f32_mag_TMU0.obj (.text)
                  000bf142    00000038     examples_setup.obj (.text)
                  000bf17a    00000029     rts2800_fpu32.lib : exit.c.obj (.text)
                  000bf1a3    00000028     F2837xD_PieCtrl.obj (.text)
                  000bf1cb    00000026     F2837xD_PieVect.obj (.text)
                  000bf1f1    00000024     rts2800_fpu32.lib : cpy_tbl.c.obj (.text)
                  000bf215    0000001d                       : memcpy.c.obj (.text)
                  000bf232    00000019                       : args_main.c.obj (.text)
                  000bf24b    00000009                       : _lock.c.obj (.text)
                  000bf254    00000002                       : pre_init.c.obj (.text)

.pinit     0    000bc000    00000000     UNINITIALIZED

GLOBAL SYMBOLS: SORTED BY Symbol Address 

page  address   name                                  
----  -------   ----                                  
0     00000ce0  _Cla1SoftIntRegs                      
0     00008000  _FPU32RFFTtwiddleFactors              
0     00008000  _RFFT_f32_twiddleFactors              
0     00008800  _F28x_usDelay                         
0     00008800  _RamfuncsRunStart                     
0     00080000  code_start                            
0     00084000  _RamfuncsLoadStart                    
0     000bc000  ___cinit__                            
0     000bc000  cinit                                 
0     000be000  .text                                 
0     000be000  _TIMER1_ISR                           
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                      
0     000bec74  _main                                 
0     000bedb5  __system_post_cinit                   
0     000bedb6  _RFFT_f32                             
0     000bedbf  _rfft_f32_Stages1and2and3andBitReverse
0     000bee2b  _rfft_f32_Stages4andUp                
0     000beed3  FS$$DIV                               
0     000bef5c  _RFFT_f32_phase_TMU0                  
0     000befe2  _cos                                  
0     000befe2  _cosf                                 
0     000bf045  _sin                                  
0     000bf045  _sinf                                 
0     000bf09e  _c_int00                              
0     000bf0f4  _RFFT_f32_mag_TMU0                    
0     000bf142  _FPU_initSystemClocks                 
0     000bf149  _FPU_initEpie                         
0     000bf154  _FPU_initFlash                        
0     000bf179  _done                                 
0     000bf17a  C$$EXIT                               
0     000bf17a  _abort                                
0     000bf17c  _exit                                 
0     000bf1a3  _InitPieCtrl                          
0     000bf1c2  _EnableInterrupts                     
0     000bf1cb  _InitPieVectTable                     
0     000bf1f1  _copy_in                              
0     000bf215  _memcpy                               
0     000bf232  __args_main                           
0     000bf24b  __register_unlock                     
0     000bf24f  __register_lock                       
0     000bf253  __nop                                 
0     000bf254  __system_pre_init                     
0     000bf256  ___etext__                            
0     000bf256  etext                   

  • Gavin,

    You could open the FPU DSP library project (c28x_fpu_dsp_library), change the project settings for the desired .asm file e.g RFFT_f32.asm as shown in the picture - right click on the file, ...then rebuild the library. Use this in your application project.

    Please try this and let me know if it works.

  • Hi Sira,

    thanks a lot for your quick response. 

    I followed your steps and rebuilt the lib again. unfortunately, it seems still not copy function RFFT_f32() to RAM. 

    Is there any risk if I use below statement out side the lib file?  thanks.

    #pragma CODE_SECTION(RFFT_f32,"ti.ramfuncs");

    #pragma CODE_SECTION(RFFT_f32_mag_TMU0,"ti.ramfuncs");

  • Gavin,

    I see. Please give it a try. I am curious what you find.

    #pragma CODE_SECTION(RFFT_f32,".TI.ramfunc");

    Thanks,

    Sira

  • Hi Sira,

    Found this post, it works. 

    CCS/TMS320F28069: Running code in RAM when booting from FLASH - Code Composer Studio forum - Code Composer...

    e2e.ti.com
    Part Number: TMS320F28069 Tool/software: Code Composer Studio Hi, I'm currently using the TMS28069, but I encountered a problem that I want my 28069 to boot

       .TI.ramfunc      :
    					  {
    					      *(.TI.ramfunc)
    					      c28x_fpu_dsp_library_coff.lib<RFFT_f32.obj>(.text)
    					      c28x_fpu_dsp_library_coff.lib<RFFT_f32_mag_TMU0.c.obj>(.text)
    					  }
        				  LOAD = FLASH_BANK0_SEC1_2,
                          RUN = RAMGS0
                          LOAD_START(_RamfuncsLoadStart),
                          LOAD_SIZE(_RamfuncsLoadSize),
                          LOAD_END(_RamfuncsLoadEnd),
                          RUN_START(_RamfuncsRunStart),
                          RUN_SIZE(_RamfuncsRunSize),
                          RUN_END(_RamfuncsRunEnd),
                          PAGE = 0, ALIGN(4)
    

    And, using below statement, it doesn't work.

        #pragma CODE_SECTION(RFFT_f32,".TI.ramfunc");
        #pragma CODE_SECTION(RFFT_f32_mag_TMU0,".TI.ramfunc");
    

  • That is a good find. And I have used this before. Sorry I missed pointing it out.

    Thanks,

    Sira