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

网站首页内容设计理念网站

网站首页内容,设计理念网站,办公室装修设计网站,企业做网站步骤来源#xff1a;百问网_嵌入式Linux wiki_jz2440 新1期视频维基教程 (视频文字版)作者#xff1a;韦东山本文字数#xff1a;3776#xff0c;阅读时长#xff1a;5分钟我们现在来讲I2C控制器怎么写#xff0c;它是I2C程序中最核心的地方#xff0c;我们要先构造几个结构…来源百问网_嵌入式Linux wiki_jz2440 新1期视频维基教程 (视频文字版)作者韦东山本文字数3776阅读时长5分钟我们现在来讲I2C控制器怎么写它是I2C程序中最核心的地方我们要先构造几个结构体这几个结构体放在i2c_controller.h里面。我们要发出I2c传输时要构造出i2c_msg把构造出的i2c_msg扔给下面的i2c_controller.ci2c_controller.c会选择某一个i2c控制器使用里面的master_xfer来传输数据 所以我们需要构造出一个i2c_controller结构体。i2c_controller.h文件文件的内容如下所示#ifndef _I2C_CONTROLLER_H#define _I2C_CONTROLLER_Htypedef struct i2c_msg {unsigned int addr; /* 7bits */int flags; /* 0 - write, 1 - read */int len;int cnt_transferred;unsigned char *buf;}i2c_msg, *p_i2c_msg;typedef struct i2c_controller {int (*int)(void);int (*master_xfer)(i2c_msg msgs, int num);char *name;}i2c_controller, *p_i2c_controller;#endif /* _I2C_CONTROLLER_H */解析我们构造这两个结构体我们要把它放在i2c_controller.c把它用起来i2c_controller.c文件文件的内容如下所示include i2c_controller.h#define I2C_CONTROLLER_NUM 10/* 有一个i2c_controller数组用来存放各种不同芯片的操作结构体 */static p_i2c_controller p_i2c_controllers[I2C_CONTROLLER_NUM];static p_i2c_controller p_i2c_con_selected;void register_i2c_controller(p_i2c_controller *p){int i;for (i 0; i I2C_CONTROLLER_NUM; i){if (!p_i2c_controllers[i]){p_i2c_controllers[i] p;return;}}}解析register_i2c_controller函数用于把参数中的结构体指针注册到p_i2c_controllers指针数组中。/* 根据名字来选择某款I2C控制器 */int select_i2c_controller(char *name){int i;for (i 0; i I2C_CONTROLLER_NUM; i){if (p_i2c_controllers[i] !strcmp(name, p_i2c_controllers[i]-name)){p_i2c_con_selected p_i2c_controllers[i];return 0;}}return -1;}解析select_i2c_controller函数根据参数中的名字(name) 从p_i2c_controllers指针数组中取出对应的结构体指针复制给p_i2c_con_selected结构体指针(静态全局变量)。/* 实现 i2c_transfer 接口函数 */int i2c_transfer(i2c_msg msgs, int num){return p_i2c_con_selected-master_xfer(msgs, num);}解析i2c_transfer接口函数调用选择的p_i2c_con_selected成员中master_xfer函数。void i2c_init(void){/* 注册下面的I2C控制器 */s3c2440_i2c_con_add();/* 选择某款I2C控制器 *//* 调用它的init函数 */}解析s3c2440_i2c_con_add()函数把定义的s3c2440_i2c_con结构体注册到p_i2c_controllers数组中。s3c2440_i2c_controller.c文件中断服务函数当发成中断时就会调用中断服务函数代码如下void i2c_interrupt_func(int irq){/* 每传输完一个数据将产生一个中断 *//* 对于每次传输, 第1个中断是已经发出了设备地址 */}s3c2440_i2c_con_init函数用来初始化I2C,控制器代码如下void s3c2440_i2c_con_init(void){/* 设置时钟 *//* [7] : IIC-bus acknowledge enable bit, 1-enable in rx mode * [6] : 时钟源, 0: IICCLK fPCLK /16; 1: IICCLK fPCLK /512 * [5] : 1-enable interrupt * [4] : 读出为1时表示中断发生了, 写入0来清除并恢复I2C操作 * [3:0] : Tx clock IICCLK/(IICCON[3:0]1). * Tx Clock 100khz 50Mhz/16/(IICCON[3:0]1) */IICCON (06) | (15) | (300);/* 注册中断处理函数 */register_irq(27, i2c_interrupt_func);}解析1).IICCON (06) | (15) | (300); 设置IICCON控制寄存器。选择发送时钟使能中断。2).register_irq(27, i2c_interrupt_func)注册中断处理函数当发生I2C中断的时候就会调用i2c_interrupt_func中断处理函数。初始化完成后就可以调用do_master_tx写I2C从机了这个函数仅仅启动I2C传输然后等待直到数据在中断服务程序中传输完毕后再返回。函数代码如下void do_master_tx(p_i2c_msg msg){msg-cnt_transferred 0;/* 设置寄存器启动传输 *//* 1. 配置为 master tx mode *//* 2. 把从设备地址写入IICDS */IICDS msg-addr1;/* 3. IICSTAT 0xf0 , 数据即被发送出去, 将导致中断产生 */IICSTAT 0xf0;/* 后续的传输由中断驱动 *//* 循环等待中断处理完毕 */while (msg-cnt_transferred ! msg-len);}解析1).IICDS msg-addr1: 把从机地址(高7位所以需要向右移一位)写入到IICDS寄存器中。2).IICSTAT 0xf0:设置IICSTAT寄存器将s3c2440设为主机发送器并发出S信号后紧接着就发出从机地址。后续的传输工作将在中断服务程序中完成。do_master_rx函数的实现和do_master_tx函数类似代码如下void do_master_rx(p_i2c_msg msg){msg-cnt_transferred 0;/* 设置寄存器启动传输 *//* 1. 配置为 Master Rx mode *//* 2. 把从设备地址写入IICDS */IICDS (msg-addr1)|(10);/* 3. IICSTAT 0xb0 , 从设备地址即被发送出去, 将导致中断产生 */IICSTAT 0xb0;/* 后续的传输由中断驱动 *//* 循环等待中断处理完毕 */while (msg-cnt_transferred ! msg-len);}解析 1).IICDS (msg-addr1)|(10)把从设备地址写入IICDS前7位是从机地址第8位表示传输方向(0表示写操作1表示读操作)。s3c2440传输函数根据标志位flags来指明是读/写(1读 0写)。代码如下int s3c2440_master_xfer(p_i2c_msg msgs, int num){int i;for (i 0; i num; i){if (msgs[i]-flags 0)/* write */do_master_tx(msgs[i]);elsedo_master_rx(msgs[i]);}}我们定义一个i2c_controller结构体s3c2440_i2c_con。下面的代码对他进行初始化。static i2c_controller s3c2440_i2c_con {.name s3c2440,.init s3c2440_i2c_con_init,.master_xfer s3c2440_master_xfer,};s3c2440_i2c_con_add函数把上面定义的s3c2440_i2c_con结构体注册到上层的i2c_controller数组中。void s3c2440_i2c_con_add(void){register_i2c_controller(s3c2440_i2c_con);}「新品首发」STM32MP157开发板火爆预售首批仅300套
http://www.pierceye.com/news/838930/

相关文章:

  • asp网站制作工具怎么样做国际网站生意
  • 签订网站建设合同山东建设工程招标网官方网站
  • 迅速建设企业网站外贸网站服务器选择
  • 建设网站详细流程wordpress建站数据库
  • 贵阳建立网站聊城网站建设设计
  • 网站怎么设置关键词百度网址大全首页设为首页
  • 中企动力网站怎么样怎么做公司内网网站
  • 求职网站网页模板一个网站可以做多少个小程序
  • 深圳市住房和建设局网站登录怎样在百度建网站
  • 外国做视频在线观看网站asp简单网站开发
  • 介绍移动互联网的网站有哪些做网站时怎么选择数据库类型
  • 工厂的网站在哪里做的免费建站的软件
  • 中国电子系统建设三公司网站网站建设上如何提高市场竞争力
  • 青海住房和建设厅网站电子商务网站建设与管理教案
  • 免费在线自助建站搬瓦工可以长期做网站
  • 建设外贸网站报价外贸网站制作推广公司
  • 网站开发人员工作内容白沟做网站
  • 产品展示网站模板源码产品宣传
  • 国内wordpress有名的网站河南住房和城乡建设厅网站资质
  • 湛江seo建站wordpress5.1更新
  • 泊头公司做网站做网站价格差异很大
  • 网站开发啊wordpress 图片本地化
  • 尚品中国多年专注于高端网站建设免费加盟无需店面
  • 游标卡尺 东莞网站建设wordpress 域名解析
  • 站长工具视频怎么开免费网站
  • 网站地址怎么申请注册最近新闻大事
  • interidea 做网站网站域名备案 更改
  • 哈尔滨公司做网站动画设计的大学排名
  • 网站建设与网页制作试卷网站搜索引擎优化推广
  • 网站子目录设计网站开发数据库技术