URL
https://opencores.org/ocsvn/tiny_spi/tiny_spi/trunk
Subversion Repositories tiny_spi
[/] [tiny_spi/] [trunk/] [README] - Rev 6
Go to most recent revision | Compare with Previous | Blame | View Log
OpenCores tiny SPIAuthor(s):- Thomas Chou <thomas@wytron.com.tw>This is an 8 bits SPI master controller. It features optionalprogrammable baud rate and SPI mode selection. Altera SPI doesn'tsupport programmable rate which is needed for MMC SPI, nor doesXilinx SPI.It is small. It combines transmit and receive buffer and remove unusedfunctions. It takes only 36 LEs for SPI flash controller, or 53 LEs forMMC SPI controller in an Altera CycoloneIII SOPC project. While AlteraSPI takes around 143 LEs. OpenCores SPI takes 857 LEs and simple SPItakes 171 LEs.It doesn't generate SS_n signal. Please use gpio core for SS_n, whichcosts 3- LEs per pin. The gpio number is used for the cs number inu-boot and linux drivers.Parameters:BAUD_WIDTH: bits width of programmable dividersclk = clk / ((baud_reg + 1) * 2)if BAUD_DIV is not zero, BAUD_WIDTH is ignored.BAUD_DIV: fixed divider, must be evensclk = clk / BAUD_DIVSPI_MODE: value 0-3 fixed mode CPOL,CPHAotherwise (eg, 4) programmable mode in control reg[1:0]Registers map:base+0 R shift registerbase+4 R buffer registerW buffer registerbase+8 R status[1] TXR transfer ready[0] TXE transter endW irq enable[1] TXR_EN transfer ready irq enable[0] TXE_EN transter end irq enablebase+12 W control (optional)[1:0] spi modebase+16 W baud divider (optional)Program flow:There is an 8-bits shift register and buffer register.1. after reset or idle, TXR=1, TXE=12. first byte written to buffer register, TXR=0, TXE=13. buffer register swabbed with shift register, TXR=1, TXE=0shift register has the first byte and starts shiftingbuffer register has (useless) old byte of shift register4. second byte written to buffer register, TXR=0, TXE=05. first byte shifted,buffer register swabbed with shift register, TXR=1, TXE=0shift register has the second byte and starts shiftingbuffer register has the first received byte from shift register6. third byte written to buffer register, TXR=0, TXE=07. repeat like 5.9. last byte written to buffer register, TXR=0, TXE=010. last-1 byte shifted,buffer register swabbed with shift register, TXR=1, TXE=0shift register has the last byte and starts shiftingbuffer register has the last-1 received byte from shift register11. last byte shifted, no more to write, TXR=1, TXE=1shift register has the last received byteInterrupt usage:Interrupt is controlled with irq enable reg.For performace issue, at sclk > 200KHz, interrupt should not be used andpolling will get better result. In this case, interrupt can bedisconnected in SOPC builder to save 2 LEs. A 100MHz Nios2 is able toserve 25 MHz sclk using polling.This core uses zero-wait bus access. Clock crossing bridges betweenCPU and this core might reduce performance.
Go to most recent revision | Compare with Previous | Blame | View Log
