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.
我在编写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;
能否帮忙指出哪些地方配置出现了错误
谢谢