当前位置: 首页 > news >正文

dogip网站开发金华网站建设

dogip网站开发,金华网站建设,做网站老板不发工资我拿尾款,广州疫情到底有多严重目录 前言一、配置内容二、驱动代码实现三、总结 前言 本笔记总结linux下使用gpio模拟spi时序的方法,基于arm64架构的一个SOC,linux内核版本为linux5.10.xxx,以驱动三线spi(时钟线sclk,片选cs,sdata数据读和写使用同一…

目录

    • 前言
    • 一、配置内容
    • 二、驱动代码实现
    • 三、总结

前言

本笔记总结linux下使用gpio模拟spi时序的方法,基于arm64架构的一个SOC,linux内核版本为linux5.10.xxx,以驱动三线spi(时钟线sclk,片选cs,sdata数据读和写使用同一个数据线进行分时复用做半双工)的hmc704x为例;

一、配置内容

设备树配置

1.在芯片的引脚模式寄存器中配置 cs ,sclk , mosi ,miso为 gpio模式;
2.在spi控制器下添加pinctrl-x = 引脚引用,对引脚的模式进行生效

3.在spi控制器的节点下添加spi从设备节点,并定义cs,sclk,mosi,miso的gpio属性:
spics = <引用>;
spiclk = <引用>;
spimiso = <引用>;
spimosi = <引用>;

二、驱动代码实现

1、gpio请求

int spics_gpio = 0;
int spiclk_gpio = 0;
int spimiso_gpio = 0;
int spimosi_gpio = 0;
void  xxx_probe(xxxx)
{spics_gpio = of_get_named_gpio(spi->dev.of_node,"spics",0);if(spics_gpio<0){printk("faild to request gpio!\n");}gpio_request(spics_gpio,NULL);gpio_direction_output(spics_gpio,0);spiclk_gpio = of_get_named_gpio(spi->dev.of_node,"spiclk",0);if(spics_gpio<0){printk("faild to request gpio!\n");}printk("get GPIO%d\n",spiclk_gpio);gpio_request(spiclk_gpio,NULL);gpio_direction_output(spiclk_gpio,0);spimiso_gpio = of_get_named_gpio(spi->dev.of_node,"spimiso",0);
if(spimiso_gpio<0){printk("faild to request gpio!\n");
}
gpio_request(spimiso_gpio,NULL);gpio_direction_output(spimiso_gpio,0);spimosi_gpio = of_get_named_gpio(spi->dev.of_node,"spimosi",0);if(spimosi_gpio<0){printk("faild to request gpio!\n");}
gpio_request(spimosi_gpio,NULL);gpio_direction_output(spimosi_gpio,0);
}

2、读写函数实现
读写时序

在这里插入图片描述

读函数

#define HMC7044_WRITE		(0 << 15)
#define HMC7044_READ		(1 << 15)
#define HMC7044_CNT(x)		(((x) - 1) << 13)
#define HMC7044_ADDR(x)		((x) & 0xFFF)static int xxx_read(unsigned int reg,unsigned int *val)
{u16 cmd,i;u32 data,datatemp;uint8_t tempvalue = 0;cmd = HMC7044_READ | HMC7044_CNT(1) | HMC7044_ADDR(reg);data = cmd; gpio_direction_output(spimosi_gpio,0);gpio_set_value(spics_gpio,1);gpio_set_value(spiclk_gpio,0);gpio_set_value(spimosi_gpio,0);udelay(5);gpio_set_value(spics_gpio,0);for(i=0;i<16;i++){gpio_set_value(spiclk_gpio,0);datatemp = ((data>>(15-i)) & 0x1);if(datatemp>0) gpio_set_value(spimosi_gpio,1);else gpio_set_value(spimosi_gpio,0);udelay(5);gpio_set_value(spiclk_gpio,1);udelay(5);}gpio_direction_input(spimosi_gpio);for(i=0;i<8;i++){gpio_set_value(spiclk_gpio,0);udelay(5);tempvalue<<=1;gpio_set_value(spiclk_gpio,1);if(gpio_get_value(spimosi_gpio)){tempvalue++;}udelay(5);}gpio_set_value(spics_gpio,1);*val = tempvalue;return 0;
}

写函数

static int xxx_write(unsigned int reg,unsigned int val)
{ u16 cmd,i;u32 data,datatemp;cmd = HMC7044_WRITE | HMC7044_CNT(1) | HMC7044_ADDR(reg);data = (cmd << 8) | (val & 0xFF);gpio_direction_output(spimosi_gpio,0);gpio_set_value(spics_gpio,1); gpio_set_value(spiclk_gpio,0);gpio_set_value(spimosi_gpio,0);udelay(5);gpio_set_value(spics_gpio,0);for(i=0;i<24;i++){gpio_set_value(spiclk_gpio,0);datatemp = ((data>>(23-i)) & 0x1);if(datatemp>0) gpio_set_value(spimosi_gpio,1); else gpio_set_value(spimosi_gpio,0);udelay(5);gpio_set_value(spiclk_gpio,1);udelay(5);}gpio_set_value(spics_gpio,1);return 0;
}

三、总结

具体的芯片读写协议不一样,按具体spi时序协议做相应修改即可;

http://www.ds6.com.cn/news/12506.html

相关文章:

  • 程序员培训班要什么学历无锡百度快照优化排名
  • 郑州同济医院靠谱吗广州优化防控措施
  • 龙口网站制作公司软件推广赚佣金渠道
  • 怎么才能建立网站实时seo排名点击软件
  • 四川建设网和四川省公共资源交易信息网安卓优化大师官方下载
  • 公司网站被黑有不良信息 做笔录广告联盟平台挂机赚钱
  • 小程序网站开发公司域名查询 ip
  • 做视频解析网站香港头条新闻
  • 西安高端网站建设首选百度竞价开户3000
  • 手机网易网自动app优化最新版
  • 扫描购物网站建设北京高端网站建设
  • 安阳做网站的费用seo网站关键词优化怎么做
  • 廊坊哪里有做网站的如何自己制作网站
  • win2008 建立网站关键词查询工具
  • 网站做轮播图的意义图片识别搜索引擎
  • dw旅游网站模板下载百度官网首页下载
  • 大庆今天最新公告北京seo优化多少钱
  • 做数学题挣钱的网站seo软件优化工具软件
  • 做投融资平台的网站都有哪些?手机广告推广软件
  • 做淘宝优惠券网站要多少钱互联网营销师考证多少钱
  • 做外贸家纺资料网站windows优化大师卸载
  • 关于网站建设外文文献百度搜索推广方法
  • 邢台网站建设最新报价seo整站优化方案
  • web2py做的网站免费软文发布平台有哪些
  • 在香港做网站需要什么企业qq和个人qq有什么区别
  • 网站规划的流程个人博客模板
  • 网站源码下载软件营销网站建设哪家好
  • Wordpress网站调用代码做网站设计的公司
  • 英文b2c网站建设南京seo排名
  • 做设计有哪些接私活的网站神马seo服务