ARM day5、day6 硬件编程

一、硬件

fs4412  sd卡  串口线  电源  

二、根据原理图点灯

1、确定需求:

        点灯(亮 or 灭)

2、查看原理图

        2.1 外设原理图 devboard 

                查找LED2->CHG_COK(核心板)

        2.2 核心板原理图 coreboard

                查找CHG_COK->XEINT23/KP_ROW7/ALV_DBG19/GPX2_7

        2.3 看芯片手册

                GPIO控制(第六章)->查找GPX2

        2.4 筛选寄存器(概述)

        整体的配置或控制寄存器、功能相关的寄存器、不知道干嘛的寄存器

不需要的: 

 pull-up/pull-down:上拉下拉-引脚不能悬空,上拉为高电平或下拉接地为低电平
drive strength control register:驱动强度控制-输出电流大小 -- 影响灯的亮度,不影响亮灭,所以不需要GPF3DRV
补充:下电模式寄存器:power down & power off,关机/睡眠,不影响灯的亮灭,所以不需要

需要的:

2.5 写代码

GPX2CON   0x11000c40     [31:28]          0x1 ---output

代码中,需要将[31:28]4位设置为0x1(先清零后置1)

C代码:GPX2CON = (GPX2CON & (~(0xf << 28))  )   |   ((0x1)<<28  ) 

汇编代码:

GPX2DAT      0x11000c44    [7]                0x0 --低电平   0x1-高电平

//输出模式(灯亮) -- 第七位置1(GPX2_7

C代码:GPX2DAT = GPX2DAT |  (0x1 << 7)

作业:流水灯

见下方代码

三、编译环境

Makefile:

  1 all:2     arm-none-linux-gnueabi-gcc -fno-builtin -nostdinc -c -o start.o start.s3     arm-none-linux-gnueabi-gcc -fno-builtin -nostdinc -c -o main.o main.c4     arm-none-linux-gnueabi-ld start.o main.o -Tmap.lds -o led.elf5     arm-none-linux-gnueabi-objcopy -O binary led.elf led.bin6     arm-none-linux-gnueabi-objdump -D led.elf > led.dis7 clean:8     rm -rf *.bak *.o *.elf *.dis *.bin

map.lds:

  1 /*linux下的连接脚本模板*/2 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /*指定输出可执行文件是elf格式,32位ARM指令,小端*/3 OUTPUT_ARCH(arm)  /*指定输出可执行文件的平台(arm平台)*/4 ENTRY(_start)     /*指定连接之后第一条指令的地址为_start*/5 SECTIONS  /*指定连接之后的代码段(.text) 数据段(.data) .bss段如何摆放*/6 {7     . = 0x40008000; /*指定链接的起始地址 从0x40008000地址开始摆放*/8     . = ALIGN(4);   /*指令对齐(4字节对齐)*/9     .text      :    /*代码段开始*/10     {11         start.o(.text)  /*0x40008000地址放start.o对应的start.s的第一条指令*/12         *(.text)        /* *:其他的*.o文件系统自动安排位置*/13     }14     . = ALIGN(4);15     .data :         /*数据段开始*/16     { *(.data) }    /*数据段也让系统自动分配*/17     . = ALIGN(4);18     .bss :19      { *(.bss) }20 }

map.lds解释:

1、 *表示所有.o文件的text
             如果需要先后顺序 :  
                 test.o(.text)
                 *(.text)
2、每个.o组成由text+data+bss


3、. =0x0:    //要loadbb、go的地址

start.s:

  1     .global  delay1s2     .text3     .global _start4 _start:5         b       reset                        @0x006         ldr     pc,_undefined_instruction  @0x047         ldr     pc,_software_interrupt8         ldr     pc,_prefetch_abort9         ldr     pc,_data_abort10         ldr     pc,_not_used11         ldr     pc,_irq12         ldr     pc,_fiq13 14 _undefined_instruction: .word  _undefined_instruction15 _software_interrupt:    .word  _software_interrupt16 _prefetch_abort:        .word  _prefetch_abort17 _data_abort:            .word  _data_abort18 _not_used:              .word  _not_used19 _irq:                   .word  _irq20 _fiq:                   .word  _fiq21 22 23 reset:24     ldr r0,=0x40008000      @设置异常向量表的起始地址为0x4000800025     mcr p15,0,r0,c12,c0,0       @ Vector Base Address Register26 27 init_stack:28     ldr     r0,stacktop         /*get stack top pointer*/29 30     /********svc mode stack********/31         mov     sp,r032         sub     r0,#128*4          /*512 byte  for irq mode of stack*/33     /****irq mode stack**/34         msr     cpsr,#0xd235         mov     sp,r036         sub     r0,#128*4          /*512 byte  for irq mode of stack*/37     /***fiq mode stack***/38         msr     cpsr,#0xd139         mov     sp,r040         sub     r0,#041     /***abort mode stack***/42         msr     cpsr,#0xd743         mov     sp,r044         sub     r0,#045     /***undefine mode stack***/46         msr     cpsr,#0xdb47         mov     sp,r048         sub     r0,#049    /*** sys mode and usr mode stack ***/50         msr     cpsr,#0x1051         mov     sp,r0             /*1024 byte  for user mode of stack*/52 53         b       main54 55 delay1s:56      ldr      r4,=0x1ffffff57 delay1s_loop:58      sub    r4,r4,#159      cmp   r4,#0         60      bne    delay1s_loop61      mov   pc,lr62 63 64     .align  465 66     /****  swi_interrupt handler  ****/67 68 69 stacktop:    .word      stack+4*51270 71 .data72 73 stack:74   .space  4*51275 .end

main.c:

  1 //led 2 3 4 5 2 //led23 #define GPX2CON (*(volatile unsigned int *)0x11000c40)4 #define GPX2DAT (*(volatile unsigned int *)0x11000c44)5 //led36 #define GPX1CON (*(volatile unsigned int *)0x11000c20)7 #define GPX1DAT (*(volatile unsigned int *)0x11000c24)8 //led49 #define GPF3CON (*(volatile unsigned int *)0x114001E0)10 #define GPF3DAT (*(volatile unsigned int *)0x114001E4)11 //led 512 13 14 15 void mydelay(int x) //延时16 {   17     int i;18     while(x --){    //1ms19         for(i = 1000; i>0; i--);20     }21 }22 23 void GPIO_init()24 {25    GPX2CON = (GPX2CON & (~(0xf << 28))) | ((0x1)<<28);26    GPX1CON = (GPX1CON & (~(0xf ))) | ((0x1));27    GPF3CON = (GPF3CON & (~(0xf << 16))) | ((0x1) << 16);28    GPF3CON = (GPF3CON & (~(0xf << 20))) | ((0x1) << 20);29 30 }31 32 void led2_on()   //开灯 7位置133 {34    GPX2DAT = GPX2DAT | (0x1 << 7);35 }36 void led2_off()  //关灯 7位置037 {38    GPX2DAT = GPX2DAT & ~(0x1 << 7);39 }40 void led3_on()   //开灯 0位置141 {42    GPX1DAT = GPX1DAT | (0x1);43 }44 void led3_off()  //关灯 0位置045 {46    GPX1DAT = GPX1DAT & ~(0x1);47 }48 void led4_on()   //开灯 4位置149 {50    GPF3DAT = GPF3DAT | (0x1 << 4);51 }52 void led4_off()  //关灯 4位置053 {54    GPF3DAT = GPF3DAT & ~(0x1 << 4);55 }56 void led5_on()   //开灯 5位置157 {58    GPF3DAT = GPF3DAT | (0x1 << 5);59 }60 void led5_off()  //关灯 4位置061 {62    GPF3DAT = GPF3DAT & ~(0x1 << 5);63 }64 65 int main()66 {67     GPIO_init();//初始化68     while(1)    //循环69     {70         led2_on();71         mydelay(500);72         led2_off();73         mydelay(500);74         led3_on();75         mydelay(500);76         led3_off();77         mydelay(500);78         led4_on();79         mydelay(500);80         led4_off();81         mydelay(500);82         led5_on();83         mydelay(500);84         led5_off();85     }86     return 0;87 }

编译:

打开超级终端  名字随便输  只需配置波特兰和硬件为115200和无 

1.打开板子的开关,三秒内按回车

2.loadb 40008000    //地址见编译环境

3.发送文件 -- 打开windows下的.bin二进制文件

4.go 40008000

四、其他注意事项

1、人通过代码操作内存,CPU通过取指译码执行来访问内存
2、另一块内存中通过地址映射并访问设备控制器中的寄存器(寄存器是物理设备,里面是一些写死的规则),CPU通过该内存来访问设备控制器中的寄存器
3、板子=CPU+设备控制器
4、设备控制器通过IO引脚来控制高低电平,从而控制设备
5、SD卡算外存设备,相当于提前在SD卡中烧写了一个小型的系统,用于启动引导
6、寄存器的八种模式:
user用户:唯一非特权、正常程序运行的工作模式
sys系统:和用户模式一起属于非异常模式,用于操作系统(特权),和用户模式类似,但可以切换到其他模式
irq中断:用于中断请求处理,只有在IRQ异常响应才进入该模式
fiq快中断:用于快速中断请求处理,只有在FIQ异常响应模式才进入该模式
svc管理:供操作系统使用的一种保护模式,操作系统大部分代码都在内核,运行模式为SVC。应用层的到了系统运行,都是在svc模式
abort中止:用于虚拟内存
undefined未定义:软件仿真
moniter:cotex内核,不常用
7、寄存器:通用寄存器r0-r15(包括sp pc 等特殊寄存器,不包括CPSR、SPSR等程序状态寄存器)    
8、汇编存在的意义:为C程序的运行做准备
9、异常触发过程:异常-触发异常-切换对应异常模式-异常向量表-异常处理函数
10、中断触发过程:当系统产生中断,就到irq中断模式处理

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

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

相关文章

golang面试题大全

go基础类 1、与其他语言相比&#xff0c;使用 Go 有什么好处&#xff1f; 与其他作为学术实验开始的语言不同&#xff0c; Go 代码的设计是务实的。每个功能和语法决策都旨在让程序员的生活更轻松。Golang 针对并发进行了优化&#xff0c;并且在规模上运行良好。由于单一的标…

蓝桥杯(C++ 矩形总面积 错误票据 分糖果1 三国游戏 分糖果2)

目录 一、矩形总面积 思路&#xff1a; 代码&#xff1a; 二、错误票据 思路&#xff1a; 代码&#xff1a; 三、分糖果1 思路&#xff1a; 代码&#xff1a; 四、三国游戏 思路&#xff1a; 代码&#xff1a; 五、分糖果2 思路&#xff1a; 代码&#xff1a;…

uniapp 微信小程序自带实时线上日志

找个位置建上js文件 var log wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : nullmodule.exports {info() {if (!log) returnlog.info.apply(log, arguments)},warn() {if (!log) returnlog.warn.apply(log, arguments)}, error() {if (!log) returnlog.error.a…

2018年认证杯SPSSPRO杯数学建模C题(第二阶段)机械零件加工过程中的位置识别全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 基于轮廓提取与图像配准的零件定位问题研究 C题 机械零件加工过程中的位置识别 原题再现&#xff1a; 在工业制造自动生产线中&#xff0c;在装夹、包装等工序中需要根据图像处理利用计算机自动智能识别零件位置&#xff0c;并由机械手将零件…

访问者模式介绍

目录 一、访问者模式介绍 1.1 访问者模式定义 1.2 访问者模式原理 1.2.1 访问者模式类图 1.2.2 模式角色说明 二、访问者模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 V1版本 2.2.1.1 抽象产品类 2.2.1.2 糖果类 2.2.1.3 酒水类 2.2.1.4 水果类 2.2.1.5 访问者接口…

随笔03 笔记整理

图源&#xff1a;文心一言 关于我的考研与信息安全类博文整理~&#x1f95d;&#x1f95d; 第1版&#xff1a;整理考研类博文~&#x1f9e9;&#x1f9e9; 第2版&#xff1a;提前列出博文链接&#xff0c;以便小伙伴查阅~&#x1f9e9;&#x1f9e9; 第3版&#xff1a;整理We…

上海亚商投顾:沪指探底回升 大金融板块午后走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 指昨日探底回升&#xff0c;深成指、创业板指午后跌超1%&#xff0c;尾盘集体拉升翻红&#xff0c;北证50指数涨…

一万六千字大章:Chrome 浏览器插件 V3 版本 Manifest.json 文件全字段解析

Chrome 浏览器插件 V3 版本 Manifest.json 文件全字段解析 Manifest.json 文件格式 每个扩展程序的根目录中都必须有一个 manifest.json 文件&#xff0c;其中列出了有关该扩展程序的结构和行为的重要信息。 1、Demo 展示 1. 最小文件 {"manifest_version": 3,&quo…

2024哪些跨境电商平台值得做?

时代的巨变在2023年尤其明显&#xff0c;这一年随着全球化进程的加深&#xff0c;跨境出海处于“高景气”阶段。为了在跨境出海浪潮中保有稳定的地位甚至获得增长&#xff0c;跨境人最需要关注的是哪个跨境电商平台成为大势&#xff0c;用户所选择的平台是什么&#xff1f;在跨…

echarts图表

所谓图表就是用来统计一些数据的&#xff0c;图表有很多种&#xff0c;有折线图、柱状图、饼状图、散点图等等多种多样的样式&#xff0c;我们可以根据自身需求来选择。 我们在用的时候是要先下载的&#xff0c;我们可以直接搜echarts官网&#xff0c;里面有快速入门&#xff…

select...in在mybatis里使用(巨坑!!)

情景&#xff1a;最近遇到了一个bug&#xff1a; 在DAO层里的这个sql语句&#xff0c;传入的参数没问题&#xff0c;在mysql里面查询也查询到了数据&#xff0c;为什么在dao层执行的时候查到数据不完整甚至没有呢&#xff1f; 主要原因&#xff1a; Mybatis 在 处理#{}时&…

STM32 基本定时器反转LED

引脚是什么为什么要初始化引脚&#xff1f; 在嵌入式系统中&#xff0c;引脚是微控制器或微处理器上的物理引脚&#xff0c;用于连接外部设备、传感器或其他芯片。每个引脚都有特定的功能和用途&#xff0c;例如输入、输出、模拟输入、电源供应等。STM32F103C8T6引脚图&#xf…

2018年认证杯SPSSPRO杯数学建模B题(第二阶段)动态模糊图像全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 动态模糊图像复原 B题 动态模糊图像 原题再现&#xff1a; 人眼由于存在视觉暂留效应&#xff0c;所以看运动的物体时&#xff0c;看到的每一帧画面都包含了一段时间内 (大约 1/24 秒) 的运动过程&#xff0c;所以这帧画面事实上是模糊的。对…

C++入门学习(一)写一个helloworld

1、头文件 #include <iostream> using namespace std; 任何程序都需要这两句的&#xff0c;写上就好。 2、主文件 int main() {cout<<"Hello World!"<<endl;return 0; } 由于是int型数据&#xff0c;所以要返回一个值&#xff0c;即return0。…

JVM:垃圾回收机制(GC)

垃圾判断&#xff1a; 引用计数算法&#xff1a; 在对象中添加一个引用计数器&#xff0c;当每有一个地方引用它时&#xff0c;计数器值加一。当引用失效时&#xff0c;计数器值就减一。当一个对象的计数器为零时&#xff0c;表示该对象没有被任何其他对象引用&#xff0c;因此…

【动态规划】【数学】【C++算法】18赛车

作者推荐 视频算法专题 本文涉及知识点 动态规划 数学 LeetCode818赛车 你的赛车可以从位置 0 开始&#xff0c;并且速度为 1 &#xff0c;在一条无限长的数轴上行驶。赛车也可以向负方向行驶。赛车可以按照由加速指令 ‘A’ 和倒车指令 ‘R’ 组成的指令序列自动行驶。 当…

mycat实现mysql读写分离

一. mycat集群HaproxyKeepalived mycat集群HaproxyKeepalivedmysql1主2从 环境规划 centos7.9 1主2从&#xff0c;读写分离 名称ip端口mysql-master192.168.1.2203306mysql-slave1192.168.1.2213306mysql-slave2192.168.1.2223306mycat-1192.168.1.2218066mycat-2192.168.1.…

Redis集群搭建

为什么要有集群 之前我们已经讲了主从的概念&#xff0c;一主可以多从&#xff0c;如果同时的访问量过大(1000w),主服务肯定就会挂掉&#xff0c;数据服务就挂掉了或者发生自然灾难 大公司都会有很多的服务器(华东地区、华南地区、华中地区、华北地区、西北地区、西南地区、东…

Android Studio读写低频RFID T5557卡源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?id675212889085&spma1z10.5-c.w4002-21818769070.13.21166f89nKgnJ7 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xml…

【Docker】实战多阶段构建 Laravel 镜像

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 本节适用于 PHP 开发者阅读。Laravel 基于 8.x 版本&#xff0c;各个版本的文件结构可能会有差异&#xff0c;请根据实际自行修改。 准备 新…