一、mini2440_bsp_led

news/2024/5/1 19:18:00/文章来源:https://blog.csdn.net/liutit/article/details/127177944

一、芯片手册

1、板子原理图

 2、GPIO使用

(1)GPxCON

(2)GPxDAT

二、实现分析

1、初始化led

        设置GPBCON(0x56000010)为 0x00015400

2、设置led输出,根据原理图引脚输出低电平时灯被点亮

        LED1_ON: 设置GPBDAT(0x56000014)为0x000001c0

        LED2_ON: 设置GPBDAT(0x56000014)为0x000001a0

        LED3_ON: 设置GPBDAT(0x56000014)为0x00000160

        LED4_ON: 设置GPBDAT(0x56000014)为0x000000e0

三、实现

1、汇编程序实现流水灯(led.S)

(1)伪代码

1、led初始化LED_init
2、关闭看门狗close watchdog
3、程序主体
main()
{for(int i=1;i<=4;i++){delay();    //延时switch(i){case 1: LED1_ON;case 2: LED1_ON;case 3: LED1_ON;case 4: LED1_ON;}}
}

(2)汇编源码

.text
.global _start
_start:@led初始化ldr r0, =0x56000010	ldr r1, =0x00015400str r1, [r0]
@关闭所有ledldr r0, =0x56000014ldr r1, =0x000001e0str r1, [r0]@关闭看门狗ldr	r0, =0x53000000mov	r1, #0x0str	r1, [r0]LED_MAIN:mov r2, #0x00000004	LED_LOOP:@使用循环nop实现延时ldr r3, =0x0000008f
DELAY1_LOOP:ldr r4, =0x000000ff
DELAY2_LOOP:nopnopnopnopnopnopnopnopsub r4, r4, #0x00000001cmp r4, #0x00000000bne DELAY2_LOOPsub r3, r3, #0x00000001cmp r3, #0x00000000bne DELAY1_LOOP@LED1的点亮	cmp r2, #0x00000001bleq  LED1_ONcmp r2, #0x00000000beq LED_MAIN
@LED2的点亮		cmp r2, #0x00000002bleq  LED2_ONcmp r2, #0x00000001beq LED_LOOP
@LED3的点亮		cmp r2, #0x00000003bleq  LED3_ONcmp r2, #0x00000002beq LED_LOOP
@LED4的点亮		cmp r2, #0x00000004bleq  LED4_ONcmp r2, #0x00000003beq LED_LOOPLED4_ON:ldr r0, =0x56000014ldr r1, =0x000000e0str r1, [r0]sub r2, r2, #0x00000001mov pc, lrLED3_ON:ldr r0, =0x56000014ldr r1, =0x00000160str r1, [r0]sub r2, r2, #0x00000001mov pc, lrLED2_ON:ldr r0, =0x56000014ldr r1, =0x000001a0str r1, [r0]sub r2, r2, #0x00000001mov pc, lrLED1_ON:ldr r0, =0x56000014ldr r1, =0x000001c0str r1, [r0]sub r2, r2, #0x00000001mov pc, lr

(3)Makefile文件

led.bin:led.Sarm-linux-gcc led.S -g -c -o led.oarm-linux-ld -Ttext 0x00000000 -g led.o -o led_elfarm-linux-objcopy -O binary -S led_elf led.bincp led.bin /home/tftp/
clean:rm *.o led_elf led.bin

1、c语言程序实现流水灯(start.S led.c)

(1)伪代码

1、关闭看门狗
2、设置堆栈ldr     sp, =1024*4    //使用片内SRAM(仅4K),不需要初始化外置内存(SDRAM)
3、跳转main函数

(2)启动实现(start.S)

.text
.global _start
_start:ldr     r0, =0x53000000     @ WATCHDOG寄存器地址mov     r1, #0x0                     str     r1, [r0]            @ 写入0,禁止WATCHDOG,否则CPU会不断重启ldr     sp, =1024*4         @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K@ nand flash中的代码在复位后会移到内部ram中,此ram只有4Kbl      main                @ 调用C程序中的main函数

(3)c语言led设置(led.c)

#define GPBCON      (*(volatile unsigned long *)0x56000010)
#define GPBDAT      (*(volatile unsigned long *)0x56000014)void delay()
{int i;for(i=0;i<0x4f;i++){int j;for(j=0;j<0xff;j++);}
}int main()
{	GPBCON = 0x00015400;    while(1){int i;for(i=0;i<4;i++){delay();switch(i){case 0:GPBDAT = 0x000001c0;break;case 1:GPBDAT = 0x000001a0;break;case 2:GPBDAT = 0x00000160;break;case 3:GPBDAT = 0x000000e0;break;}}}		return 0;
}

(4)Makefile实现

led_on_c.bin : start.S  led.carm-linux-gcc -g -c -o start.o start.Sarm-linux-gcc -g -c -o led.o led.carm-linux-ld -Ttext 0x0000000 -g  start.o led.o -o led_elfarm-linux-objcopy -O binary -S led_elf led.bincp led.bin /home/tftp/
clean:rm -f led.bin led_elf *.o

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

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

相关文章

K8s-临时容器 Ephemeral Containers

临时容器 Ephemeral Containers 当由于容器崩溃或容器镜像不包含调试工具而导致 kubectl exec 无用时&#xff0c; 临时容器对于交互式故障排查很有用。尤其是&#xff0c;Distroless 镜像 允许用户部署最小的容器镜像&#xff0c;从而减少攻击面并减少故障和漏洞的暴露。 由于…

C | 枚举?看一遍就够了

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 啊我摔倒了..有没有人扶我起来学习.... 目录前言枚举1. 枚举的定义2. 枚举的内存大小3. 枚举的优势4. 枚举需要注意的地方前言 结构体、枚举、联合体都是自定义类型&#xff0c;结构体主要知识点结构体内存对齐可参考《C | …

九月SLAM相关论文速递

九月SLAM相关论文速递 论文列表DirectTracker: 3D Multi-Object Tracking Using Direct Image Alignment and Photometric Bundle Adjustment3D VSG: Long-term Semantic Scene Change Prediction through 3D Variable Scene GraphsLeveraging Large Language Models for Robo…

使用服务器跑模型——案例1

案例1 该方法mac&#xff0c;linux&#xff0c;windows都通用。我们使用terminal or cmd进行操作。 假设我们本地具有一个需要跑的模型Unet&#xff0c;我们需要将该模型上传到服务器上跑&#xff0c;步骤如下&#xff1a; 使用tar压缩文件 我们定位到我们需要压缩的模型&a…

云原生之容器编排实践-以k8s的Service方式暴露SpringBoot服务

背景 上一篇文章云原生之容器编排实践-SpringBoot应用以Deployment方式部署到minikube以及弹性伸缩中&#xff0c;我们通过 Deployment 完成了将 SpringBoot 应用部署到 minikube 并测试了其弹性伸缩的丝滑体验。但是 Deployment 部署后我们还面临以下问题&#xff1a; 访问时…

Day761.Redis集群方案:Codis -Redis 核心技术与实战

Redis集群方案&#xff1a;Codis Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于Redis集群方案&#xff1a;Codis Redis 的切片集群使用多个实例保存数据&#xff0c;能够很好地应对大数据量的场景。哨兵集群&#xff0c; Redis 官方提供的切片集群方案 Redis Clus…

SPI总线通信——基于STM32MP157A

SPI总线概念 SPI总线是Motorola首先提出的全双工三线/四线同步串行总线&#xff0c;采用主从模式&#xff08;Master Slave&#xff09;架构&#xff1b;支持多从机&#xff08;slave&#xff09;模式应用&#xff0c;一般仅支持单主机&#xff0c;多从机。 时钟由主机控制&…

java培训技术处理模型数据之 ModelAndView

处理模型数据之 ModelAndView 1 ModelAndView介绍 控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息&#xff0c;也包含模型 数据信息。 2&#xff09;添加模型数据: MoelAndView addObject(String attributeName, Object attributeValue) ModelAndView…

C#-设计模式学习笔记

目录前言&#xff1a;最近得到师傅指点&#xff0c;建议我多学习下设计模式&#xff0c;简单记录下学习过程中的一些知识点1.设计模式&#xff08;创建型&#xff09;1.单例模式&#xff1a;1. 单例模式的主要作用2.单例模式能解决的问题3.单例模式的使用场景4.怎么实现单例模式…

Charles安装和抓包原理

进行APP服务器开发&#xff0c;接口测试、bug定位&#xff0c;抓取移动端请求数据包在所难免&#xff0c;公司使用的Charles&#xff0c;后面有机会使用了其它软件再做对比。Charles并不是安装即可用&#xff0c;涉及一些参数配置&#xff0c;特此记录分享。 1 安装、破解Char…

C51之温湿度检测系统(自动开关风扇)

目录 DHT11 温湿度传感器 产品概述 特点 检测模块是否存在 温湿度数据管理系统 uart.c文件 uart.h文件 lcd1602.c文件 lcd1602.H文件 dht11.c文件 dht11.h文件 delay.c文件 delay.h文件 config.h文件 main.c文件 DHT11 温湿度传感器 产品概述 DHT11数字温湿度传感…

2022/10/6——基于stm32mp157a的SPI实验

SPI总线是Motorola首先提出的全双工三线/四线同步串行总线 采用主从模式架构&#xff0c;支持多从机模式应用&#xff0c;但一般仅支持单主机&#xff0c;多从机 时钟由主机控制&#xff0c;在时钟移位脉 冲下&#xff0c;数据按位传输&#xff0c;高位在前&#xff0c;低位在…

网课查题系统-题库量全网最多

网课查题系统-题库量全网最多 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#x…

React源码分析4-深度理解diff算法

上一章中 react 的 render 阶段&#xff0c;其中 begin 时会调用 reconcileChildren 函数&#xff0c; reconcileChildren 中做的事情就是 react 知名的 diff 过程&#xff0c;本章会对 diff 算法进行讲解。 diff 算法介绍 react 的每次更新&#xff0c;都会将新的 ReactElem…

Learning With Error(LWE)问题学习

概念 又称误差还原&#xff0c;容错学习问题&#xff0c;即已知一个矩阵AAA以及一个向量&#xff0c;求解 b^Axe\hat{b}A xe b^Axe 这里eee是一个固定数值范围内随机采集的一个随机噪音向量&#xff0c;所以这个问题就转化为通过AAA和b^\hat{b}b^来还原最初的未知向量xxx 可以…

android studio2021.3.1 最新xposed模块编写指南

前言 最新的xposed框架已经从xposed到Edxposed再到Lsposed&#xff0c;虽然xposed的api依然是通用的82版本&#xff0c;但现在网上大多数的在android studio上配置xposed的教程已经有点落后了&#xff0c;因此写下这篇来记录自己安装的流程。lsposed如何安装可以看我之前的小米…

CPU 和 CPU Core 有啥区别?多核 CPU?多个 CPU?单核 CPU 为何也支持多线程呢?

由于现在大多计算机都是多核CPU&#xff0c;多线程往往会比单线程更快&#xff0c;更能够提高并发&#xff0c;但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁&#xff0c;你的程序反而不能支持更高的TPS。 CPU 组成 CPU 全…

JavaSE --- 学Java你应该知道的历史

目录 一. Java的历史 1. Java的发明人詹姆斯高斯林 2. Java的logo 3. java的发展 二. Java 语言的特性 &#x1f416;&#x1f416;&#x1f416;&#x1f416;如果喜欢&#xff01;&#xff01;&#x1f402;&#x1f402;&#x1f402;&#x1f402; &#x1f416;&#x1f4…

创建PyQt项目需要配置三个的External Tools

1. Qt Designer&#xff1a;Qt设计器 Qt Designer D:\PyQtLearning\venv\Lib\site-packages\QtDesigner\designer.exe $ProjectFileDir$ 2. PyUIC&#xff1a;将.ui文件转换为.py文件 PyUIC D:\PyQtLearning\venv\Scripts\pyuic5.exe -o $FileNameWithoutExtension$.py $Fi…

Apache HBase API及备份与还原

一、Apache HBase API Apache HBase也适用于多个外部API。有关更多信息&#xff0c;请参阅Apache HBase外部API&#xff08;将在下一节的内容中介绍&#xff09;。 有关使用本机HBase API的信息&#xff0c;请参阅User API Reference和HBase API章节。 示例&#xff1a; 使…