Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
20709 Discussions

Problems printing spi data in console

Altera_Forum
Honored Contributor II
1,045 Views

Hi everybody  

I'm working in a project and i'm developing an SPI Analizer Protocol. I create two modules spi, one as a master and the other as a slave and I'm using these code statements because I want to trasmit data between two DE0-Nano because i need to verify if the data is being transmitted but when i try to print in screen the data doesn't appear .Can somebody help me with this?  

 

Another question :when i set to 0 the status register, all the bits inside this register are set to 0 or which bits are changed  

 

 

here is my code for slave: 

int main(void) 

alt_u32 rddata=0x0; 

alt_u32 status; 

IOWR_ALTERA_AVALON_SPI_STATUS(SPI_BASE,0x0000); 

IOWR_ALTERA_AVALON_SPI_TXDATA(SPI_BASE,0x1001); 

IORD_ALTERA_AVALON_SPI_RXDATA(SPI_BASE); 

while(1) 

do 

status = IORD_ALTERA_AVALON_SPI_STATUS(SPI_BASE); 

while((status & ALTERA_AVALON_SPI_STATUS_RRDY_MSK)==0 && 

(status & ALTERA_AVALON_SPI_STATUS_RRDY_MSK) == 0); 

rddata= IORD_ALTERA_AVALON_SPI_RXDATA(SPI_BASE); 

printf("Data: %x\n",rddata); 

IOWR_ALTERA_AVALON_SPI_TXDATA(SPI_BASE, rddata); 

 

 

code for master is : 

int main(void) 

void send(alt_u16 write); 

alt_u16 receive(); 

alt_u16 wrdata=0xabcd; 

alt_u16 rddata; 

IOWR_ALTERA_AVALON_SPI_SLAVE_SEL(SPI_BASE, 1); 

IORD_ALTERA_AVALON_SPI_RXDATA(SPI_BASE); 

while(1) 

send(wrdata); 

rddata=receive(); 

return 0; 

void send(alt_u16 write) 

alt_u32 status; 

alt_u16 data; 

 

IOWR_ALTERA_AVALON_SPI_CONTROL(SPI_BASE, 0x0400); 

IORD_ALTERA_AVALON_SPI_RXDATA(SPI_BASE); 

do 

status = IORD_ALTERA_AVALON_SPI_STATUS(SPI_BASE); 

while (((status & ALTERA_AVALON_SPI_STATUS_TRDY_MSK) == 0)&& 

(status & ALTERA_AVALON_SPI_STATUS_RRDY_MSK) == 0); 

IOWR_ALTERA_AVALON_SPI_TXDATA(SPI_BASE , write); 

data=IORD_ALTERA_AVALON_SPI_RXDATA(SPI_BASE); 

do 

status = IORD_ALTERA_AVALON_SPI_STATUS(SPI_BASE); 

while ((status & ALTERA_AVALON_SPI_STATUS_TMT_MSK) == 0); 

IOWR_ALTERA_AVALON_SPI_CONTROL(SPI_BASE, 0); 

 

alt_u16 receive() 

alt_u16 data; 

alt_u32 status; 

IOWR_ALTERA_AVALON_SPI_CONTROL(SPI_BASE, 0x0400); 

IORD_ALTERA_AVALON_SPI_RXDATA(SPI_BASE); 

do 

status = IORD_ALTERA_AVALON_SPI_STATUS(SPI_BASE); 

while (((status & ALTERA_AVALON_SPI_STATUS_TRDY_MSK) == 0 ) && 

(status & ALTERA_AVALON_SPI_STATUS_RRDY_MSK) == 0); 

IOWR_ALTERA_AVALON_SPI_TXDATA(SPI_BASE , 0x00); 

data=IORD_ALTERA_AVALON_SPI_RXDATA(SPI_BASE); 

do 

status = IORD_ALTERA_AVALON_SPI_STATUS(SPI_BASE); 

while ((status & ALTERA_AVALON_SPI_STATUS_TMT_MSK) == 0); 

IOWR_ALTERA_AVALON_SPI_CONTROL(SPI_BASE, 0); 

return data; 

}
0 Kudos
1 Reply
Altera_Forum
Honored Contributor II
270 Views

AFAIK the Altera SPI component can only be a master. For the slave part you will need to make your own component.

0 Kudos
Reply