linux spi驱动与应用调用流程

来源:互联网 发布:网易域名管理网站 编辑:程序博客网 时间:2024/05/21 11:41
linux spi驱动与应用调度流程


一. 驱动注册流程

1. static int nuc970_spi1_probe(struct platform_device *pdev)
2. err = spi_bitbang_start(&hw->bitbang);
3. INIT_WORK(&bitbang->work, bitbang_work);//初始化工作队列
4. INIT_LIST_HEAD(&bitbang->queue);//初始化链表
5. master->transfer = spi_bitbang_transfer;//绑定spi传输函数(这里只是初始化,真正调用该函数是在应用程序部分,第二部分会讲到,只需记住这个关键的函数)
5.1 将应用层spi传输的数据加入到链表中,同时将数据提交给队列bitbang->work
list_add_tail(&m->queue, &bitbang->queue);//m->queue加入到第4点的bitbang->queue链表中
queue_work(bitbang->workqueue, &bitbang->work);//提交给bitbang->workqueue队列,这使将调用第3点的bitbang_work函数


二. 应用程序调用流程
1. spidev.c (SPI设备层,对应应用程序打开的open\read\write...API)
1. 该文件的内部读、写函数最终都会调用核心层spi.c的API向底层驱动交互数据
1. spi.c(SPI核心层)
1. int spi_write_then_read(struct spi_device *spi, const void *txbuf, unsigned n_tx, void *rxbuf, unsigned n_rx)
2. status = spi_sync(spi, &message);
3. __spi_sync(spi, message, 0);
4. status = spi_async_locked(spi, message);
5. __spi_async(spi, message);
6. master->transfer(spi, message);//这个传输函数是个关键函数,将调用第一.5,这样就将应用与驱动挂起勾了
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕拉绿色大便怎么办 幼儿园孩子不爱学习怎么办 幼儿园老师管不住孩子怎么办 手机支架夹不住怎么办 画水彩没有留白液怎么办 水彩颜料脱胶了怎么办 指甲油涂到手上怎么办 抖音里没有控雨怎么办 qq视频没有特效怎么办 组长刁难员工员工怎么办 想转行没精力怎么办 桔子树无法退款怎么办 保温箱婴儿哭了怎么办 宝宝不爱吃肉泥怎么办 苹果x卡死了怎么办 苹果6手机用着卡怎么办 二个月宝宝肚子胀气怎么办 一岁半宝宝大便干结怎么办 婴儿上大便费劲怎么办 宝宝便秘半年了怎么办 1岁宝宝便秘怎么办 两个月积食了怎么办 婴儿拉青色大便怎么办 一周岁宝宝便秘怎么办 两岁宝宝内火重怎么办 一岁宝宝内火重怎么办 小孩大便有点血怎么办 一岁半宝宝拉血怎么办 宝宝八个月便秘怎么办 七个月孩子便秘怎么办 小孩肚子胀气怎么办消化不良 骨盆窄孩子卡住怎么办 孕38周便秘怎么办 孕晚期肚子发硬怎么办 小孩脸上有斑怎么办 肚子胀怎么办快速解决 肚子发撑发胀怎么办 怀孕超过40周怎么办 练琴近视了怎么办 流产之后一直怀不上怎么办 流产后一年多怀不上怎么办