TQ2440开发板-LED全亮全灭控制程序设计

目录

  • 什么是GPIO
  • S3C2440的GPIO
    • 访问和控制方式:3种寄存器
  • TQ2440的LED灯
    • 底板原理图---LED测试部分
    • 核心板原理图----GPIO部分
  • LED控制---设计思想
    • 整体代码 && 代码研读
    • 配置GPIO端口为输出模式
    • 控制LED的全亮和全灭

真就是从零学起。

什么是GPIO

  • GPIO,通用输入输出(General Purpose l/O)的简称,其引脚可以供编程使用。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备,对这些设备的控制,有时只需要一位控制信号就够了,即只要开/关两种状态就够了,比如灯亮与灭。对这些设备的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。
  • 通过读取GPIO输入状态,可以获取外部设备的信号或状态;通过设置GPIO输出状态,可以控制外部设备的操作,如点亮LED灯、控制电机等。
  • 通过配置引脚为GPIO模式,可以实现对外部设备的数字输入和输出操作。通过控制GPIO引脚的电平状态,可以与其他数字电路或外部设备进行通信和交互。

S3C2440的GPIO

  • S3C2440是一款由韩国三星电子公司推出的嵌入式处理器芯片
  • 外设接口:S3C2440芯片集成了多种外设接口,包括UART(串口)、I2C(串行总线)、SPI(串行外设接口)、USB(通用串行总线)、LCD控制器、SD卡接口等,方便与外部设备进行通信和数据交互。
  • 存储器接口:S3C2440支持多种存储器接口,包括NAND Flash、NOR Flash、SRAM等,可以方便地扩展存储容量。
  • S3C2440有130个GPIO口,分为A~J共9组:GPA、GPB、GPC…GPJ。通过设置相应寄存器,可以选择某个GPIO口是用于输入、输出还是其他特殊功能。例如可以设置GPH6做为一般的输入、输出端口,或者用于串口。

在这里插入图片描述

访问和控制方式:3种寄存器

每组GPIO都可以通过三个寄存器来控制与访问,分别为:

  • GPxCON: GPIO配置寄存器:用来选择GPIO口的功能;其中PORTA与PORTB~PORTJ在功能选择方面有所不同。GPACON中每一位对应一个IO口(共23个),当某位为0时,相应的IO为输出;当某位为1时,相应的引脚为地址线或用于地址控制。

在这里插入图片描述

  • GPXDAT:GPIO数据寄存器:用于读/写引脚;当引脚被设为输入时,读此寄存器可知相应引脚电平状态是高还是低;当引脚被设为输出时,写此寄存器相应的位可令此引脚输出高电平或低电平;当端口配置为功能引脚时,将读取未定义的值。
    在这里插入图片描述
  • GPxUP :上拉电阻控制寄存器:用于控制端口引脚的上拉电阻;某位为1时,相应引脚无内部上拉电阻;为0时,相应的引脚使用内部上拉电阻。(上拉电阻: 由于管脚悬空比较容易受到外界的电磁干扰,因此通过一个电阻来将此管脚与高电平相连让其固定在高电平,这样的电阻称之为上拉电阻)
    在这里插入图片描述

TQ2440的LED灯

  • 一共有4个。

在这里插入图片描述

底板原理图—LED测试部分

  • 观察发光二极管(LED):低电平导通。
  • 这4个可编程LED采用低电平有效(发光)

在这里插入图片描述

核心板原理图----GPIO部分

在这里插入图片描述
所以我们可以得知:

  • TQ2440的4 个用户可编程LED直接与CPU的GPIO 相连接,资源占用如下图所示:

在这里插入图片描述

LED控制—设计思想

  • 1.先将相应的引脚设置为输出模式
  • 2.再向相应的引脚输出低电平即可点亮LED灯
  • 【注意】:不要修改其他寄存器的内容信息!!

整体代码 && 代码研读

#include "stdio.h"#define rGPBCON (*(volatile unsigned *)0x56000010) //Port B control
#define rGPBDAT (*(volatile unsigned *)0x56000014) //Port B data
#define rGPBUP  (*(volatile unsigned *)0x56000018) //Pull-up control B#define LED1_ON ~(1<<5)/*...11111111011111*/
#define LED2_ON ~(1<<6)/*...11111110111111*/
#define LED3_ON ~(1<<7)/*...11111101111111*/
#define LED4_ON ~(1<<8)/*...11111011111111*/#define LED1_OFF (1<<5)/*...00000000100000*/
#define LED2_OFF (1<<6)/*...00000001000000*/
#define LED3_OFF (1<<7)/*...00000010000000*/
#define LED4_OFF (1<<8)/*...00000100000000*//*配置GPIO端口为输出模式*/
void Led_port_init(void)
{/*将rGPBCON寄存器的11-18位置*********00000000***********/rGPBCON &= ~((3<<10)|(3<<12)|(3<<14)|(3<<16));/*将rGPBCON寄存器的11-18位置*********01010101**********/rGPBCON |= (1<<10)|(1<<12)|(1<<14)|(1<<16);
}/*延时函数---通过多次执行空操作来实现一定的延时*/
void delay(int times)
{int i;for(;times>0;times--)for(i=0;i<400;i++){}
}int main(void)
{int i;	int data;Led_port_init();	while(1){	printf("Please enter the value of data: 1 or 0\n");scanf("%d",&data);	switch(data){case 1:/*全亮,将6-9位置0*/rGPBDAT = rGPBDAT&(LED1_ON)&(LED2_ON)&(LED3_ON)&(LED4_ON);/*设rGPBDAT = 11110000111100001111000011110000(LED1_ON)&(LED2_ON)&(LED3_ON)&(LED4_ON)=11111111111111111111111000011111运算规则:只有两个数的二进制同时为1,结果才为1。则rGPBDAT = 11110000111100001111000000010000*/		delay(10000);break;case 0:		/*全灭,将6-9位置1*/rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);/*设rGPBDAT = 11110000111100001111000011110000(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF)=00000000000000000000000111100000运算规则:参加运算的两个数只要两个数中的一个为1,结果就为1。则rGPBDAT = 11110000111100001111000111110000*/		delay(10000);break;}}
}

配置GPIO端口为输出模式

在这里插入图片描述

控制LED的全亮和全灭

在这里插入图片描述

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

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

相关文章

Vue3+ElementPlus,image动态更新src

我想通过点击图片动态更新src&#xff0c;代码如下&#xff1a; <el-image style"width: 100px; height: 30px" :src"ImageUrl" click"refresh" :fit"fit" /> const ImageUrl reactive(http://localhost:9001/getImage)const…

20个Python源码项目下载

20个很不错的Python项目源码&#xff0c;其中包括适合毕业设计的项目。这些资源中涵盖了Django 3版本的项目&#xff1a; DjangoMysqlBulma实现的商场管理系统源码 PythonDjango实现基于人脸识别的门禁管理系统 PythonFlaskMySQL实现的学生培养计划管理系统 Python大熊猫主题人…

使用yolov7进行多图像视频识别

1.yolov7你可以让你简单的部署,比起前几代来说特别简单 #下面是我转换老友记的测试视频,可以看到几乎可以准确预测 2.步骤 1.在github官网下载代码 https://github.com/WongKinYiu/yolov7 2.点击下载权重文件放到项目中 3.安装依赖,我的python版本是3.6的 pip install -r requ…

Java8 之 Optional 详解

目录 一. 前言 二. Optional 用法 2.1. 概要 2.2. 创建 Optional 对象 2.3. 获取 Optional 对象的值 2.4. 检查 Optional 对象是否为空 2.5. 安全访问 Optional 对象的值 2.6. 处理过滤操作 2.7. 处理转换操作 2.8. 使用默认值 三. Optional 使用场景 3.1. 空判断 …

RPC与HTTP的详细比较

RPC 示例&#xff08;使用 gRPC&#xff09; 在这个例子中&#xff0c;我们使用 gRPC&#xff08;一个流行的 RPC 框架&#xff09;来演示 RPC 的基本用法。我们创建一个简单的计算器服务&#xff0c;客户端可以调用服务器上的加法操作。 服务定义 - Calculator.proto&#x…

深度解析 Dockerfile:构建可重复、可扩展的Docker镜像

文章目录 什么是Dockerfile&#xff1f;Dockerfile的基本结构常用Dockerfile指令解析1. FROM2. LABEL3. WORKDIR4. COPY5. RUN6. EXPOSE7. ENV8. CMD 构建可重复、可扩展的Docker镜像1. 指定基础镜像的版本2. 合理使用缓存3. 精简镜像4. 使用多阶段构建 总结 &#x1f388;个人…

提升网页交互体验的秘密武器——防抖和节流

说在前面 在现代Web开发中&#xff0c;提高网页性能是至关重要的。本文介绍了防抖和节流这两种常用的性能优化技术&#xff0c;通过控制函数的执行频率&#xff0c;有效减少不必要的计算和网络请求&#xff0c;从而提升用户体验和页面加载速度。 函数节流 节流是指限制一个函数…

【分享】centos7vim异常

问题描述: 虚拟机安装centos7&#xff0c;安装vim后异常&#xff0c;上下左右键会变成abcd,退格键无法删除。 系统版本: CentOS Linux release 7.5.1804 (Core) 原因: 暂时未知&#xff0c;有可能是vim安装时&#xff0c;一个组件未安装导致。后续追溯 解决方案: echo &quo…

nginx之rewrite

rewrite rewrite 作用是地址重定向&#xff0c;语法&#xff1a;rewrite regex replacement[flag]; 根据 regex&#xff08;正则表达式&#xff09;匹配请求地址&#xff0c;然后跳转到 replacement&#xff0c;结尾是flag标记 如下例子&#xff0c;请求地址是 http://192.168.…

异常 Exception 练习题 (未完成)

异常 Exception 练习题 try-catch异常处理1234 异常1&#xff08;没有自己写&#xff09;234 try-catch异常处理 1 class Exception01 {public static int method() {try {String[] names new String[3];//String[]数组if (names[1].equals("tom")) {//NullPointe…

血的教训---入侵redis并免密登录redis所在服务器漏洞复现

血的教训—入侵redis并免密登录redis所在服务器漏洞复现 今天就跟着我一起来入侵redis并免密登录redis所在服务器吧&#xff0c;废话不多说&#xff0c;我们直接开始吧。 这是一个体系的学习步骤&#xff0c;当然如果基础扎实的话可以继续往下面看 以下都是关联的文章&#xff…

Unity3D 导出的apk进行混淆加固、保护与优化原理(防止反编译)

Unity3D 导出的apk进行混淆加固、保护与优化原理&#xff08;防止反编译&#xff09; 目录 前言&#xff1a; 准备资料&#xff1a; 正文&#xff1a; 1&#xff1a;打包一个带有签名的apk 2&#xff1a;对包进行反编译 3&#xff1a;使用ipaguard来对程序进行加固 前言&…

C++ 学习之匿名名字空间的使用细节

匿名命名空间&#xff08;anonymous namespace&#xff09;是C中的一种特殊命名空间&#xff0c;它没有显式的名称。匿名命名空间可以用来定义仅在当前文件中可见的全局变量、函数和类。 由于没有名字&#xff0c;所以相当于直接引入&#xff0c;但是没有引入定义 如果发生冲…

小程序如何刷新当前页面?

在小程序中&#xff0c;刷新当前页面通常有两种方法&#xff1a; 使用 wx.navigateBack 方法&#xff1a; wx.navigateBack({delta: 1 }) 这将返回上一页&#xff0c;并刷新页面。你可以通过调整 delta 参数来控制返回的页面数。例如&#xff0c;如果你想要返回到两页之前的页…

Echarts 柱状图添加标记 最大值 最小值 平均值

标记 最大值 最小值 series: [//图表配置项 如大小&#xff0c;图表类型{name: 图例,type: bar,//图表类型data: [{value: 500,time: 2012-11-12},{value: 454,time: 2020-5-17},{value: 544,time: 2022-1-22},{value: 877,time: 2013-1-30}, {value: 877,time: 2012-11-12}] …

AS 之 gradle 命令

文章目录 1、命令大全2、编译命令2.1 检查依赖并编译打包2.2 编译并打 Debug 包2.3 编译打出 Debug 包并安装2.4 编译并打出 Release 包2.5 编译打出 Release 包并安装2.6 Debug/Release 编译并打印日志 3、清除命令4、卸载命令4.1 卸载 Debug/Release 安装包4.2 adb 卸载 5、调…

Webpack 生产环境

文章目录 前言配置NPM Scripts指定 mode压缩(Minification)源码映射(Source Mapping)CLI 替代选项后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;webpack &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#…

Ubuntu18.04安装LIO-SAM保姆级教程

目录 1 LIO-SAM的安装前要求 1.1 ROS安装:参考我的另一篇博客 1.2 gtsam安装(参考LeGO-LOAM 1.2节) 2 安装

【linux网络】补充网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录

目录 linux网络的综合应用 1&#xff09;网关服务器&#xff1a;ens35&#xff1a;12.0.0.254/24&#xff0c;ens33&#xff1a;192.168.100.254/24&#xff1b;Server1&#xff1a;192.168.100.101/24&#xff1b;PC1和server2&#xff1a;自动获取IP&#xff1b;交换机无需…

MATLAB算法实战应用案例精讲-【图像处理】SLAM技术详解(基础篇)(二)

目录 知识储备 SLAM基础知识 算法原理 LINS算法 算法框架 理论与代码分析