首页 > 编程语言 >rock5b 尝试一次裸板程序

rock5b 尝试一次裸板程序

时间:2023-08-03 09:02:08浏览次数:34  
标签:rock5b 尝试 16 helloworld sign jump 裸板 linux gpio109

在linux虚拟机里安装arm64交叉编译环境

apt install gcc make binutils gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu flex bison

写一个helloworld.c

aarch64-linux-gnu-gcc -o helloworld helloworld.c

file helloworld

 cp to /tftp and download to uboot

setenv serverip 192.168.1.9

 setenv ipaddr 192.168.1.20

失败!裸板程序当然不是这样写的啦。。。。。。

模仿别人写个汇编试一下:

 pin 6,8,10已经作为UART和电脑连接使用了,尝试操作pin12 就是GPIO3_B5 109号,就是32*3+13,就是gpiochip3的第13号,从0开始就是在12位

让其输出一个高电平,和pin9GND之间接一个LED灯,来看能不能点亮

看手册 

 GPIO3 base addr 是      0xFEC40000

 第13号应该是low,那么

GPIO_SWPORT_DDR_L Address: Operational Base + offset (0x0008) 

这个是控制GPIO方向的,先把高16位写1 ,write access enable,就是bit28

bit12写b1,设为 output;

操作了 data direction register,操作  Port Data Register (Low) 

GPIO_SWPORT_DR_L Address: Operational Base + offset (0x0000)

这个高16位控制write access ,0 是disable,1是enable,那么bit28 写1; 低16位 写0输出低电平,1输出 high

根据我的一个电子书   Modern Arm Assembly Language Programming Covers Armv8-A 32-bit, 64-bit and SIMD.pdf

sub 减法;ret 返回;cmp 比较;

lsl  logical shift left 逻辑左移;asl   arithmetic shift 算数左移;ror rotate right向右旋转,逻辑右移左边补零,这个ror相当于右移并把右移丢失的位补到左边,像环形链表

这个图展示了a数据经过4种不同操作后值的变化。

and 按位与 ;orr 按位或;eor 按位异或;

这个图展示a和b按位操作后的结果

 sdiv signed divide 有符号除法;umull (unsigned multiply long) ;

sxth x1,w1 (sign-extend halfword), sign-extends the halfword value in the low-order 16 bits of register W1 to 64 bits and saves the result in register X1; sxtb x4,w4 (sign-extend byte) instruction sign-extends the low-order 8 bits of register W4 (argument value e) to 64 bits and saves the result in X4; madd x10,x11,x1,x10 (multiply-add) 多个相加;存于x10 .equ ARG_J,8   这个.equ可能 等同于c语言的 #define ARG_J 8 ; .global makes the symbol visible to ld. If you define symbol in your partial program, its value is made available to other partial programs that are linked with it;

b.ge  <label>   jump if >=;   汇编里冒号:前面的都叫标签;通过这些 比较 条件跳转 就可以实现循环了;

b.gt  jump if >; b.le jump if <=;

b.lt   jump if   <  ;

b.eq jump if == ;  b.eq DoneB   // jump if n == 0 b.ne  not equ?

bl 跳转;bl SumSquaresA_   // call SumSquaresA_;

neg 求相反数

-------------------学了些命令了,来写代码吧--------------------

mkdir gpio109 && cd gpio109

vi gpio109.S

//gpio3方向109,方向寄存器地址  0xFEC40000 + 0x00000008

.global _start

_start:

  mov x0,0xFEC40008  //把GPIO109的方向寄存器地址存入x0

ldr x1,[x0]  //把方向寄存器值取出来

我的.S

Makefile

用uboot tftp后 go,好像能正常运行,但是没有电灯成功

mov 接受的立即数 只能是一个16位的数 或者一个16位数左移16位或32位或48位的数;

aarch64-linux-gnu-objdump -D gpio109.elf >gpio109.dis  看我反汇编:

 

 

标签:rock5b,尝试,16,helloworld,sign,jump,裸板,linux,gpio109
From: https://www.cnblogs.com/yangdinshan/p/17601494.html

相关文章

  • 什么是递归?如果你以前从来没写过递归函数,尝试着写一个(比如用递归函数进行目录树遍历)。
    递归是一种在算法或函数中调用自身的方法。在递归过程中,问题会被分解成一个或多个相似的子问题,然后这些子问题又会进一步被分解,直到达到最简单的情况,从而得到解决。递归在编程中是一种强有力的工具,特别适合解决那些具有递归结构的问题。举个例子,我们可以使用递归函数来实现目录树......
  • rock5b uboot 命令试玩 linux安装tftpd-hpa
    光速开启一个能用的linuxFTP服务器aptinstallvsftpd-y&&systemctlenablevsftpd&&systemctlstartvsftpd然后发现uboot好像用的是tftp。。。。。。。。一种简单文本传送协议,下面linux安装tftpdaptinstalltftpd-hpamkdir/tftp&&chmod777-R/tftpvim/etc/de......
  • Three.js 尝试渲染水体等对象时出现 Can not resolve #include <colorspace_fragment>
    对Water对象渲染时出现Cannotresolve#include<colorspace_fragment> atincludeReplacer(WebGLProgram.js:220:1)....查询发现是库文件中conststring=ShaderChunk[include];该变量的值变为null,使程序错误(此时include的值为 colorspace_fragment)查询Shade......
  • 尝试解决Sublime Text启动即卡死白屏无响应问题
    最近在使用SublimeText时发现启动时会卡死将近1-2分钟,一两次可还行,但次次都出现这个问题真的忍不了辣!!等得我要摔电脑辣!!(bushi 1.问题的产生在Sublime中按下Ctrl+~开启控制台界面见下图: 我们可以看见其他插件正常加载(reloading),但我的1self这个插件出现了报错,(合理推测......
  • 尝试法师无伤打龙装大树守卫。 无+麻花稀饭咸菜鸡蛋+煎鸡蛋、黄瓜西红柿炒肉、饭
    艾尔登法环:尝试用魔法辉砾无伤打龙装大树守卫。第一次练得好好的,守卫剩一丝血的时候停止攻击他,想练练操作。结果不小心a了一下把它打死了。《一定要记得存档》只好新开了一个档,开始跑图、拿陨石杖、升级智力和蓝量。花了好多时间。血马累。可以一个boss不打直接到达王城门口。......
  • 【花雕动手做】尝试使用不同舵机来控制中空旋转平台(机械臂底盘)
    盆友送了一个机器人的关节,全金属结构,做工比较精致,如图经查这个金属关节来源于克鲁泽Cruzr人形机器人,它总共有15个自由度,其中2个就是机身关节,用于连接机身与仿生机械手臂。关键词:中空旋转平台,金属云台,机械臂旋转底盘,机器人关节,中空金属转台中空旋转平台通过电机(舵机)驱动,实......
  • 尝试调整lazasrus的SynEdit字体宽度
    lazasrus的SynEdit字体宽度和自带的控件在相同的字体时是不一样的,使用不同字体,字距相差非常大。lazarusIDE的代码编辑器使用SynEdit,也存在同样情况,为改善这情况,近日抽空修改了SynEdit的代码,用最简单的方法处理这个问题(不算完善)。修改方法:打开/lazarus/components/synedit/synte......
  • gpg 加密尝试
    1.gpg加密分为对称加密,和非对称加密对称加密:使用同一个key去解密;#gpg-e 输入password加密#gpg-d输入password解密非对称加密:他人用我的公钥来加密,我自己用私钥来解密 2.非对称加密:比如:在hostB主机上用公钥加密,在hostA主机上解密2.1在主机A上使......
  • 为什么许多数字孪生产品开始了GIS融合的尝试?
    随着数字孪生技术的发展,越来越多的产品意识到要实现数字孪生的最大价值,需要考虑多个维度的数据,包括空间信息、地理位置、环境条件等。因此,许多数字孪生产品开始了与GIS系统的融合尝试,以进一步提升其功能和应用场景。当然,其中来自各类项目中包含大量GIS数据的现实因素,也是倒逼数字......
  • Abaqus 中的步进、增量、迭代和尝试概念 硕迪科技
    Abaqus中的步进、增量、迭代和尝试等可能会在概念上让Abaqus初学者感到困惑。清楚地了解分析步骤、荷载增量和迭代之间的区别非常重要。在这篇文章中快速了解Abaqus步骤和增量迭代。在ABAQUS中,步进增量迭代是解决非线性问题的一种数值计算方法。这种方法通常用于模拟材料的非......