Hi all, we have designed a board based on C6412. The C6412 acts as PCI interface for the board: on the EMIF we have connected the C6412 SDRAM and some external peripheral chips. The HOST performs slave PCI accesses to the C6412 in order to access the peripherals connected to EMIF. The C6412 makes PCI master accesses to the HOST for the data that require fast communication between the DSP and the HOST. The HOST is a standard x86 based PC motherboad and our board is inserted in a standard PCI slot. Most of the C6412 firmware (program code) is located in L2 memory. This is the code that requires fast execution.
Only a small part of the program is located in the C6412 SDRAM. We are not using any L2 additional cache (L2 cache size is zero). The host uses C6412's GPIOs (reads GPVAL register through non-prefetchable PCI accesses) in order to verify the status of one of the peripherals. We have noticed that when GPVAL reads are performed by the host the behavior of the C6412 FW is corrupted, as if C6412 does not fetch program code or data correctly from its SDRAM. On the contrary, if we remove host read accesses to GPVAL, the behavior of the C6412 FW is perfect. We have made a second test. We have changed the program code allocation, i.e. moved all the program code to L2 memory (just for test, of course) and checked the behaviour of C6412 while the HOST performs read accesses to GPVAL. In this case the behaviour of the C6412 program is correct. In order to better verify this behavior, we have made a third test too.We have alternated host's read accesses to GPVAL and to EMIF SDRAM. In some cases, after the host read access to GPVAL, the host read access to SDRAM returns corrupted data. It seems that the SDRAM read access returns bad data, but does not corrupt SDRAM data. When the host stops reading GPVAL, the HOST read accesses always return correct data. We also verified that the same situation occurs if we make host read accesses to other C6412's peripheral registers (i.e. RSTSRC) instead of GPVAL. Our questions are:
1) Did you know that GPVAL (and other accesses to C6412 internal register though non-prefetchable address space) may lead to corrupted read accesses to the C6412 SDRAM?
2) Is it possible that we are not correctly using some part of the C6412 DSP or that we have forgot some necessary configuration? Can you provide us any suggestion? Thank you very much in advance. Best Regards.