S3C2440C语言点灯[通俗易懂]

S3C2440C语言点灯[通俗易懂]第一代程序员使用机器码第二代程序员使用汇编第三代程序员使用C语言C语言相较于汇编和机器码是一个更高级的语言,我们使用的技术也应该与时俱进之前控制寄存器是配置GPFCON和GPFDAT寄存器,通过地址访问,所以可以用C语言来进行对地址的访问。GPFCON——0x5600,0050GPFDAT——0x5600,0054目录S3C2440芯片手册导读用指针表示S3C2440芯片手册导读对于GPFCON,只用到了16位对于GPFDAT,只用到了8位我们仍然可以以32位,就是4字节的

大家好,又见面了,我是你们的朋友全栈君。

第一代程序员使用机器码
第二代程序员使用汇编
第三代程序员使用C语言
C语言相较于汇编和机器码是一个更高级的语言,我们使用的技术也应该与时俱进
之前控制寄存器是配置GPFCON和GPFDAT寄存器,通过地址访问,所以可以用C语言来进行对地址的访问。

  • GPFCON——0x5600,0050
  • GPFDAT——0x5600,0054

S3C2440芯片手册导读

在这里插入图片描述

  • 对于GPFCON,只用到了16位
  • 对于GPFDAT,只用到了8位

我们仍然可以以32位,就是4字节的形式来访问这些寄存器

  • 对于GPFCON,我们只关心低16位
  • 对于GPFDAT,我们只关心低8位
    其他不需要用到的位,我们不写入值,或者写入0值

用指针表示

我们用4字节去访问这两个寄存器
可以用int变量去表示

注意:

  • 对int变量,最高位是表示符号位

  • 对寄存器,最高位仍然是控制硬件
    所以,我们用unsigned int来表示

  • unsigned int *pGPFCON = 0x56000050;

  • unsigned int *pGPFDAT = 0x56000054;
    在内存中的存放如下图
    在这里插入图片描述

表示如下:

*pGPFCON = 0x100; //0x400
//配置成输出引脚
*pGPFDAT = 0;
//低电平点灯

会导致
在这里插入图片描述
在这两个地址中把这两个数据写进去

代码的编写

在编写C语言的代码前,我们先考虑两个问题

  • 1、编写的main函数被谁调用
  • 2、main函数中变量保存在内存中,这个内存地址是多少

答:我们还需要编写一个汇编代码,给main函数设置一个内存来调用main函数

main函数如下

int main()
{ 
   
	unsigned int *pGPFCON = (unsigned int *)0x56000050;
	unsigned int *pGPFDAT = (unsigned int *)0x56000054;

	/*配置GPF4为输出引脚*/
	*pGPFCON = 0x100;

	/*配置GPF4输出0*/
	*pGPFDAT = 0;
	return 0;
}

汇编如下

//这些只是汇编的语法而已,没什么好记的
.text
.global _start

_start:

/*设置内存:sp(堆栈指针) 栈*/
	ldr sp, = 4096 
	/*对Nand来说,从0地址到4k空间对应的是片内内存*/
	/*将栈设置在这4k内存的顶部*/

// ldr sp, = 0x40000000 + 4096/*nor启动*/

/*调用main函数*/
	bl main /*跳转过去执行main,并且把返回地址保存起来*/

halt:
	b halt

makefile如下

all:
	arm-linux-gcc -c start.S -o start.o
	arm-linux-gcc -c led.c -o led.o
	arm-linux-ld -Ttext 0 led.o start.o -o led.elf#链接
	arm-linux-objcopy -O binary -S led.elf led.bin
	arm-linux-bojdump -D led.elf > led.dis#反汇编
clean:
	rm *.bin *.o *.elf

注意:makefile中的注释是#,如果用//会导致makefile报错

调错

这里的代码并不能成功点灯
在这里插入图片描述
左边是错误的代码,因为上面的makefile中有错误
在这里插入图片描述
链接顺序应该是先将分配地址的汇编文件放在前面

结果只是点亮一个灯,故此处不再演示

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130725.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm换行继续输入_python粘贴代码自动换行

    pycharm换行继续输入_python粘贴代码自动换行     

    2022年8月27日
    6
  • 解决MyQL数据库中1045错误的方法——Windows系统「建议收藏」

    解决MyQL数据库中1045错误的方法——Windows系统「建议收藏」在各种各样的适用场所,MySQL会出现各种各样的问题,经过足足半年的长跑,我的数据库终于修复了Bug,可以重新使用了。数据库出问题,那可能是家常便饭了。经过这足足半年的煎熬,我决定在以后的日子里,记录下我在使用数据库时遇到的色彩缤纷的问题,以及这些问题的解决方法。由此,今天写了这篇博客。首先,给大家看看,这个问题是什么样子的。我在这里用到的MySQL可视化工具为Navicat。这个错误…

    2022年6月13日
    30
  • 群晖nas 文件服务器,群晖nas挂到云服务器上

    群晖nas 文件服务器,群晖nas挂到云服务器上群晖nas挂到云服务器上内容精选换一换在公有云上部署SAPHANA所需要的云服务如下。无法直接从云备份控制台查看备份中的数据,您可以通过以下几种方式进行查看:云服务器备份使用云服务器备份创建镜像后,再使用镜像创建云服务器。登录云服务器,查看服务器中的数据。云硬盘备份使用云硬盘备份创建新的云硬盘后,将云硬盘挂载至云服务器上。登录云服务器,查看磁盘中的数据。SFSTurbo备份使用SFSTur…

    2022年6月26日
    44
  • 现代文译为古文(形容环境幽静雅致的古诗)

    现代文译为古文(形容环境幽静雅致的古诗)1.今文:身不由己古译:向来心是看客心,奈何人是剧中人。2.今文:我们越来越陌生了古译:相達何必曾相识,再看君卿已陌路。3.今文:我也不想你,你也就别想我了,古译:我断不思量,你莫思量我。4.今文:物是人非,我们回不去了,古译:柳絮随风各西东,人事无非已不同。5.今文:每时每刻都在想你古译:思君如流水,何有穷已时。6.今文:再看熟悉的地方,一切物是人非古译:青瓦长忆旧时雨,朱伞深巷无故人…

    2022年4月18日
    68
  • fast使用教程_ai基础教程入门图文

    fast使用教程_ai基础教程入门图文https://docs.fast.ai/如何利用好FASTAI——新版本fastai-v1.0快速入门https://m.oldpan.me/archives/fastai-1-0-quick-study

    2025年8月27日
    10
  • 大数据开发工作累吗?

    大数据开发工作累吗?在大数据时代的背景下,出现了另一类程序员—大数据开发工程师,他们因为掌握着前沿的大数据相关技术,深受企业重视,找工作容易收入也非常高,但作为IT行业的又一分类,是否加班牵动了无数转行者的心!对于大数据开发工作是否加班的这个问题,不能一概而论,需根据公司的实际情况而定,有些公司有加班的氛围,即使非IT岗,也会有加班的情况,这样的公司大数据开发肯定会加班无疑的;有些公司不鼓励加班,会根据大数据开发…

    2022年6月2日
    185

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号