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.

TMS320F28379D: EMIF2 Access Modes

Part Number: TMS320F28379D


I am attempting to use the EMIF to access registers within an FPGA. 

I configured everything to run on EMIF2 CS2 in 16-bit Async mode. The registers within the FPGA are only 16bit so I don't want to operate with 32-bit accesses as it would be unnecessary overhead ( 1 extra transaction per access). 

The Design and Usage Guide section 5.1 and table 7 seem to imply the EMIF can operate with just 16-bit access, but I have not found out how to do so yet.

App note section 5.1: "The CPU, DMA, and CLA are each capable of using 16-bit and 32-bit access modes for data operations."

I used emif1_16bit_asram.c as an example on how to get everything working and I can see data coming though and being written into the FPGA registers using signal tap so I know the interface is functional. When writing or reading in the code I am also using 16 unsigned int data types. 

I'm pretty confused at this point what section 5.1 is trying to say with the 16-bit and 32-bit access modes in context of table 7.

Is it possible to run only a single 16-bit transaction per access request? 

Thanks for your help,

Max

  • Max,

    You are interpreting the document correctly in that the EMIF will perform 16-bit operations when it is configured for a 16-bit bus and 16-bit variables are used for read and write.

    The table is trying to show the sequence of consecutive operations that will take place on the bus for various combinations of EMIF bus sizes vs variable bit sizes used to initiate operations. For example, if EMIF is configured for an 8-bit bus, writing a 32-bit internal variable to EMIF memory would generate 4x8-bit write operations on the bus.

    The emif1_16bit_asram example can be difficult to follow. Even though it configures the EMIF for a 16-bit bus, the CPU is operating on 32-bit variables. The emif_dc_* examples might be a little easier to follow.

    -Tommy

  • Thanks!

    I was able to get everything running as expected after consulting those examples. 

    emif1_16bit_asram.c was using a long data type for the pointer and was the issue. 

  • I'm happy to hear that you have it working!