本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/54910717

版权声明:本文为博主原创文章,转载请注明http://blog.csdn.net/fengyuwuzu0519。

一:汇编点亮一个LED

1看原理图

2设置寄存器,配置引脚

3代码现

  1. @******************************************************************************
  2. @ File:led_on.S
  3. @ 功能:LED点灯程序,点亮LED1
  4. @******************************************************************************
  5. .text
  6. .global _start
  7. _start:
  8. LDR     R0,=0x56000050      @ R0设为GPFCON寄存器。此寄存器
  9. @ 用于选择端口B各引脚的功能:
  10. @ 是输出、是输入、还是其他
  11. MOV     R1,#0x00000100
  12. STR     R1,[R0]             @ 设置GPF4为输出口, 位[8:7]=0b01
  13. LDR     R0,=0x56000054      @ R0设为GPBDAT寄存器。此寄存器
  14. @ 用于读/写端口B各引脚的数据
  15. MOV     R1,#0x00000000      @ 此值改为0x00000010,
  16. @ 可让LED1熄灭
  17. STR     R1,[R0]             @ GPF4输出0,LED1点亮
  18. MAIN_LOOP:
  19. B       MAIN_LOOP

4 编写Makefile

  1. led_on.bin : led_on.S
  2. arm-linux-gcc -g -c -o led_on.o led_on.S
  3. arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf
  4. arm-linux-objcopy -O binary -S led_on_elf led_on.bin
  5. clean:
  6. rm -f   led_on.bin led_on_elf *.o

-o 输出

-c汇编不链接

-Ttext 0x0000000:代码段地址0.

5将代码上传至服务器

make编译生成 .bin文件

6下载至开发板

cd H:\ARM学习\code\gpio

oflash 选择相关选项 下载代码到开发板,上电观察现象。第一个灯亮

二:C点亮LED

1.启动文件

库(启动文件,之前是系统做好的)+自己的程序(led.c)

现在都自己来写

启动文件 crt0.S:要做什么呢?软件初始化+硬件初始化

(设置栈 就是栈指针SP指向某个内存,如果是SDRAM就要执行初始化操作)

crt0.S:

  1. @******************************************************************************
  2. @ File:crt0.S
  3. @ 功能:通过它转入C程序
  4. @******************************************************************************
  5. .text
  6. .global _start
  7. _start:
  8. ldr     r0, =0x53000000     @ WATCHDOG寄存器地址
  9. mov     r1, #0x0
  10. str     r1, [r0]            @ 写入0,禁止WATCHDOG,否则CPU会不断重启(硬件初始化完毕)
  11. ldr     sp, =1024*4         @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
  12. @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
  13. bl      main                @ 调用C程序中的main函数(BL指令会记录返回地址YF)
  14. halt_loop:
  15. b       halt_loop

2、C函数编写

  1. #define GPFCON      (*(volatile unsigned long *)0x56000050)
  2. #define GPFDAT      (*(volatile unsigned long *)0x56000054)
  3. int main()
  4. {
  5. GPFCON = 0x00000100;    // 设置GPF4为输出口, 位[9:8]=0b01
  6. GPFDAT = 0x00000000;    // GPF4输出0,LED1点亮
  7. return 0;
  8. }

-Ttext 0x0000000:代码段位于0地址。

写法解释:

总结:

裸机程序,主要包括两部分

(1)启动文件(汇编指令):负责初始化,为C准备环境

(2)C程序:实现硬件功能

02-JZ2440裸机学习之GPIO实验【转】的更多相关文章

  1. Cortex-M3学习日志(一)-- GPIO实验

    因为项目所需,所以不得不开始研究M3,我用的是NXP公司的LPC1768这个芯片,它是具有三级流水线的哈佛结构,带独立的本地指令和数据总线以及用于外设的稍微低性能的第三条总线,还包含一个支持随机跳转的 ...

  2. S02_CH10_ User GPIO实验

    S02_CH10_ User GPIO实验 在之前的第四章课程中,我们详细的讲解了如何在VIVADO软件下封装一个简单的流水灯程序.在ZYNQ开发过程中,有时候我们可能会需要与ARM硬核进行通信,在这 ...

  3. 第六周学习总结&java实验报告四

    第六周学习总结&java实验报告四 学习总结: 上一周因为接近国庆假期,所以老师没有讲太多的新知识点,只要是带我们一起做了一个动物模拟变声器的实验,进一步了解和学习到继承的 有关知识点和应用: ...

  4. JZ2440裸机点亮LED【学习笔记】

    平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 说明:韦东山一期视频学习笔记 一.我们首先来做第一个实验,用汇编语言点亮板子上的LED. 1.1 LED的原理图 从下面的原理图可知LED1是 ...

  5. CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)

    目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. ...

  6. CC2530学习路线-基础实验-GPIO 控制LED灯亮灭(1)

    目录 1.前期预备知识 1.1 新大陆ZigBee模块LED灯电路 1.2 CC2530相关寄存器 1.3 寄存器操作技巧 1.4 CPU空转延时 1.4 操作流程图 2.程序代码 The End 1 ...

  7. JZ2440 裸机驱动 第5章 GPIO接口

    本章目标:     掌握嵌入式开发的步骤:编程.编译.烧写程序.运行     通过GPIO的操作了解软件如何控制硬件 5.1 GPIO硬件介绍     S3C2440A有130个多功能输入/输出口引脚 ...

  8. Beaglebone Back学习四(GPIO实验)

    GPIO Beaglebone Back开发板引出了92个引脚,其中只有65个GPIO口可通过配置使用,由于引脚具有“复用”的特性,大约每个引脚有8种工作模式(Beagle System Refere ...

  9. nrf52裸机学习——GPIO操作

    /** * @brief Function for writing a value to a GPIO pin. * * Note that the pin must be configured as ...

随机推荐

  1. DiscuzX2.5数据库字典 值得学习

    pre_common_admincp_cmenu – 后台菜单收藏表title => ‘菜单名称’url => ‘菜单地址’sort => ’0′ COMMENT ‘菜单类型,备用’ ...

  2. token机制完成登录状态保持/身份认证

    一般APP都是刚安装后,第一次启动时需要登录(提示你需要登录或者直接启动在登录界面).而只要登录成功后,以后每次启动时都是登录状态,不需要每次启动时再次登录.不过,也有些APP若你长期未启动,再次启动 ...

  3. 413 Request Entity Too Large报错处理

    修改nginx配置   这是最简单的一个做法,着报错原因是nginx不允许上传配置过大的文件,那么件把nginx的上传大小配置调高就好.    1.打开nginx主配置文件nginx.conf,一般在 ...

  4. java虚拟机(三)--HotSpot 对象

    普通对象的创建(不包括数组和class对象): 当虚拟机遇到new指令时,会在常量池中检查是否包含这个类的符号引用(全限定名),通过这个确定是否经过类加载的过程,如果true,为该 对象分配内存,对象 ...

  5. Java变量及数据类型

    变量及数据类型 变量 变量定义格式:数据类型 变量名 = 初始化值; 基本数据类型 整形数据 package com.ahabest.demo; //输出整形数据的最小值,默认值,最大值,二进制位数 ...

  6. "ping: unknown host www.baidu.com"问题解决方式

    参考:https://blog.csdn.net/wbainngg123/article/details/51540535 在虚拟机VMware里选择桥接模式,并配置网络之后,发现ping ip地址可 ...

  7. TWaver推智能手表挑战华为苹果

    2015年的春节刚过,苹果.华为.三星就紧锣密鼓的发布了各自新产品.华为.苹果的智能手表最吸引眼球.TWaver也不甘示弱,立刻连夜推出了更像传统奢侈豪华手表的TWaver Watch,予以反击.看来 ...

  8. php第二十六节课

    会话购物车 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  9. UVA - 1601 The Morning after Halloween (双向BFS&单向BFS)

    题目: w*h(w,h≤16)网格上有n(n≤3)个小写字母(代表鬼).要求把它们分别移动到对应的大写字母里.每步可以有多个鬼同时移动(均为往上下左右4个方向之一移动),但每步结束之后任何两个鬼不能占 ...

  10. python面向对象的特点,类定义等,私有属性、公有属性、成员属性

    引子:类的对象在内存中的表示def dog(name,dog_type): def bark(d): print(d,'wang wang wang ...') data = { 'name':nam ...