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.

PROCESSOR-SDK-AM64X: Usage of Linker-Files and TCMs

Part Number: PROCESSOR-SDK-AM64X

Hello, 

I wanted to use the TCMs in a way we will place the irq, svc-stacks etc. in it. 

So the technical reference manual states the ATCM is located at 0x00000000 and BTCM at 0x41010000.

It also says that each core has 32 KB in Dual-Core mode for each R5FSS as far as I understand. But how do I assign them in the linker-script for each core? Does the ATCM for the other R5FSS start at 0x00000000 too and how do I split ATCM in two 32 KB segments for each R5FSS?
I tried to use 0x00000000 + 0x00008000 but somehow this leads to a problem with CCS, because when I try to load the image for mcu 0_1 which's ATCM is 32KB (+0x8000) from 0x00000000 it says it can't load at memory 0x8000.

So how do I use the TCMs correctly? I didn't find any explanation or example where it is described correctly in the MCU+SDK (07.03.02).

Best regards

Felix

  • Hi Felix, each R5F core has 64kB TCM in dual-core mode.  This is split into 32kB ATCM and 32kB BTCM.  For each core, there is a 'local' memory view  and a 'global' memory view.  Using the local view, the TCM for each core appears in the same location for that core.  So in this view, TCMA would be 0x0000.0000 - 0x0000.7FFF and TCMB would be 0x4101.0000 to 0x4101.7FFF for each core.  So for each linker script for each core, you would use the same TCMA and TCMB addresses

    In the global view, the TCM memories all appear at different locations but you would likely only use this view if you're reading/writing across cores.

  • thank you!

    But another question comes up: If I use the ATCM and it is located at 0x0000.0000 how is the MAIN Domain memory map addressed? because 0x0000.0000 at the MAIN Domain is another place than the ATCM at the  R5FSS0/1 Memory Map


    I tried to look that up in the IPC-examples linker files but it's a bit confusing because the ATCM is assigned the same way as the IPC-memory is assigned. But the IPC-Memory is located at the MSRAM_256K7_RAM of the MAIN Domain Memory Map I guess. But it would be another place viewed from the local view of the R5FSS0/1 Memory Map which is used for the ATCM.


    How does the linker script distinguish those places and how can I do that?

    Best regards

    Felix

  • Hi Felix,

    All the cores see the MAIN memory map the same.  So the MSRAM banks will be at the same address for all cores.  From 0x7000.0000 to 0x 701F.FFFF.  

    So in the linker file you would use the same memory address for MSRAM_256K7_RAM for all the cores and they will all point to the same place.  It's only ATCM and BTCM that use that same address but point to different physical locations.