编写代码
led.c
void delay(volatile int d)
{
while (d--);
}
int led_on(int which)
{
unsigned int *pGPFCON = (unsigned int *)0x56000050;
unsigned int *pGPFDAT = (unsigned int *)0x56000054;
if (which == 4)
{
/* 配置GPF4为输出引脚 */
*pGPFCON = 0x100;
}
else if (which == 5)
{
/* 配置GPF5为输出引脚 */
*pGPFCON = 0x400;
}
/* 设置GPF4/5输出0 */
*pGPFDAT = 0;
return 0;
}
为了保险,为delay加上volatile。
不让编译器优化,编译器可能发现delay没做任何事情,从逻辑上看省略它没有任何关系,于是会自作主张优化掉。
start.S
.text
.global _start
_start:
/* 设置内存: sp 栈 */
ldr sp, =4096 /* nand启动 */
// ldr sp, =0x40000000+4096 /* nor启动 */
mov r0, #4 //将4传给led_on
bl led_on
ldr r0, =100000//将此数传给delay
bl delay
mov r0, #5//将5传给led_on
bl led_on
halt:
b halt
makefile
all:
arm-linux-gcc -c -o led.o led.c
arm-linux-gcc -c -o start.o start.S
arm-linux-ld -Ttext 0 start.o led.o -o led.elf
arm-linux-objcopy -O binary -S led.elf led.bin
arm-linux-objdump -D led.elf > led.dis
clean:
rm *.bin *.o *.elf *.dis
现象
S3C2440汇编传参点灯
最后程序会复位,重新执行,下一篇博文讲解原因
反汇编分析
在start.S中,我们将10000存放在r0中。此处是将r0取出来
0x34、0x35
是将r0的值存放在fp -16的地方,再取出来读到r3
0x3c
r3减1
后面把r3再存回去,再读
0x48
是将r3和1比较,对应C语言代码为
while(d–);
这个C函数中用到了汇编传来的值,就是这两个函数的形式参数
关键字:S3C2440 c语言 汇编
引用地址:
S3C2440c语言汇编传参点灯
推荐阅读最新更新时间:2024-11-09 20:36
郭天祥-S3C2440开发板Linux2.6.31移植教程
本人使用的开发板是广州天嵌的TQ2440开发板 最近使用了郭天祥的教程学习S3C2440嵌入式linux2.6.31系统移植,移植yaffs2文件系统成功后,发现开发板移植的系统的ping命令无法ping通电脑。后面通过烧录开发板自带的linux镜像文件和yaffs2文件系统,对比之后。发现本人的笔记本(联想G40系列),如果只接通过本地网卡与开发板直连,无法ping通,但是使用自己的台式电脑,可以使用网线直连开发板ping通,确认了问题的原因是: 1.笔记本在网线直连开发板的情况下,无法ping通开发板。 2.个人移植的linux 2.6.31操作系统驱动存在问题。 第一个问题很好解决,如果要继续
[单片机]
S3C2440时钟系统详解
在讲述系统时钟之前,因为这些设备都是挂靠在系统时钟上的,所以必须先说系统时钟,S3C2440的时钟系统如下 外部时钟源分两种,晶振或者外部频率,由om3-2选择,时钟电路根据两种选择也有两种 我们来分析时钟图可以得到以下结论: 经过选择的外部时钟进入MPLL,进行锁相环倍频,经过锁相环之后的时钟MPLL_IN分成了三股,分别是FCLK,HCLK,PCLK.这其中HCLK和PCLK又是从HCLK分频得到的,最后ARM920T这个系统内核模块得到了两个时钟HCLK和FCLK,DMA控制器,LCD控制器,内存控制器,总线控制器,外部nand控制器和TIC,摄像头接口都来自于HCLK时钟,LCD控制器,nand控制器,cam摄像头
[单片机]
S3C2440移植uboot之新建单板_时钟_SDRAM_串口
文章目录 1.新建单板 1.1 将2410的单板文件夹拷贝成2440: 1.2 将2410的头文件拷贝成2440 2.修改boards.cfg,使uboot支持2440单板: 3.修改uboot系统时钟 4.烧写修改后的uboot 5.烧写uboot,发现串口已有数据,但是乱码 5.1进入archarmcpuarm920ts3c24x0Speed.c下的get_HCLK ()函数: 5.2编译测试 5.3所以就直接去掉该文件,不让编译器编译即可,步骤如下所示: 加粗样式 1.新建单板 1.1 将2410的单板文件夹拷贝成2440: cd /work/system/u-boot-2012.04.01/board/sam
[单片机]
存储控制器和SDRAM 实验
S3C2440 存储控制器(memory controller)提供了访问外部设备所需的信号,这是一种通过总线形式来访问扩展的外设。 S3C2440 的存储器控制器有以下的特性: 支持小字节序、大字节序(通过软件选择) 每个BANK的地址空间为128MB,总共1GB(8 BANKs) 可编程控制的总线位宽(8/16/32 -bit),不过 BANK0 只能选择两种位宽(16/32 -bit) 总共8个BANK, BANK0 ~ BANK5 可以支持外接 ROM,SRAM等,BANK6 ~ BANK7 除可以支持 ROM,SRAM外,还支持SDRAM等; BANK0 ~ BANK6 共7个BANK的起始地址是固定的; BAN
[单片机]
S3C2440 - DMA传输(以字符传输为例)
一、使用DMA的优点及DMA支持的请求源 1、DMA优点是其进行数据传输时不需要CPU的干涉,可以大大提高CPU的工作效率。 2、DMA在大容量数据传输中非常重要,比如图像数据传输,SD卡数据传输,USB数据传输等。 3、S3C2440有四个DMA,每个DMA支持的工作方式基本相同,但支持的DMA请求源可能略有不同。如下为四个DMA通道分别支持的DMA请求源: Ch0: nXDREQ0, UART0, SDI, Timer, USB EP1 Ch1: nXDREQ1, UART1, I2SSDI, SPI0, USB EP2 Ch2: I2SSDO,
[单片机]
基于S3C2440嵌入式系统的以太网接口电路设计方案
文章主要介绍了一个基于三星ARM9芯片S3C2440嵌入式系统的以太网接口电路设计方案,采用了工业级以太网控制器DM9000AEP成功实现了嵌入式系统网络数据交换。论文在重点阐述了网络接口电路基础之上,对Windows CE系统控制软件部分DM9000AEP的驱动程序和注册表项进行了具体分析。 随着微电子技术和计算机技术的发展,嵌入式技术得到广阔的发展,已成为现代工业控制、通信类和消费类产品发展的方向。以太网在实时操作、可靠传输、标准统一等方面的卓越性能及其便于安装、维护简单、不受通信距离限制等优点,已经被国内外很多监控、控制领域的研究人员广泛关注,并在实际应用中展露出显着的优势。本文提出了一种基于DM9000AE网络接口
[单片机]
新版U-boot2012.04.01移植(一)(JZ2440-S3C2440)
新版U-boot2012.04.01移植(一)(JZ2440-S3C2440) u-boot下载地址:http://www.denx.de/wiki/U-Boot/ 我们这里要下载的u-boot版本为:u-boot-2012.04.01tar.bz2 下载步骤如下: 下载完成后,在linux下进行试验: 1、初试 进行解压缩:tar xjf u-boot-2012.04.01.tar.bz2 进入目录: cd u-boot-2012.04.01/ cd u-boot-2012.04.01/ 进行配置: make smdk2410_config 编译: make 最后会出现编译错误:“arm
[单片机]
C语言:CRC校验
一、CRC码 CRC:Cylic Reduancy check译作汉语就是循环冗余校验码。 二、XOR XOR:逻辑运算符异或,不知道用符号怎么写,总之其运算法则是,不同为1,相同为0。 三、用XOR代替算术运算上除法的两个例子。 1、10110010000/11001 第一次异或(相除),得到商为1,余数为1111,加入下一位0,进行 第二次异或,得到商为1,余数为111,加入下一位1,余数为1111,四位与除数5位不能够异或计算,所以此处商为0,加入下一位0,进行 第三次异或,得到商为1,余数为111,同理第5位商为0,余数继续加入被除数的下一位0,进行 第四次异或,得到商为1,余数为101,加入后一位被
[单片机]