Project

General

Profile

Simple Code/Doc for FPGA toggle of GPIO from DSP

Added by stefan nielsen over 5 years ago

Hi im trying to toggle a pin in the FPGA from the DSP. Is there a doc(howto) describing the order of configuration/initialization and usage?.

Been looking at files from MDK_2014-01-13\sw\DSP\lib\core and MDK_2014-01-13\sw\common\fpga (fpga.h, fpga_gpio.h, DspFpgaGpio.cpp) but its still unclear to me what steps are involved.

ps. Got the HelloWorldDSP project running, so anything the could be added to it would be a bonus.
pps. The fpga(LX45) is loaded with .bin file from this thread: (https://support.criticallink.com/redmine/boards/12/topics/604)

thanks in advance
Stefan


Replies (7)

RE: Simple Code/Doc for FPGA toggle of GPIO from DSP - Added by stefan nielsen over 5 years ago

Hi

If i want to toggle both pin 7 and pin 15 at the same time i have an issue (both work independently). Pin 7 goes high, but as soon an i write to pin 15 it goes low again. I tried with mpGpio->WritePins(0,0x3,1)/mpGpio->WritePins(0,0x3,0) doesn't work for me either only pin 7 goes high this way. Im measuring the pin in J702 with a scope.

//init
mpGpio = new tcDspFpgaGpio((void*)0x66000280);//GPIO
mpGpio->~tcDspFpgaGpio ();//clear isr callback
mpGpio->SetPinDirection(0, 0, TRUE, 0);
mpGpio->SetPinDirection(0, 1, TRUE, 0);

for(int kkk=0;kkk<10;kkk++) {
mpGpio->SetPinValue(0,0,1); //pin 7 high
mpGpio->SetPinValue(0,1,1); //pin 15 high
for(int kki=0;kki<1000;kki++); //for delay
mpGpio->SetPinValue(0,0,0); //pin 7 low
mpGpio->SetPinValue(0,1,0); //pin 15 low
for(int kkii=0;kkii<1000;kkii++); //for delay
}

anybody got a hint as to what could be the cause ?

RE: Simple Code/Doc for FPGA toggle of GPIO from DSP - Added by Michael Williamson over 5 years ago

Do you have the inputs of the GPIO core for offsets 0 and 1 connected in you FPGA design?

RE: Simple Code/Doc for FPGA toggle of GPIO from DSP - Added by stefan nielsen over 5 years ago

Not sure what you mean with input ?,
both are mapped in the VHDL code as output. and set as output with SetPinDirection()
I can set both pin high, only not at the same time.

RE: Simple Code/Doc for FPGA toggle of GPIO from DSP - Added by Michael Williamson over 5 years ago

The code for the DSP GPIO control does a read modify write. It Reads the input state of the entire bank, masks the value you are trying to change into the register, and writes the register back out.

If, in your VHDL, you do not connect the "i_io" pins to the Pad (output value), then the readback state of the output will not work properly, it will readback a "0" and then get written back to the register as a zero, turning off your IO.

Can you post a copy of the VHDL that has the GPIO component instantiated (don't need all the code).

-Mike

RE: Simple Code/Doc for FPGA toggle of GPIO from DSP - Added by Michael Williamson over 5 years ago

The driver could be rewritten to contain a shadow mask of the desired output register, but that is not the current implementation.

-Mike

RE: Simple Code/Doc for FPGA toggle of GPIO from DSP - Added by Michael Williamson over 5 years ago

Also, you should not be calling the destructor. This line is not OK:

mpGpio->~tcDspFpgaGpio ();//clear isr callback

Why are you trying to remove the ISR handler?

RE: Simple Code/Doc for FPGA toggle of GPIO from DSP - Added by stefan nielsen over 5 years ago

Thank you, you where spot, it solved the issue with only having one pin high at a time.

The following works

mpGpio->SetPinValue(0,0,1); //pin7
mpGpio->SetPinValue(0,1,1); //pin15

if i use

mpGpio->WritePins(0,0xFFFF,1); //all pins

only pin 7 goes high, any ideas ?

thanks

    (1-7/7)
    Add picture from clipboard (Maximum size: 500 MB)