【LV12 DAY12-13 GPIO C 语言与寄存器封装】

GPIO
通用型输入输出,GPIO可以控制连接在其引脚实现信号的输入和输出
芯片的引脚和外部设备相连从而实现与外部硬件的通讯,控制,信号采集的功能。

在这里插入图片描述
控制CHG_COK引脚输出为高电平,LED亮,输出为低电平,LED熄灭。
查找CHG_COK引脚由GPX2_7控制器控制。
在这里插入图片描述
接着查询怎么控制GPX2_7寄存器
在这里插入图片描述
第28-32位控制GPX2_7是输入/输出模式,不能控制发出的是高电平还是低电平

在这里插入图片描述
当配置为输出端口时,引脚状态应该与相应的位相同。
也就是说第7位设置为1,那么GPX2_7引脚输出即为1高电平
使用汇编语言控制寄存器

.text
_start:MAIN:BL LED_CONFIG
LOOP:BL LED_ONBL DELAYBL LED_OFFBL DELAYB LOOPLED_CONFIG:LDR R2,=0x11000c40LDR R1,=0x10000000STR R1,[R2]MOV PC,LRLED_ON:LDR R2,=0x11000c44LDR R1,=0x00000080STR R1,[R2]MOV PC,LRLED_OFF:LDR R2,=0x11000c44LDR R1,=0x00000000STR R1,[R2]MOV PC,LRDELAY:LDR R1,=1000000000
L:SUB R1,R1,#1CMP R1,#0BNE LMOV PC,LRSTOP:B STOP
.end

/*

  • 一.汇编语言访问存储器
  • 1.读存储器
  •  LDR R1,[R2]
    
  • 2.写存储器
  •  STR R1,[R2]
    
  • 二.C语言访问存储器
  • 1.读存储器
  •  data = *ADDR
    
  • 2.写存储器
  •  *ADDR = data
    

*/

使用C语言控制寄存器

void Delay(unsigned int Time)
{while(Time --);
}#if 0
int main()
{/*通过设置GPX2CON寄存器来将GPX2_7引脚设置成输出功能*/*(unsigned int *)0x11000c40 = 0x10000000;while(1){/*点亮LED2*/*(unsigned int *)0x11000c44 = 0x00000080;/*延时*/Delay(1000000);/*熄灭LED2*/*(unsigned int *)0x11000c44 = 0x00000000;/*延时*/Delay(1000000);}return 0;
}
#endif#if 0
#define GPX2CON (*(unsigned int *)0x11000c40)
#define GPX2DAT (*(unsigned int *)0x11000c44)int main()
{GPX2CON = 0x10000000;while(1){/*点亮LED2*/GPX2DAT = 0x00000080;/*延时*/Delay(1000000);/*熄灭LED2*/GPX2DAT = 0x00000000;/*延时*/Delay(1000000);}return 0;
}
#endif#if 0
typedef struct
{unsigned int CON;unsigned int DAT;unsigned int PUD;unsigned int DRV;
}gpx2;#define GPX2 (*(gpx2 *)0x11000c40)int main()
{GPX2.CON = 0x10000000;while(1){/*点亮LED2*/GPX2.DAT = 0x00000080;/*延时*/Delay(1000000);/*熄灭LED2*/GPX2.DAT = 0x00000000;/*延时*/Delay(1000000);}return 0;
}
#endif#if 0
#include "exynos_4412.h"int main()
{GPX2.CON = 0x10000000;while(1){/*点亮LED2*/GPX2.DAT = 0x00000080;/*延时*/Delay(1000000);/*熄灭LED2*/GPX2.DAT = 0x00000000;/*延时*/Delay(1000000);}return 0;
}
#endif#include "exynos_4412.h"int main()
{GPX2.CON = GPX2.CON & (~(0xF << 28)) | (0x1 << 28);while(1){/*点亮LED2*/GPX2.DAT = GPX2.DAT | (1 << 7);/*延时*/Delay(1000000);/*熄灭LED2*/GPX2.DAT = GPX2.DAT & (~(1 << 7));/*延时*/Delay(1000000);}return 0;
}

Tips:

/** 1.unsigned int a; 将a的第3位置1,其他位保持不变* 	******** ******** ******** ********* 	******** ******** ******** ****1**** 	00000000 00000000 00000000 00001000** 	a = a | (1 << 3);** 2.unsigned int a; 将a的第3位置0,其他位保持不变* 	******** ******** ******** ********* 	******** ******** ******** ****0**** 	11111111 11111111 11111111 11110111** 	a = a & (~(1 << 3));** 	3.unsigned int a; 将a的第[7:4]位置为0101,其他位保持不变* 	******** ******** ******** ********* 	******** ******** ******** 0101****** 	1).先清零* 	11111111 11111111 11111111 00001111* 	00000000 00000000 00000000 11110000*  00000000 00000000 00000000 00001111** 	a = a & (~(0xF << 4));** 	2).再置位* 	00000000 00000000 00000000 01010000* 	00000000 00000000 00000000 00000101** 	a = a | (0x5 << 4);** 	=> a = a & (~(0xF << 4)) | (0x5 << 4);*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/338639.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家庭在线记账理财管理系统PHP源码,附带系统安装教程

源码介绍 家庭在线记账理财管理系统&#xff1a;掌控你的财务&#xff0c;简单又直观 源码开放&#xff0c;让你对自己的开支有深入的了解。其图形化的操作界面&#xff0c;使得记账变得轻松简单&#xff0c;非常适合个人或家庭使用。即使是杂货铺&#xff0c;也能通过这个系…

【Python机器学习】SVM——线性模型与非线性特征

SVM&#xff08;核支持向量机&#xff09;是一种监督学习模型&#xff0c;是可以推广到更复杂模型的扩展&#xff0c;这些模型无法被输入空间的超平面定义。 线模型在低维空间中可能非常受限&#xff0c;因为线和平面的灵活性有限&#xff0c;但是有一种方式可以让线性模型更加…

论文阅读1---OpenCalib论文阅读之factory calibration模块

前言 该论文的标定间比较高端&#xff0c;一旦四轮定位后&#xff0c;可确定标定板与车辆姿态。以下为本人理解&#xff0c;仅供参考。 工厂标定&#xff0c;可理解为车辆相关的标定&#xff0c;不涉及传感器间标定 该标定工具不依赖opencv&#xff1b;产线长度一般2.5米 Fa…

JVM工作原理与实战(十二):打破双亲委派机制-自定义类加载器

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、打破双亲委派机制的方法 二、自定义类加载器 1.Tomcat自定义类加载器案例 2.自定义类加载器详解 3.案例解析 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和执…

常用注解/代码解释(仅个人使用)

目录 第一章、代码解释①trim() 方法以及(Arrays.asList(str.split(reg)));②查询字典项②构建后端镜像shell命令解释 第二章、注解解释①PropertySource注解与Configurationproperties注解的区别 第三章、小知识①Linux系统中使用$符号表示变量 友情提醒: 先看文章目录&#…

C++标准学习--decltype

decltype / auto 是具有类型推导功能的 类型 描述/占位 符 decltype: 获取对象或表达式的类型auto: 类型自动推导 decltype 可以获取变量类型&#xff0c; &#xff08;并不同于python的type&#xff0c;但python能打印出type获取的名称&#xff0c; C通过typeid实现&#xff…

echarts -- 柱状图之柱状条如何显示白色侧阴影且鼠标移入时高亮

有个图表是要求柱状条的右下侧显示一个白色的侧阴影&#xff0c;一直没找到合适的方法&#xff0c; 加border或者shadowColor都达不到需求的效果。 因为柱状图 中series里可以包含多组数据&#xff0c;有几组就代表一个系列中有几个数据。这就代表series里要写七组数据。 对于上…

研发型企业怎样选择安全便捷的数据摆渡解决方案?

研发型企业在市场经济发展中发挥着至关重要的作用&#xff0c;研发型企业是指以科技创新为核心&#xff0c;以研发新产品、新技术、新工艺为主要业务的企业。这类企业注重技术创新和研发&#xff0c;持续不断地进行技术创新和产品升级&#xff0c;为经济发展注入新鲜的活力。 研…

iOS 应用上架指南:资料填写及提交审核

摘要 本文提供了iOS新站上架资料填写及提交审核的详细指南&#xff0c;包括创建应用、资料填写-综合、资料填写-IOS App和提交审核等步骤。通过本指南&#xff0c;您将了解到如何填写正确的资料&#xff0c;并顺利通过苹果公司的审核。 引言 在开发iOS应用后&#xff0c;将其…

Camunda SendTask和ReceiveTask

Activiti也有ReceiveTask&#xff0c;作用是进入该节点将自动挂起流程实例&#xff0c;直到被显式的唤醒。Activiti有MailTask是专门发送邮件的。 Camunda同时有SendTask和ReceiveTask&#xff0c;一般成对出现&#xff0c;感觉是将Activiti中的ReceiveTask拆成2个步骤&#x…

一级倒立摆控制 - 非线性 MPC 控制及 MATLAB 实现

系列文章目录 前言 本示例使用非线性模型预测控制器对象和块实现对小车上倒立摆的摆动和平衡控制。 本示例需要 Optimization Toolbox™ 软件为非线性 MPC 提供默认的非线性编程求解器&#xff0c;以计算每个控制间隔的最优控制动作。 一、摆锤/小车装配 本例中的被控对象是…

Tomcat解压打包文件和并部署

一、文件压缩和上传解压 1.本地打包好dist.tar.gz文件 2.通过xftp拖拽上传到知道文件夹下,或者通过命令: cp dist.tar.gz /path/to/destination/folder注:将dist.tar.gz复制到 /path/to/destination/folder文件夹下,该文件夹只是举个例子怎么复制和解压! 3.进入/path/…