Hi,
I am working with a Terasic DE0-Nano-SoC board, and am working in DS-5 Community Edition 17.1.
I have created some PIO peripheral registers in Qsys / Platform Designer, connected to some well tested firmware, containing registers;
This data register PIO is bidirectional :
So in a c program, how do I change the data transfer direction ?
I appear to be able to write from an output only PIO, but so far only read from this bi-directional PIO.
Works when reading a read only register in my firmware :
SkelData_read = *(uint32_t *)h2p_lw_pio_d_addr;
Writing then reading a R/W register in my firmware always returns 0 :
*(uint32_t *)h2p_lw_pio_d_addr = Data;
Help appreciate,
Beau
OK, I have found information that has helped, but I still have problems outputting data.
Below is the crucial code, I am hoping someone can see where I am going wrong.Is it the address calculation for the Data Direction register ?This is for the Data register (which works for the output only PIOs) :h2p_lw_pio_d_addr=virtual_base + ( ( unsigned long )( ALT_LWFPGASLVS_OFST + PIO_D_BASE ) & ( unsigned long)( HW_REGS_MASK ) );Is this right for the Data Direction register ?h2p_lw_pio_d_dirn = virtual_base + ( ( unsigned long )( ALT_LWFPGASLVS_OFST + PIO_D_BASE + 1 ) & ( unsigned long)( HW_REGS_MASK ) );I am setting this as :Write :Set Data (8 bit) : Data = strtol(argv[4], &strptr, 10); // Data to write*(uint32_t *)h2p_lw_pio_d_addr = Data;Output it :*(uint32_t *)h2p_lw_pio_d_dirn = 0xff ; // All PIO Data bits set to output (write)Set Input :*(uint32_t *)h2p_lw_pio_d_dirn = 0x00 ; // All PIO Data bits set to input (read)Read Data :SkelData_read = *(uint32_t *)h2p_lw_pio_d_addr;Thanks,Beau Webber
I have had a reply on the Altera Forumn, that has given me the answer :
h2p_lw_pio_d_dirn = virtual_base + ( ( unsigned long )( ALT_LWFPGASLVS_OFST + PIO_D_BASE + 4 ) & ( unsigned long)( HW_REGS_MASK ) );
I understand the 1 vs 4 is due to word or byte addressing.
Working nicely now, able to read and write the registers in my own firmware, from C in Linux, via the SoC PIOs.Time to add the rest of my firmware .... Much appreciated austin944.Beau Webber