ARM-LED灯--蜂鸣器

news2024/11/16 7:26:47

目录

点亮LED灯

1.开发板介绍

2.cpu控制硬件原理

3.本地开发和交叉开发

4.点灯实验

分析电路图

 底板原理图:1)电路原理图,LED的控制方式->高电平亮,低电平灭

核心板原理图:2)LED与SOC的连接关系->GPIOA28

控制思想

读懂芯片手册

编写程序

汇编

下载调试程序

闪灯

用汇编写C逻辑


点亮LED灯

1.开发板介绍

2.cpu控制硬件原理

六大指令里边,只有内存访问指令能访问cpu之外的内容。那cpu如何控制硬件?

*load/store指令-->操作4G内存

任何一个芯片都有一个地址映射表。告诉地址空间是如何映射的,便于我们找到对应的硬件地址。

我们的SOC(片上系统、系统芯片)型号是S5P6818(三星),对应的芯片用户手册为:S5P6818X 用户手册V0.00,其中一章是:Memory map或Memory Controller 中的一张表中可以看地址隐射关系。

硬件控制原理:

 CPU不能直接控制硬件,硬件是由其对应的控制器(寄存器)来控制的,

 每个控制器(寄存器)都会映射到CPU寻址范围内的一段空间,

CPU通过对控制器(寄存器)的读和写实现对硬件间接的控制, CPU间接控制硬件。

3.本地开发和交叉开发

本地开发:本地编写代码,本地编译代码,本地运行代码

交叉开发:本地编写代码,本地编译代码,开发板运行代码

PC中Linux下,程序也能执行,但不是仿真。他是真正的运行。但移植到ARM平台就不一定能执行,需要转化代码的指令。这个转换过程可以当成是交叉编译。

4.点灯实验

分析电路图

  1、分析电路图的思路:从外设(地板)---》SOC(核心板)分析 

  2、 分析LED

  3、 在电路板上找到led灯的位置

     LED灯旁边会有白色的字,此白字为丝印,LED灯旁边的字,是led灯的编号

    打开底板的原理图,在原理图上搜索led灯编号(RGB)

  4、分析led的电路图

   共阳三色二极管:三个二极管的,正极接到一起

   RGB_R/RGB_G/RGB_B 表示网络标号 5、网络标号名字相同表示具有相同的,电气连接属性,反应到电路板上,他们通过导线连接到一起 

  6、根据网络标号到核心板原理图,找到soc哪个引脚驱动着LED灯

 底板原理图:1)电路原理图,LED的控制方式->高电平亮,低电平灭

核心板原理图:2)LED与SOC的连接关系->GPIOA28

控制思想

 工作寄存器:R0-R15,CSPR,SPSR,由ARM公司提供,没有地址

 控制寄存器:就是内存的一块空间,具有地址,由芯片厂家提供。寄存器是在GPIO章节被使用,所以看芯片手册的时候看GPIO章节,里面一定有相关寄存器的使用和功能实现。

我们只需要向控制寄存器中写值或者读值,就可以让我们处理器完成一定的功能。这也就是我们软件编程控制硬件的思想。

读懂芯片手册

概述:简介->特点->框图

机械尺寸->IO功能描述表

系统引导:概述->功能描述->内部引导->外部引导

 1、GPIOxOUT:控制引脚输出高低电平

 2、RED_LED--->GPIOA28

 3、GPIOAOUT ---> 0xC001A000

 4、GPIOA28输出高电平:GPIOAOUT[28] <--写-- 1

 5、GPIOA28输出低电平: GPIOAOUT[28] <--写-- 0

 6、GPIOxOUTENB:控制引脚的输入输出模式  GPIOAOUTENB ---> 0xC001A004

7、 设置GPIOA28引脚为输出模式: GPIOAOUTENB[28] <--写-- 1

8、GPIOxALTFN:控制引脚功能的选择  GPIOAALTFN1 ---> 0xC001A024

 9、设置GPIOA28引脚为GPIO功能: GPIOAALTFN1[25:24] <--写-- 0b00

 00 = ALT Function0 

 01 = ALT Function1 

 10 = ALT Function2 

 11 = ALT Function3 

  GPIO引脚功能的选择:每两位控制一个GPIO引脚,

 S5P6818X用户芯片手册:   

 

    

 

 

 3)分析芯片手册,找到对应的寄存器将GPIOA28设置输出高低电平->GPIOAOUT(0XC001A000)

 4)分析芯片手册,找到对应的寄存器将GPIOA28设置成OUTPUT功能->GPIOAOUTEN(0XC001A004)  

5)找到对应的寄存器将GPIOA28设置成GPIO功能->GPIOAALTFN1(0XC001A024)   

编写程序

汇编

.text  @代码段
.global _start @将_start声明成一个全局的符号,其他.s文件也可以引用
_start: @汇编的入口   
 /*
	实验步骤:
	  1)分析电路原理图,得出LED的控制方式->高电平亮,低电平灭
	  2)分析电路原理图,得出LED与SOC的连接关系->GPIOA28
	  3)分析芯片手册,找到对应的寄存器将GPIOA28设置成GPIO功能->GPIOAALTFN1(0XC001A024)
	  4)分析芯片手册,找到对应的寄存器将GPIOA28设置成OUTPUT功能->GPIOAOUTENB(0XC001A004)
	  5)分析芯片手册,找到对应的寄存器将GPIOA28设置输出高低电平->GPIOAOUT(0XC001A000)
 */
/*
   地址:0xc001A024 数据:0x00000000  
   地址:0xc001A004 数据:0x10000000  输入输出
   地址:0xc001a000 数据:0x10000000/0x00000000    高低电平
*/
@设置GPIOA28为GPIO功能
 LDR R1,=0x00000000
 lDR R2,=0XC001A024
 STR R1,[R2]

@设置GPIOA28为OUTPUT功能
 LDR R1,=0x10000000
 lDR R2,=0XC001A004
 STR R1,[R2]
@设置GPIOA28为高电平
 LDR R1,=0x00000000
 lDR R2,=0XC001A000
 STR R1,[R2]
stop:
    B stop
.end @汇编的结束

下载调试程序

 1、拷贝.bin文件到windows中

 2、开发板和电脑进行硬件连接

    串口线的USB端插到电脑的USB口,串口线的串口端插到开发板的UART0端口上

     开发板插上电源

 3、配置windows超级终端

    可以查看配置超级终端的使用说明文档资料中有, 如果串口线第一次使用需要安装串口驱动,串口驱动文件在资料中

4、配置超级终端:

    在设备管理器中,查看串口线使用的那个端口号

    配置端口属性:波特率:115200、 数据位:8、 停止位:1

5、开发板上电,超级终端会有打印信息

 在倒计时减到0之前按任意键,进入到FS6818#界面----交互模式

 执行命令 loadb 0x43c00000 -->下载二进制文件到内存的0x43c00000

 传送-->发送文件-->选择要下载.bin文件,选择Kermit协议 --> 确定下载

 执行命令:go 0x43c00000 -->到0x43c00000位置运行代码

 如果需要重新下载代码,重复步骤4

闪灯

用汇编写C逻辑

.text
.global _start
_start:
MAIN:
 BL LED_CONFIG
LOOP:
 BL LED_ON
 BL DELAY   
 BL LED_OFF
 BL DELAY
 BL LOOP
LED_CONFIG:
 LDR R1,=0X00000000
 LDR R2,=0XC001A024
 STR R1,[R2]
 LDR R1,=0X10000000
 LDR R2,=0XC001A004
 STR R1,[R2]
 MOV PC,LR
LED_OFF:
 LDR R1,=0X00000000
 LDR R2,=0XC001A000
 STR R1,[R2]
 MOV PC,LR
LED_ON:
 LDR R1,=0X10000000
 LDR R2,=0XC001A000
 STR R1,[R2]
 MOV PC,LR
DELAY:
 LDR R1,=100000000
T: 
 SUB R1,R1,#1
 CMP R1,#0
 BNE T
 MOV PC,LR
.end
  1. C语言

纯地址方式

/*
 *    地址:0xc001A024 数据:0x00000000
 *    地址:0xc001A004 数据:0x10000000
 *    地址:0xc001a000 数据:0x10000000/0x00000000
 *    地址:0xc001a000 数据:0x10000000/0x00000000
 *                */
int main()
{   
  *(unsigned int *)0xc001A024=0x00000000;
  *(unsigned int *)0xc001A004=0x10000000;
 while(1)
 {
  *(unsigned int *)0xc001A000=0x00000000;
  delay_ms(1000);
  *(unsigned int *)0xc001A000=0x10000000;
  delay_ms(1000);
 }
}                                                       

宏定义

#define GPIOAALTFN1 (*(unsigned int *)0xc001A024)
#define GPIOAOUTENB (*(unsigned int *)0xc001A004)
#define GPIOAOUT    (*(unsigned int *)0xc001A000)
int main()
{
  GPIOAALTFN1=0x00000000;
  GPIOAOUTENB=0x10000000;
 while(1)
 { 
  GPIOAOUT=0x00000000;
  delay_ms(1000);
  GPIOAOUT=0x10000000;
  delay_ms(1000);
 }
}                                                      


结构体

这时候去数据手册看地址规律,发现每一类比如A的地址是连续的

问C语言里什么的地址是联续的? 结构体

这里GPIOAPAD之后有一个没有连续 18 之后1C

typedef struct
{
 unsigned int OUT;
 unsigned int OUTENB;
 unsigned int DETMODE0;
 unsigned int DETMODE1;
 unsigned int INTENB;
 unsigned int DET;
 unsigned int PAD;
 unsigned int Gsssss;
 unsigned int ALTFN0;
 unsigned int ALTFN1;
}gpio;
#define GPIOA (*(gpio *)0xc001A000)
int main()                         
{
  GPIOA.ALTFN1=0x00000000;
  GPIOA.OUTENB=0x10000000;
 while(1)
 {
  GPIOA.OUT=0x00000000;
  delay_ms(1000);
  GPIOA.OUT=0x10000000;
  delay_ms(1000);
 }
}

蜂鸣器

实验步骤:

1)分析电路原理图,得出蜂鸣器的控制方式->高电平响

2)分析电路原理图,得出蜂鸣器与SOC的连接方式->GPIOC14

3)分析芯片手册,找到对应的寄存器将GPIO14设置成GPIO功能->GPIOCALTFN0

      (0X01C001C020)

 

4)分析芯片手册,找到对应的寄存器将GPIOC14设置成OUTPUT功能->GPIOCOUTENB

     (0XC001C004)

5)分析芯片手册,找到对应的寄存器将GPIOC14设置输出高低电平->GPIOCOUT(0XC001C000)

 编写程序

.text   @ 代码段

.global _start @将_start声明成一个全局的符号,其他.s文件也可以引用

_start: @汇编的入口   

/*

   地址:0xC001C024   数据:0x10000000

   地址:0xC001C004   数据:0x10000000

   地址:0xC001C000   数据:0x10000000/0x00000000

*/

@设置GPIOC14为GPIO功能

 LDR R1,=0x10000000

 lDR R2,=0XC001C024

 STR R1,[R2]

@设置GPIOC14为OUTPUT功能

 LDR R1,=0x10000000

 lDR R2=0XC001C004

 STR R1,[R2]

@设置GPIOC14为高电平

 LDR R1,=0x00000000

 lDR R=0XC001C000

 STR R1,[R2]

stop:

    B stop

.end @汇编的结束

上电测试

1.从"设备管理器"中查看自己的端口号,打开SecureCRT,配置对应的端口号,进行上电连接。

 2.在倒计时结束之前按回车键,进入交互模式,执行loadb 地址(例如:loadb 0x43c00000)命令烧录程序。

3.下载成功后,执行go 地址(例如:go 0x43c00000)命令。

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

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

相关文章

Vue+node.js校园食堂餐厅外卖点餐系统088e4

外卖点餐系统的主要使用者分为管理员和用户&#xff0c;实现功能包括用户管理、菜品分类管理、菜品信息管理、系统管理、订单管理等功能。由于本网站的功能模块设计比较全面&#xff0c;所以使得整个外卖点餐信息管理的过程得以实现。 本外卖点餐系统主要包括二大功能模块&…

Dynamic Connected Networks for Chinese Spelling Check ---- 论文阅读

DCN 动机简介方法动态连接评分器候选生成拼音增强候选生成器 训练损失函数预训练 预测 实验数据集方法比较 消融 Paper&#xff1a;https://aclanthology.org/2021.findings-acl.216.pdf Code&#xff1a;https://github.com/destwang/DCN [Pytorch] 哈工大讯飞 动机 大多数关…

【Linux】Apache 配置与应用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、构建虚拟 Web 主机1.httpd服务支持的虚拟主机类型 二、基于域名的虚拟主机1.为虚拟主机提供域名解析2.为虚拟主机准备网页文档3.添加虚拟主机配置4.设置访问控制…

FreeRTOS进阶学习

一、FreeRTOS内核控制控制函数&#xff1a; 1、请求任务切换函数&#xff1a; 函数原型&#xff1a;#define taskYIELD() 函数解析&#xff1a;实际上是一个宏定义的函数&#xff0c;调用一次会触发pendSV中断来实现任务切换&#xff1b; /// 2、在任务中进入临界区函数&…

LLM:大模型的正则化

主流大模型使用的Normalization主要有三类&#xff0c;分别是Layer Norm&#xff0c;RMS Norm&#xff0c;以及Deep Norm。 小模型的正则化参考&#xff1a; l1l2正则和dropout正则化[https://youzipi.blog.csdn.net/article/details/75307522] LN和BN归一化 [深度学习&…

【3000字帮你深度剖析数据在内存中的存储】

本节重点 -- 重中之重 数据类型详细介绍 整形在内存中的存储&#xff1a;原码、反码、补码 大小端字节序介绍及判断 浮点型在内存中的存储解析 准备好了&#xff0c;开始啰&#xff0c;在小小的花园里面......最近被这个歌曲洗脑&#xff0c;但是我们并不是要唱歌&#xff0c;而…

linux基础知识学习记录

这里写自定义目录标题 一、 计算机基础知识二 、 Linux操作系统的介绍三、 Linux的安装四、Linux命令使用汇总 一、 计算机基础知识 计算机组成&#xff1a;计算机主要硬件和软件2部分组成。计算机软硬件的概念&#xff1a;硬件是可以看得见的物理实体&#xff0c;软件是运行在…

还在担心期末挂科吗? 期末必备复习资料-----“树“的概念

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:记录期末复习 数据结构中有关树的一些知识 金句分享: ✨我将…

2023最新150道渗透测试面试题

前言 眨眼间2023年快过去一半了&#xff0c;不知道大家有没有找到心仪的工作呀&#xff0c;今天我给大家整理了150道渗透测试面试题给大家&#xff0c;需要答案的话可以在评论区给我留言哦~ 第一套渗透测试面试题 你了解什么是网络安全渗透测试吗&#xff1f; 你的网络安全渗…

Stream相关知识点

这里写目录标题 Stream流体验Stream流Stream流的常见生成方式流程分类具体操作 Stream流常见中间操作之filter简介具体操作 Stream流常见中间操作之limit&skip简介具体操作 Stream流常见中间操作之concat&distinct简介具体操作 Stream流常见中间操作之concat&disti…

什么是SSO

1. 什么是SSO&#xff1f; 「SSO」&#xff08;单一登录single sign on&#xff09;是一种身份验证机制&#xff0c;它允许用户使用单一的凭据登录到多个相关应用程序或系统中。换句话说&#xff0c;用户只需一次登录&#xff0c;就可以访问多个不同的应用程序&#xff0c;无需…

并发专栏-CAS

从 Atomic 到 CAS CAS 知道吗&#xff0c;如何实现&#xff1f; 讲一讲 AtomicInteger&#xff0c;为什么要用 CAS 而不是 synchronized&#xff1f; CAS 底层原理&#xff0c;谈谈你对 UnSafe 的理解&#xff1f; AtomicInteger 的ABA问题&#xff0c;能说一下吗&#xff0c;原…

自学黑客(网络安全/Web安全),一般人我还是劝你算了吧

由于我之前写了不少网络安全技术相关的文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人私信问我&#xff1a; 我刚入门网络安全&#xff0c;该怎么学&#xff1f; 要学哪些东西&#xff1f; 有哪些方向&#xff1f; 怎么选&a…

自学网络安全(黑客)该如何系统学习

一、自学网络安全学习的误区和陷阱 1.不要试图以编程为基础的学习开始学习 我在之前的回答中&#xff0c;我都一再强调不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而且实际向安全过渡后可用到的关键知识并不多 一…

layui(1)

Layui镜像站-经典开源模块化前端 UI 框架(官方文档完整镜像) 下载框架包 点击文档&#xff0c;可进入学习界面 1.引入框架包 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-C…

『赠书活动 | 第八期』《ChatGpt全能应用一本通》

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 『赠书活动 &#xff5c; 第八期』 本期书籍&#xff1a;《ChatGpt全能应用一本通》 赠书规则&#xff1a;评论区&#xff1a;点赞&#xff5c;收藏&#xff5c;留言 …

深度学习(卷积神经网络)

文章目录 动物视觉神经&#xff0c;以及脑科学视网膜——视觉第一站外膝体——信息中转站视皮层——中央处理器小tips 人工神经网络神经认知机模型卷积神经网络结构&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;卷积层池化层全连接层输出层softmax函数…

智能离网微逆变系统

文章目录 一、功能描述二、硬件部分2.1、单片机选型及中断号2.1.1、引脚分配 2.2、EG80102.3、控制电路图2.4、主电路图 三、代码流程图四、代码部分展示4.1、主函数4.2、modbus 五、项目演示 一、功能描述 把风光能&#xff0c;逆变为可调压调频的交流电可通过串口屏&#xf…

通过python封装采集商品ID请求获取京东商品详情数据,京东商品详情接口,京东API接口

使用Python封装采集商品ID请求获取京东商品详情数据。具体步骤如下&#xff1a; 使用Python中的requests库发送HTTP请求&#xff0c;获取商品ID列表。采集方法可根据需求选择&#xff0c;如爬虫框架Scrapy、Selenium等。导入京东API的Python SDK&#xff0c;如jdapi&#xff0…

YARN【工作机制】

Yarn概念 Yarn 是一个资源调度平台&#xff0c;负责为运算程序提供服务器运算资源&#xff0c;相当于一个分布式 的 操作系统平台 &#xff0c;而 MapReduce 等运算程序则相当于运行于 操作系统之上的应用程序 。 Yarn的四大组件 YARN 主要由 ResourceManager&#xff08;…