This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

335x SPI slave 驱动 硬件fifo的问题

Other Parts Discussed in Thread: SYSCONFIG

我在编写spi slave驱动的时候发现 芯片上的spi slave 上的fifo 并没有被开启 实际上还是一个字节发送完毕以后一次中断 

在linux 操作系统中导致响应不过来

寄存器初始化代码如下:

(*mcspi_sysconfig) |= (2|(3<<8));
while(!((*mcspi_sysstatus)&1))
printk("reseting... \r\n");
printk("done\r\n");
(*mcspi_modulctrl) = ((1u)|(1<<2));//PIN34 no use //MS -> slave
(*mcspi_syst)= (1<<10)|(1<<9)|(0<<8)|(1<<5)|(1<<4);
*mcspi_ch0conf= (0<<0)|(0<<1)|(1<<6)|(7<<7)| (1<<16)|(0<<17)/*data 0!!mosi*/| (0<<18)/*data1miso*/ |(1<<20)/*force*/|(0<<24)/*起始位电平*/|(1<<27)/*fifo transmit enable*/|(1<<28)/*fifo receive enable*/|(1<<29);
*mcspi_irqenable= (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<17);
*mcspi_xferlevel = (1<<16)|(0xf0<<8)|(0x7<<0);
*mcspi_ch0ctrl=0x1;
*mcspi_syst &= ~((unsigned int) 1 <<11) ;
*mcspi_irqstatus = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<17);

中断处理的代码如下:

spin_lock(&sentbuf_lock);

// printk("--------detail sent data---------\r\n");
if((*mcspi_ch0stat)&(1<<3))
{


while((!((*mcspi_ch0stat)&(1<<4))))
if(sentsize)//处理发送数据
{
if(sentoff==2048)
sentoff=0;
*mcspi_tx0=(unsigned int)(((unsigned char*)sentbuffer)[sentoff]);
sentoff++;
sentsize--;
}
#if 1
else//填充32字节 0x00
{
*mcspi_tx0=freebyte;
}
#endif
if(sentsize)
printk("sentsize= %d\r\n",sentsize);
}

spin_unlock(&sentbuf_lock);

spin_lock(&recvbuf_lock);
while(!((*mcspi_ch0stat)&(1<<5) ))
{

if(recvsize < 2048)
recvsize++;
recvbuffer[(recvoff+recvsize)%2048]=*mcspi_rx0;

if(recvoff == 2048)
recvoff =0;

}

spin_unlock(&recvbuf_lock);

*mcspi_syst &= ~(1<<11);

*mcspi_irqstatus |= (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<17);

kill_fasync(&fasync_queue,SIGIO,POLL_IN);


return IRQ_HANDLED;

能否帮忙指出哪些地方配置出现了错误 

谢谢