赞
踩
SPI类的参数:设备名称,devname设备节点名称,总线,device片选信号线,SPI模式,时钟频率,中断。SPI类继承VDev类。
SPI协议在spi.cpp文件中,涉及到了cdev和device的操作。cdev字符设备是linux系统设备之一。还有块设备,网络设备。cdev是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据。字符设备是面向流的设备,包括键盘,显示屏,串口。linux用户程序通过设备文件来使用驱动程序操作字符设备。cdev与incode的关系:incode成员含有cdev结构体成员的指针。cdev与file_operations的关系:cdev_init()建立cdev与file_operations之间的连接,为字符设备驱动提供接口函数,比如open,read,write等。
字符设备驱动结构cdev介绍 - 知乎 (zhihu.com)
SPI初始化:
连接总线_dev = up_spiinitialize(_bus),取消选择设备使得引脚电平由高变低(取消片选信号),检查设备是否在线(默认在线),初始化cdev(SPI类是基于cdev类的派生类,初始化cdev会创建设备节点)。
SPI传输:
- case LOCK_PREEMPTION: {
- irqstate_t state = irqsave();
- result = _transfer(send, recv, len);
- irqrestore(state);
- }
- break;
- case LOCK_THREADS:
- SPI_LOCK(_dev, true);
- result = _transfer(send, recv, len);
- SPI_LOCK(_dev, false);
- break;
-
- int SPI::_transfer(uint8_t *send, uint8_t *recv, unsigned len)
- {
- SPI_SETFREQUENCY(_dev, _frequency);
- SPI_SETMODE(_dev, _mode);
- SPI_SETBITS(_dev, 8);
- SPI_SELECT(_dev, _device, true);
-
- /* do the transfer */
- SPI_EXCHANGE(_dev, send, recv, len);
-
- /* and clean up
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。