嵌入式家庭网关中SPI接口的软件模拟
return-EFAULT;
for(num=0;num<count;num++){
for(i=0;i<8;i++){
iopdata=((SPI_write[num]&0x1)<<11)+(iopdata&0xfffff7ff);
SPI_write[num]=SPI_write[num]>>1;
iopdata=iopdata^0x1000; //时钟输出
}
}
return count;
}
//中断响应函数
static int SPI_irq(int irq,void *dev_id,struct pt_regs *regs)
{
intpnd=intpnd|0X1; //清中断位
wake_up_interruptible(&SPI_wait); //唤醒睡眠队列
return
1;
}
//字符设备驱动接口
static struct file_operations SPI_fops={
owner; THIS_MODULE,
read: SPI_onlyread,
write: SPI_onlywrite,
};
//初始化函数
int_init SPI_init(void)
register_chrdev(29,"SPI"&SPI_fops);//设备注册函数
init_waitqueue_head(&SPI_wait);
if(!request_irq(0,SPI_irq,SA_SAMPLE_RANDOM,"SPI"NULL)){ //中断申请
return-EFAULT;
}
iopmod=(iopmod&0xffffe7ff)=0x1800+iopmod; //设置通用I/O口模式
iopcon=(iopcon&0xffffffe0)+0xle+iopcon;//设置通用I/O模式
enable_irq(0); //开中断
return 0;
}
module_init(SPI_init);
MODULE_LICENSE("GPL);
EXPORT_NO_SYMBOLS;
《嵌入式家庭网关中SPI接口的软件模拟(第3页)》