驱动使能DAC模块

DAC的操作原理图如下:
在这里插入图片描述

输入数据从DIN进入16为的移位寄存器,其中低2位必须为0,高4位为无效数据,中间的10位为有效数据,将中间的10位有效数据上传到DAC寄存器。DAC寄存器把10位的数据转换成模拟信号输出。

DAC模块时序图:
在这里插入图片描述

操作步骤:
1.CS:电平从高到低下降沿期间选中芯片
2.SCLK(时钟引脚)的上升沿把数据移入16位移位寄存器(先移最高位MSB,最后移最低位LSB)
3.CS(片选引脚)从低变高的上升沿期间把其中的10位有效数据传入DAC寄存器。发出DOUT信号

DOUT数据来自16位移位寄存器第1个数据是上次数据遗留下的LSB位(最低位),其余15个数据来自16位移位寄存器的高15位,16位移位寄存器的LSB在下一个周期的第1个时钟传输,LSB必定是0,所以当前的周期里读出16位移位寄存器的15位数据也足够了。

1.编写应用程序

2.修改设备树
进入Linux内核源码目录
输入/ecspi1查找spi1
在这里插入图片描述

参考红色框内写dac的设备树。
①compatible设置为spidev
②reg = <0>表示dac为ecspi1中的第0个设备,使用<&gpio4 26 GPIO_ACTIVE_LOW>这个片选引脚。
通过查询拓展版原理图:
在这里插入图片描述

可以看出SPI CS0 所使用的20号引脚。
查询底板原理图:
在这里插入图片描述

可知20号引脚接到CSI_DATA5引脚。
查询核心板引脚表MYC-Y6ULX_Pin_list_V13:
在这里插入图片描述

CSI_DATA5
所以可知使用的是<&gpio4 26 GPIO_ACTIVE_LOW>这个片选引脚。

③spi-max-frequency为最大频率。通过查询模块芯片手册
在这里插入图片描述

将时钟引脚的低电平25ns+高电平25ns =50ns
1秒=1000000000 纳秒(ns);
F=1000000000/50=20,000,000Hz = 20MHz

写入的节点为:
在这里插入图片描述

:wq保存退出,执行make dtbs,编译设备树。
编译完成后拷贝到开发板

输入vi drivers/spi/Makefile查看spidev
在这里插入图片描述

输入vi .config,查询CONFIG_SPI_SPIDEV是否配置进内核
在这里插入图片描述

上图说明没有配置进。

输入make menuconfig
在这里插入图片描述

输入/CONFIG_SPI_SPIDEV
在这里插入图片描述

可知该设置的目录。
进入该目录。
在这里插入图片描述

找到User mode SPI device driver support,输入M。使其编译为模块,单独加载。
按右箭头,选择Exit,一直选择Exit退出保存。

回到终端输入make modules,编译内核模块。

编译完后拷贝到开发板 cp drivers/spi/spidev.ko ~/nfs_rootfs/

将dtb文件拷贝到开发板boot目录下,重启。

重启后
在这里插入图片描述

可看出dac已经编译进设备树。

输入insmod spidev.ko,安装驱动

输入./dac_test /dev/spidev0.0 运行程序即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
09-20 399

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值