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…

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

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

【分享】centos7vim异常

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

血的教训---入侵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;但是没有引入定义 如果发生冲…

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、调…

【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;交换机无需…

Ubuntu 20.04 for NVIDIA V100 GPU安装手册

安装Ubuntu 20.04.3 LTS版本 image.png 安装Ubuntu 20.04按照安装提示&#xff0c;仔细选择每一项&#xff0c;基本默认即可。 系统中查看GPU信息 系统安装完成之后&#xff0c;进入系统&#xff0c;使用lspci 命令查询一下GPU是否存在、型号信息是什么。 bpangbobpang:\~$…

【Centos8】下载 MySQL8 并开启远程连接

本文将记录一下 centos8 下载 mysql8 的安装命令&#xff0c;防止下一次安装的时候还需要查询相关资料。&#x1f923; 下载 mysql # 查看是否有 mysql&#xff0c;如果有则需要卸载 yum list installed mysql |grep mysql # or rpm -qa |grep mysql# 查看是否有 mysql 残余文…

传统算法:使用 Pygame 实现插入排序

使用 Pygame 模块实现了插入排序的动画演示。首先,它生成一个包含随机整数的数组,并通过 Pygame 在屏幕上绘制这个数组的条形图。接着,通过插入排序算法对数组进行排序,动画效果可视化每一步的排序过程。在排序的过程中,程序将当前元素插入到已排序的部分,通过适度的延迟…

plt绘制表格

目录 1、绘制简单表格 2、将字体居中 3、为每个表格添加背景 4、添加透明度 5、不显示表格标题 6、将pandas的表格列转行显示 7、关闭表格边框 8、设置表格长宽、字体大小 9、利用色系指定表格颜色 10、修改字体颜色、边框粗细 1、绘制简单表格 import pandas as pd…

在gitlab上使用server_hooks

文章目录 1. 前置条件2. Git Hook2.1 Git Hook 分为两部分&#xff1a;本地和远程2.1.1 本地 Git Hook&#xff0c;由提交和合并等操作触发&#xff1a;2.1.2 远程 Git Hook&#xff0c;运行在网络操作上&#xff0c;例如接收推送的提交&#xff1a; 3. 操作步骤3.1 对所有的仓…

JAVA全栈开发 day14_集合(Collection\List接口、数据结构、泛型)

一、数组 数组是一个容器&#xff0c;可以存入相同类型的多个数据元素。 数组局限性&#xff1a; ​ 长度固定&#xff1a;&#xff08;添加–扩容&#xff0c; 删除-缩容&#xff09; ​ 类型是一致的 对象数组 &#xff1a; int[] arr new int[5]; … Student[] arr …

四、虚拟机网络配置

目录 1、VMware网卡配置模式 1.1 桥接模式 ​​​​​​​1.2 NAT模式 ​​​​​​​1.3 仅主机模式 ​​​​​​​2、编辑虚拟机的网络编辑器 ​​​​​​​3、编辑Window的虚拟网卡 ​​​​​​​4、修改IP地址为静态 4.1 查看网卡名字 4.2 编辑修改网卡IP地址的…

Vue中的组件和插件

一、组件 组件是Vue中最核心的概念之一&#xff0c;它可以把一个页面拆分成多个独立的、可复用的部分。组件通常包含了自己的模板、样式和逻辑&#xff0c;用于封装一个特定的功能或界面。Vue的组件有单文件组件和普通组件两种类型&#xff0c;可以通过Vue.component或Vue.ext…

【多线程】-- 07 线程礼让与线程强制执行

多线程 5 线程状态 5.3 线程礼让 Thread.yield()礼让线程&#xff0c;让当前正在执行的线程暂停&#xff0c;但不阻塞将线程从运行状态转为就绪状态让CPU重新调度&#xff0c;礼让不一定成功&#xff01;由CPU调度决定。 package com.duo.state;//测试礼让线程 public clas…