Använder ett 25AA1024 spi-minne samt PIC32MX695F512L
Använder SPI1
Problemet är att vi får två extra byte i början, vid mottagning.
Läskoden ser ut så här:
Kod: Markera allt
short SPI_mem_Read_bytes(uint8 *p, int a, int n) {
uint8 temp, i; //KTL20130107 DEBUG
// start reading
SpiChnClose(SPI_MEM_PORT);
//ckp=0 cke=1 SPI_MODE_00
SpiChnOpen(SPI_MEM_PORT, SPI_MODE_00 | SPI_OPEN_MSTEN | SPI_OPEN_MODE8 | SPI_OPEN_ON | SPI_OPEN_ENHBUF, SPI_MEM_PORT_DIV);
SPI_mem_CS_clr();
SpiChnPutC(SPI_MEM_PORT, SPI_MEM_READ);
// send adress
SpiChnPutC(SPI_MEM_PORT, 255&(a>>16));
SpiChnPutC(SPI_MEM_PORT, 255&(a>>8));
SpiChnPutC(SPI_MEM_PORT, 255&(a));
SPI_mem_buf_empty();
// get data
while(n) {
SpiChnPutC(SPI_MEM_PORT, 0);
while( SpiChnIsBusy (SPI_MEM_PORT));
temp = SpiChnReadC(SPI_MEM_PORT); //KTL20130107 DEBUG
*p = temp; //SpiChnReadC(SPI_MEM_PORT); KTL20130107 DEBUG
p++;
n--;
}
while( SpiChnIsBusy (SPI_MEM_PORT));
SPI_mem_CS_set();
SpiChnClose(SPI_MEM_PORT);
}
Kod: Markera allt
void SPI_mem_buf_empty()
{
uint8 temp;
while( SpiChnIsBusy (SPI_MEM_PORT));
while(!SpiChnRxBuffEmpty(SPI_MEM_PORT))
{
SpiChnReadC(SPI_MEM_PORT);
temp=SpiChnRxBuffCount(SPI_MEM_PORT);
}
}