Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
13 years ago

Problems printing spi data in console

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;

}

1 Reply

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

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