thank you fouryu and shuiyan
MCP2510接收到数据后,将数据放到它的接收缓冲器中(它有2个接收缓冲器)
然后就会向ARM产生中断,通知ARM通过SPI接口来读取这一帧数据。
这样,我感觉,必须是每一帧产生一个中断。
驱动程序中中断处理程序,如下:
static void s3c2410_isr_mcp2510(int irq, void *dev_id, struct pt_regs *reg)
{
unsigned char byte;
DPRINTK("enter interrupt!\n");
byte=MCP2510_Read(CANINTF);
if(byte & RX0INT){
MCP2510_Read_Can(3,&(mcp2510dev.MCP2510_Candata[mcp2510dev.nCanRevpos]));
MCP2510_WriteBits(CANINTF, ~RX0INT, RX0INT); // Clear interrupt
NextCanDataPos(mcp2510dev.nCanRevpos);
DPRINTK("mcp2510dev.nCanRevpos= %d\n", mcp2510dev.nCanRevpos);
DPRINTK("mcp2510dev.nCanReadpos= %d\n", mcp2510dev.nCanReadpos);
}
if(byte & RX1INT){
MCP2510_Read_Can(4,&(mcp2510dev.MCP2510_Candata[mcp2510dev.nCanRevpos]));
MCP2510_WriteBits(CANINTF, ~RX1INT, RX1INT); // Clear interrupt
NextCanDataPos(mcp2510dev.nCanRevpos);
}
if(byte & (RX0INT|RX1INT)){
wake_up_interruptible(&(mcp2510dev.wq));
}
}
从这可以看到,SPI对MCP内部的接收缓冲器驱动一帧数据还是比较复杂的。我不是很理解你说的:
引用: 引用 4 楼 shuiyan 的回复:
MCP2510配置完之后,准备开始大数据量传输前,设置成发送完不产生中断的。你将数据填到2410的SPI的FIFO中,通讯事情就交到SPI控制器了,只有在SPI通…
请多多指点,感谢