完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
硬件平台:GD32F4xx 在使用SPI驱动时,发现应用层调用SPI配置,其实还是直接调用spi_core.c内的函数,而不是通过通用的read write control接口 且如果采用目前的read write接口不适用,因为通常的SPI通讯都是发送完一个地址之后读取数据,但是现在的read和write都是单独的纯写或者纯读 rt_size_t rt_spi_transfer(struct rt_spi_device *device, const void *send_buf, void *recv_buf, rt_size_t length) { rt_err_t result; struct rt_spi_message message; RT_ASSERT(device != RT_NULL); RT_ASSERT(device->bus != RT_NULL); result = rt_mutex_take(&(device->bus->lock), RT_WAITING_FOREVER); if (result == RT_EOK) { if (device->bus->owner != device) { /* not the same owner as current, re-configure SPI bus */ result = device->bus->ops->configure(device, &device->config); if (result == RT_EOK) { /* set SPI bus owner */ device->bus->owner = device; } else { /* configure SPI bus failed */ rt_set_errno(-RT_EIO); result = 0; goto __exit; } } /* initial message */ message.send_buf = send_buf; message.recv_buf = recv_buf; message.length = length; message.cs_take = 1; message.cs_release = 1; message.next = RT_NULL; /* transfer message */ result = device->bus->ops->xfer(device, &message); if (result == 0) { rt_set_errno(-RT_EIO); goto __exit; } } else { rt_set_errno(-RT_EIO); return 0; } __exit: rt_mutex_release(&(device->bus->lock)); return result; } 个人觉得可以修改spi_dev.c和spi_core.c来完善此驱动,大家觉得有必要吗? |
|
相关推荐
3个回答
|
|
怎么个完善方法?
|
|
|
|
应该让应用层不直接调用到内核层,而是像read/wrtie接口一样注册进去,之后应用层调read/write/control接口,但是有一个问题是针对spi有的需要write寄存器后马上read的处理 这个如果只用现在的read和write感觉不行
|
|
|
|
设备驱动除了基本的 open close read write,可以扩展一些 ops 接口,用于特殊的操作
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
413 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
1762 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1135 浏览 0 评论
1604 浏览 0 评论
1418 浏览 0 评论
74678 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 16:29 , Processed in 0.674183 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号