Data:2019/1/23      author:wangsong

需求:要求能有产生一路1MHZ以上的正弦激励信号,预留外接时钟接口,频率、幅值可调。

方案:

1、PWM波转模拟量(PAC =PWM to Analog Convertor)是一种PWM信号转模拟信号的专用芯片,模块最大频率只够200KHZ。(否决)

2、外接DDS模块,由beaglebone控制DDS模块,从而产生不同相位频率的正弦波,需要自己写驱动直接控制DDS。(测试)

3、DDS最基础的AD9833的频率就能达到需求,用集成STM32作为局部控制器,AM335X通过串口发送控制指令。(否决)

遇到问题:采购的AD9833用的是标准三线式串行接口兼容SPI,根据数据手册和电路原理图,则只需要这三个数据口;而beaglebone预留的是4线的SPI,其中对应引脚和设备树中对应如下表,来自于博客:https://blog.csdn.net/wyt2013/article/details/16921573 ,而三线制SPI和四线制的SPI是否只是删除一个单向数据线我没有深究,直接做法是根据AD8933数据手册里提供的时序,使用GPIO口模拟。其中数据手册以及其他参考资料在亚德诺(ADI)半导体官网下载:https://www.analog.com/cn/products/ad9833.html

说明:FSYNC输入是电平触发输入,用作帧同步和芯片使能。仅当FSYNC处于低电平时,才可将数据传输至器件。要开始串行数据传输,应将FSYNC拉低,并注意FSYNC至SCLK下降沿建立时间t 7 的最小值。FSYNC变为低电平后,串行数据即会在16个时钟脉冲的SCLK下降沿移入器件的输入移位寄存器。可在SCLK的第16个下降沿后将FSYNC拉高,并注意SCLK下降沿至FSYNC上升沿时间t 8 的最小值。或者,FSYNC可以在16倍数个SCLK脉冲期间保持低电平,然后在数据传输结束时变为高电平。这样,在FSYNC保持低电平期间,可以连续流形式载入16位字;FSYNC仅在载入最后一个字的第16个SCLK下降沿之后变为高电平。SCLK可以是连续的,也可以在写操作期间置于高电平或低电平空闲状态。无论何种情况,当FSYNC变为低电平(t 11 )时,SCLK都必须处于高电平。

实施情况:

参考源码:https://www.analog.com/cn/products/ad9833.html#product-requirement

参考博客:基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(二)之cdev与read、write

https://blog.csdn.net/u014281970/article/details/82145664

对作者的源码的说明:

  1. 源码将硬件资源引脚写死,固定的三个引脚,所以不考虑设备树等高级写法。
  2. 源码采用的GPIO口模拟三线式串行通信,根据上面的时序写成。

调试过程中遇到的问题:

  1. GPIO口的定义,在程序中将GPIO口硬件资源写死指定的对应引脚,按照网上百度到的说明GPIO1_17指的则是32*1+17=49,则引脚号宏定义为49。根据BBB_Header_Table.pdf查得BBB的引脚号。但是调试时候发现不对,不知道是不是因为接了扩展板。

经过调试,大学霸博客提供的这两个图配上微雪的LCD扩展板可以使用,其中定义的GPIO_XX,驱动程序中写死的引脚号则是XX。但也不是所有的都能用,因为有很多引脚以及被使用,查看微雪扩展板的原理图,看看能使用哪些引脚,最好在beaglebone的、sys/class/gpio中添加下引脚进行测试,看看是否能正常输出高低电平。最终本人使用的引脚是P9header:P11 、P15 、 P22引脚,对应的驱动程序中引脚号是:30、48、49.

  1. 驱动源码中相关函数说明:
  • file_operations结构体详解:

https://www.cnblogs.com/chen-farsight/p/6181341.html

  • copy_to_user 、copy_from_user函数:

https://blog.csdn.net/xiaodingqq/article/details/80150347

  • 内核MKDEV(MAJOR, MINOR)宏:

http://blog.sina.com.cn/s/blog_752fa65f0100osao.html

https://blog.csdn.net/angle_birds/article/details/7822416?utm_source=blogxgwz4

  • gpio_request()函数:

https://blog.csdn.net/beyondioi/article/details/6984406

  • Linux字符设备驱动之cdev_init()系列:

https://blog.csdn.net/tigerjibo/article/details/6412613

  • linux硬件设备操作函数 open(/dev/ietctl, O_RDWR|...)

https://blog.csdn.net/pkigavin/article/details/8580703

  • IOCTL函数用法详解:

https://blog.csdn.net/z_hualin/article/details/77892932

  • 驱动模块编译时要保证依赖的内核源码和板子上运行的内核一致:

https://blog.csdn.net/qq_32059343/article/details/86572422

https://blog.csdn.net/qq_32059343/article/details/86572477

  • 修改调试成功的源码分析:

https://blog.csdn.net/qq_32059343/article/details/86583353

实验结果:

Beaglebone移植DDS模块驱动(AD9833)相关推荐

  1. android+usb转串口+唯一id,Android平台3G模块驱动移植-USB转串口

    Android平台3g模块是通过ril库来支持数据.短信.彩信.电话.第三方通话.USSD等功能的.其相应的组件有:rild用来为rild socket建立文件,pppd和chat为拨号文件,libr ...

  2. Linux移植EC20 4G模块驱动简易教程

    关于4G模块常见的品牌与型号: 品牌 型号 市场价格 芯片组 状态 HUAWEI ME909s-821 210-260 海思芯片,只有五模 在售 HUAWEI ME909s-521 400左右 高通芯 ...

  3. 小白求,用RE文件管理器移植移远EC20 4G模块驱动。 有重谢。请加w jiao1998524

    小白求,用RE文件管理器移植移远EC20   4G模块驱动.  有重谢.请加w  jiao1998524

  4. WiFi模块驱动移植

    项目背景 WiFi模块rlt8812au 替换成rlt8812cu,支持rlt8812cu驱动且保持兼容原有模块 驱动移植 根据厂家提供的驱动包,修改makefile和Kconfig文件,根据需要修改 ...

  5. GEC6818 移植 rtl8723bu wifi驱动

    文章目录 1. 配置内核 2.RTL8723BU 模块驱动编译 2.1 下载解压 2.2 配置编译 3. openssl 移植 3.1 下载解压 3.2 配置 3.3 编译安装 4. libnl 移植 ...

  6. 十二、Hi3556移植RTL8189 WIFI驱动

    Hi3556V200从代理拿到的SDK包中,是不包含RTL8189模块的驱动的.我们从某WIFI模块厂家要到了RTL8189的芯片驱动,于是开始着手移植驱动到平台上面. 一.Linux驱动添加RTL8 ...

  7. USB-WIFI RTL8188CU模块驱动

    RTL8188CU模块概述 Realtek的8188cu模块WiFi是通过usb接口挂载设备.以下是我对模块使用的所有开发工作. Linux内核驱动适配和编译 由于芯片驱动官方已经最高支持kernel ...

  8. openwrt移植LTE模块

    Openwrt移植LTE模块 1.  增加具体设备驱动 文档位置:/drivers/usb/serial/option.c 注意:是target开头目录下的文件 在文件中添加如下内容: static ...

  9. Android 开机自动加载新wifi模块驱动

    在android ROM 开发中经常会遇到产品更换wifi模块的情况,一般常见的wifi驱动android内核中自带都有,无需过多调试,要是碰上内核中没有的就需要根据厂商提供的驱动进行移植. wifi ...

  10. Hi3798移植4G模块(移远EC20)

    Hi3798移植4G模块(移远EC20) 一.前言 二.USB驱动修改 2.1 添加VID和PID信息 2.2 添加空包处理机制 2.3 添加复位重连机制 2.4 修改内核配置 三.GoBiNet测试 ...

最新文章

  1. 网络流Dinic cur当前弧优化
  2. 什么场景使用mysql的存储过程_mysql存储过程的使用
  3. windows 10 内置bash 安装32位支持
  4. 8s yaml 配置生成_cfg4py:一个严肃的Python配置模块应有的风格-层级式、部署环境自适应、自动补全...
  5. 缓存系列之一:buffer、cache与浏览器缓存
  6. Python打包exe,以及解决闪退
  7. df -h无响应问题解决
  8. Flask入门(三)~补充及虚拟环境
  9. VOIP技术发展综述与外呼系统的关系
  10. 关于DM MPP的搭建
  11. 字符串折叠、涂色问题
  12. 应用实践 | Apache Doris 在网易互娱的应用实践
  13. sakila数仓实战案例
  14. Python excel转成html页面 excel 在线预览
  15. normalize.css 类似,使用normalize.css遇到的问题?
  16. 2012系统服务器网络限制,Windows server 2012 r2对计算机的网络速度限制在~30mbps
  17. 2022年,前端er们都在看哪些网站?(含面试、接活、学习、摸鱼等)
  18. android 逆向入门知识
  19. 两台Sawyer机械臂在rviz中的运动规划
  20. 概率dp 期望 逆推

热门文章

  1. exoplay切换全屏_如何使用rotation-degrees手动旋转(rotate)exoplayer2播放器
  2. 用计算机用两个珠子能拨出那些数字,人教版一年级数学上册第三单元教案
  3. vue 下载文件,文件损坏无法打开
  4. war 包的解压与打包
  5. BootStrap-datepicker日期插件
  6. 模拟幅度调制系统抗干扰性能仿真分析
  7. 初高级分析师的能力和工具体系,指标雷达图!
  8. 利用easyCHM制作JavaAPI帮助文档
  9. Android聊天软件开发(基于网易云IM即时通讯)——发送图片消息(五)
  10. 日照科技中等专业学校 远程预付费系统的设计与应用