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.

AWR1843: Translate address from DSS to MSS

Part Number: AWR1843

Hi,

I have a pointer to an L3 memory location which is initialized in the dss subsystem. I wish to write to that memory directly from mss (without using mailbox or hsram), but all of my l3 heap is allocated by dss.

I see that there exists a function in  C:/ti/mmwave_sdk_03_03_00_03/packages/ti/drivers/soc/docs/doxygen/html/group___s_o_c___d_r_i_v_e_r___e_x_t_e_r_n_a_l___f_u_n_c_t_i_o_n.html called SOC_translateAddress, which has as possible directions SOC_TranslateAddr_Dir_TO_OTHER_CPU and SOC_TranslateAddr_Dir_FROM_OTHER_CPU, but I am not sure how to use it. Can I call it from mss to get an address of a buffer in dss? And how would I do that, if the pointer to that buffer exists only in dss (the variable *buffPtr in dss for example can't be reached from mss) ? I also don't understand how this function even returns the translated address and where, so I would be grateful for an explanation.

My current idea, without using this function, is to send the offset of the buffer from the start of l3 heap in dss to mss using mailbox, and then add the offset to the start of l3 in mss (I know it's 0x51000000) and get the address I need. But this way seems too messy. 

I would appreciate any useful advice, thanks.

Jovana

  • Hi Jovana,

    The SOC_TranslateAddr_xxx function simply replaces the address prefix to remap the address from MSS to DSS or vice versa.  It doesn't help if the other core doesn't know of the buffer in the first place.

    One way to do what you want is to use the linker to place the buffer at a known address.  Doing this, you don't have to worry about address translation because it would be already known.

    In the linker command file, you would do this:

    In the MEMORY section:

        L3SRAM:         o = 0x20000000, l = 0xff000  (leave space for your buffer, 0x1000 in this example)
        L3BUFF :         o = 0x200ff000,   l = 0x1000  (this is the location of your new buffer)
    Then in the SECTIONS section:
        .myL3buff:   {} > L3BUFF
    And in the code, you would define your buffer to be placed at your new memory section:
    #pragma DATA_SECTION(myData,".myL3buff");
    volatile int myData[];
    You would do this in both MSS and DSS projects.
  • Thank you, this was very helpful. 

    Jovana