首页 > 编程语言 >S5PV210 | 裸机汇编LED闪烁实验

S5PV210 | 裸机汇编LED闪烁实验

时间:2023-05-11 20:11:57浏览次数:34  
标签:Control LED r1 Group S5PV210 裸机 GPD0 r0 Port

S5PV210 | 裸机汇编LED闪烁实验


目录

  • 原理图

HW-LED
  • DATASHEET

2.2.7 PORT GROUP GPD0 CONTROL REGISTER

There are six control registers, namely, GPD0CON, GPD0DAT, GPD0PUD, GPD0DRV, GPD0CONPDN and
GPD0PUDPDN in the Port Group GPD0 Control Registers.

2.2.7.1 Port Group GPD0 Control Register (GPD0CON, R/W, Address = 0xE020_00A0)

GPD0CON

2.2.7.2 Port Group GPD0 Control Register (GPD0DAT, R/W, Address = 0xE020_00A4)

GPD0DAT

2.2.7.3 Port Group GPD0 Control Register (GPD0PUD, R/W, Address = 0xE020_00A8)

GPD0PUD

2.2.7.4 Port Group GPD0 Control Register (GPD0DRV, R/W, Address = 0xE020_00AC)

GPD0DRV

2.2.7.5 Port Group GPD0 Control Register (GPD0CONPDN, R/W, Address = 0xE020_00B0)

GPD0PUDPDN

2.2.7.6 Port Group GPD0 Control Register (GPD0PUDPDN, R/W, Address = 0xE020_00B4)

GPD0PUDPDN

  • 代码实现

/***********************************************************
 *   > File Name: simple_led.S
 *   > Author: fly
 *   > Create Time: 2021-06-27  0/25  16:51:13 +0800
 *========================================================*/
#define GPD0CON         0xE02000A0
#define GPD0DAT         0xE02000A4

#define GPJ0CON         0xE0200240
#define GPJ0DAT         0xE0200244

#define PS_HOLD_CONTORL 0xE010E81C
#define WTCON           0xE2700000
#define SVC_STACK       0xD0037D80

//#define CONFIG_SYS_ICACHE_OFF   1

.global _start
_start:
    //给5v电源置锁
    //LDR指令:从内存中将1个32位的字读取到目标寄存器中
    //STR指令:将1个32位的字数据写入到指令中指定的内存单元中
    //BIC指令:位清除指令
    //ORR指令:逻辑或操作指令
    ldr r0,=PS_HOLD_CONTORL     //r0=0xE010E81C
    ldr r1,[r0]                 //将r0地址处的数据读出,保存到r1中(零偏移)
    orr r1,r1,#0x300            //设置r1的第8、9位,其他位保持不变
    orr r1,r1,#0x1              //设置r1的第1位,其他位保持不变
    str r1,[r0]                 //将r1中的内容传输到r0中数指定的地址内存中去

    //关看门狗
    ldr r0, =WTCON
    mov r1, #0                  //将立即数0传输到r1处
    str r1, [r0]

    //开/关iCache
    // MRC指令:从协处理器寄存器传数据到ARM寄存器
    // MCR指令:从ARM寄存器传数据到协处理器寄存器
    mrc p15, 0, r0, c1, c0, 0
    #ifdef CONFIG_SYS_ICACHE_OFF
    bic r0, r0, #0x00001000     @ clear bit 12 (I) I-Cache
    #else
    orr r0, r0, #0x00001000     @ set bit 12 (I) I-Cache
    #endif
    mcr p15, 0, r0, c1, c0, 0

    //设置栈,以便调用c函数
    ldr sp, =SVC_STACK

led_init:

    /* 初始化GPIO口(配置为输出模式),下面是比较规范的一种写法 */    
    ldr r0,=GPD0CON             //r0=0xE02000A0
    ldr r1,[r0]                 //将r0地址处的数据读出,保存到r1中(零偏移)
    orr r1,r1,#0x00000010       //设置r1的第4位(置1),其他位保持不变[7:4]->0001=Output
    str r1,[r0]                 //将r1中的内容传输到r0中数指定的地址内存中去

    ldr r0,=0x11111111
    ldr r1,=GPJ0CON
    str r0, [r1]                //把GPJ0所有的IO设置为输出模式

    /* 熄灭LED1/2/3 */
    ldr r0, = ((1<<3)|(1<<4)|(1<<5))
    ldr r1, =GPJ0DAT
    str r0, [r1]
 
led_run:   
    /* 点亮LED4,GPIO口输出低电平 */
    ldr r0,=GPD0DAT             //r0=0xE02000A4
    ldr r1,[r0]                 //将r0地址处的数据读出,保存到r1中(零偏移)
    bic r1,r1,#0x0002           //清除r1的第1位(置0),其他位保持不变[1]
    str r1,[r0]                 //将r1中的内容传输到r0中数指定的地址内存中去
    bl delay

    /* 熄灭LED4,GPIO口输出高电平 */
    ldr r0,=GPD0DAT             //r0=0xE02000A4
    ldr r1,[r0]                 //将r0地址处的数据读出,保存到r1中(零偏移)
    orr r1,r1,#0x0002           //设置r1的第1位(置1),其他位保持不变[1]
    str r1,[r0]                 //将r1中的内容传输到r0中数指定的地址内存中去
    bl delay

    bl led_run

half:
    b half

    /* 延时函数:delay*/
delay:
    ldr r2,=9000000
    ldr r3,=0x0
delay_loop:
    //SUB指令:从寄存器Rn中减去shifter_operand表示的数值,
    //并将结果保存在目标寄存器Rd中,并根据指令的执行结果
    //设置CPSR中的相应标志位
    //SUB {<cond>} {s} <Rd>,<Rn>,<shifter_operand>
    sub r2,r2,#1                //r2 = r2 - 1
    //CMP指令:使用寄存器Rn的值减去shifter_operand的值,
    //根据操作的结果更新CPSR中相应的条件标志位,以便后面
    //的指令根据相应的条件标志位来判断是否执行
    //CMP {<cond>} <Rn>,<shifter_operand>
    cmp r2, r3
    bne delay_loop
    mov pc,lr

编译用Makefile:

# 将所有的.o文件链接成.elf文件,“-Ttext 0x0”
# 表示程序的运行地址是0x0,由于目前编写的是位置
# 无关码,可以在任一地址运行
# 将elf文件抽取为可在开发板上运行的bin文件
# 将elf文件反汇编保存在dis文件中,调试程序会用
# 添加文件头
.PHONY: all clean tools

CROSS		?= arm-linux-
NAME		:= LED

LD			:= $(CROSS)ld
OC			:= $(CROSS)objcopy
OD			:= $(CROSS)objdump
CC			:= $(CROSS)gcc
MK			:= ../../tools/mk_image/mkv210_image

all:$(NAME).bin

$(NAME).bin : simple_led.o
	$(LD) -Ttext 0x0 -o $(NAME).elf $^
	$(OC) -O binary $(NAME).elf $(NAME).bin
	$(OD) -D $(NAME).elf > $(NAME)_elf.dis
	$(MK) $(NAME).bin

# 将当前目录下存在的汇编文件及C文件编译成.o文件
%.o : %.S
	$(CC) -o $@ $< -c
%.o : %.c
	$(CC) -o $@ $< -c

clean:
	$(RM) *.o *.elf *.bin *.dis *.sd

tools:
	make -C ../../tools/mk_image/

标签:Control,LED,r1,Group,S5PV210,裸机,GPD0,r0,Port
From: https://www.cnblogs.com/feige1314/p/17392099.html

相关文章

  • S5PV210 | 裸机汇编LED流水灯实验
    S5PV210|裸机汇编LED流水灯实验目录S5PV210|裸机汇编LED流水灯实验开发板:1.原理图2.Datasheet相关3.代码3-1.代码实现(流水灯,仅作演示)3-2.工具mkv210_image代码4.运行SD卡启动5.参考开发板:1.原理图上图中,当按下POWER键后,VDD_5V和VDD_IO会产生5V和3.3V的电压,其中D26无......
  • S5PV210 | S5PV210 概述
    目录1.S5PV210概述1.1架构概述1.2S5PV210框图1.3S5PV210的主要特性1.3.1微处理器1.3.2内存子系统1.3.3多媒体1.3.4音频子系统1.3.5安全子系统1.3.6连通性1.3.7系统外设1.4惯例1.4.1寄存器R/W约定1.4.2寄存器值约定2.内存映射2.1内存地址映射2.1.1设备特定地址......
  • S5PV210 | 微处理器启动流程
    S5PV210|微处理器启动流程目录S5PV210|微处理器启动流程S5PV210启动概述S5PV210的启动顺序iROM(BL0)的启动顺序V210启动流程图第一次启动失败时的iROM第二次启动顺序用于引导代码描述的标题信息数据编写校验和示例代码S5PV210启动概述S5PV210支持从多种设备启动,如OneNAN......
  • STM32裸机移植RT-Thread(标准版)
    前言,因为我嫌正点原子stm32l475vet6(潘多拉)给的rt-thread太过臃肿,决定自己移植一遍(RT-Thread包来自正点原子中潘多拉例程)参考了野火rt-thread的手册1、建立工程文件夹,如下      CoreCore/IncCore/src用于存放用户自己的.c和.h文件 Dri......
  • ubuntu apt 安装报错:Media change: please insert the disc labeled 'Ubuntu 20.04.5
    前言如果你在Ubuntu上使用apt安装软件包时遇到"Mediachange:pleaseinsertthedisclabeled..."的错误消息,这通常是因为apt源列表中包含CD/DVD源,但你的系统中没有插入相应的安装介质(CD或DVD)。解决检查/etc/apt/sources.list文件中,是否出现CD/DVD源。类似d......
  • How to fix WS2812B RGB LEDs strip not work bug All In One
    HowtofixWS2812BRGBLEDsstripnotworkbugAllInOnebugshttps://github.com/adafruit/Adafruit_CircuitPython_NeoPixel/issues/151solutiondemos(......
  • Failed to open connection to "session" message bus: Using X11 for dbus-daemon au
    Failedtoopenconnectionto"session"messagebus:UsingX11fordbus-daemonautolaunchwasdisabledatcompiletime,setyourDBUS_SESSION_BUS_ADDRESSinstead4Failedtoopenconnectionto"session"messagebus:UsingX11fordbus-da......
  • 解决Failed to configure a DataSource: ‘url‘ attribute is not specified and no
    <groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.13</version></dependency>开始没有制定版本报错换成了8.0版本,依旧报错 看了下配置文件没有问题查了下应该是版本冲突的问题<d......
  • using method 'mysql_native_password' failed with message
    错误消息:Connectionopenerror.Authenticationtohost'10.114.129.206'foruser'root'usingmethod'mysql_native_password'failedwithmessage:Readingfromthestreamhasfailed.DbType="MySql";ConfigId=""......
  • 解决银河麒麟V10系统Failed to download metadata for repo ‘ks10-adv-os‘报错问题
    原文链接:https://blog.csdn.net/m0_53967669/article/details/127283289在使用银河麒麟系统时会时不时的安装程序,yum命令是最方便快捷的命令,但是在使用的过程中出现了Failedtodownloadmetadataforrepo'ks10-adv-os’这样的报错如何解决呢?经过了多次的尝试,小编终于成功解决,......