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.
Hi Everyone:
I would like to make a little more control on the SRIO initialization in C6455. Here is what I did. In the EVM, on the DSP and Mezzanine board, after I power up the system, I loaded the slave and the master code for SRIO communication. I run the slave first, and the program is waiting in the initializaiton loop until I run the master, which made the slave to get successful SRIO initialization.
Then I reset CPU in the CC studio Debug menu on both sides. Then I tried to do the same as above. However, this time the slave can make though the initialization stage without master part running. It seems that I lose the control of the SRIO port initialization.
I thought this is because the SRIO was enabled. So I use write 00 to the 31-30 bit in the PERCFG0 register after slave and master finished communication. But this method did not work. In order to do so, I have to power down the EVM board and power up again.
Can any of you have similar experience? How could my DSP program have the same initialization procedure as it has after the first power up?
Thank you very much,
I wasn't clear on what was motivating your question. Is this so that while you're developing code you don't have to power cycle your board every time, or is it for some kind of "soft reset" functionality in your product?
If it's for development, then you should look under Debug -> Advanced Resets. Through that menu you can reset the whole device rather than just the CPU. I believe that feature is not supported when using the on-board emulation though so you would have to use an external emulator to do that.
When writing to PERCFG0 did you follow the unlocking procedure for that register? Did it read back with the expected value? Have you tried reseting the SRIO through the GBL_EN register?
Brad
I just want to make the development easier in the EVM for my SRIO project. If I choose power cycle every time, I have to restart the CCstudio and reconnect the board.
You are right, I do not have the advanced resets.
Yes, I follow the unlocking procedure. Also I notice there is restriction to do that (The Peripheral Configuration Register (PERCFG0) is used to change the state of the peripherals. One write is allowed to this register within 16 SYSCLK3 cycles after the correct key is written to the PERLOCK register). In the memory, I can find the register has been successful set. I just tried what you suggested by resetting the SRIO through the GBL_EN register. It did not work either.
Thank you Brad.
Since this is just for development purposes, do you have an external emulator handy that you could use instead of the on-board emulation? If so, then I believe you will have access to the Advanced Resets menu which would allow you to reset the whole chip.
Here's a quick sequence you could try instead:
That seems strange to me that neither using PERCFG0 or GBL_EN is fixing the issue. Can you try opening a register window to the SRIO registers and check if they all go back to their reset values when you modify GBL_EN?
Alt-C method is a good solution, which I have already been using it.
As to the PERCFG0 or GBL_EN resetting
- GBL_EN, after resetting to 0, the following two registers is reset in the memory
02D0 0030 RIO_GBL_EN Peripheral Global Enable Register
02D0 0034 RIO_GBL_EN_STAT Peripheral Global Enable Status
In fact, when I put the GBL_EN reset on slave and master dsp code before they end, I can run the programs correctly after CPU reset in CCstudio. In another word, after resetting, the slave will be initalized only when the master is initialized, which is the same as I expected.
- PERCFG0, after resetting (31 30 bit) to 00, the register does have 00 values in the SRIOCTL field.
However, it does not work even I did the same as I did using GBL_EN.