- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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; }Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
AFAIK the Altera SPI component can only be a master. For the slave part you will need to make your own component.
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page