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.

How to config EMIFA of C6747 to interface with a 16-bit FIFO without missing any data?



Now, I am using EMIFA of C6747 to read a 16 bit FIFO. When I configure the EMIFA working on 16-bit data bus mode(ASIZE = 1h) to read the FIFO, I miss one data every two data. For example, what I should get is 0,1,2,3,4,5,6,7,8, but I get 0,2,4,6,8 instead. I checked the CS and OE signal via an osciliscope, and find that there are two OE low pulses in each low period of CS. When I config the EMIFA working on 8-bit data bus, I find that there are four OE low pulses in each low period of CS. I guess this is because of C6747 is a 32-bit CPU. But I find EMIFA of C6747 does not support 32-bit data bus.

I just wonder how can I use EMIFA to interface with a 16-bit FIFO without missing any data?

Thanks for helping!

  • Check how you've defined your pointers to that memory.  If you defined it for example as int* then that means it's a pointer to an int, where int is 32 bits.  If you want to do a 16-bit access then you need to define the pointer as "short int*".  In other words, the CPU is asking for 32 bits of data and so the EMIF is converting that request into multiple accesses to match the bus width.