ARM—简单操作GPIO入门

初入领悟:

1、 程序编译

2、 GPIO操作

3、 Volatile使用与意义

 

Test1 ----- 裸板操作代码

首先代码有汇编部分与C部分;

汇编部分:1、堆栈首地址设置

                2、watchdog屏蔽

                3、跳转至main()函数

                4、停机处理

C部分:实现控制4盏led的点亮操作

 

首先说明汇编的必要性:程序运行平台为裸板,既无操作系统情况下;先考虑一下,代码编译过程分为:1、预处理2、编译3、汇编4、链接


(此图出自:http://www.chineselinuxuniversity.net/articles/50450.shtml

在进行编译时编译器会自动在执行程序下加入一些称为启动文件的代码:ctrl.o、ctri.o、crtend.o、crtn.o这些文件均为标准库文件,脱离操作系统后将无法执行,其主要功能为堆栈设置于调用main()函数;

 

因此我们必须自己完成堆栈与main()函数调用的操作在脱离系统的情况下;

======================================================================

Frist:ctr1.s

/**************************

 *完成堆栈设置

 *watchdog屏蔽

 *main()调用

 **************************/

 

.text

.global _start

_start:

       ldr          r0,=0x53000000                          @将r0设置为watchdog寄存器

       mov        r1,#0x0                                      @使用r1保存watchdog寄存器预配值

       str           r0,[r1]                                        @屏蔽watchdog

      

       ldr          sp,=1024*4                                 @设置堆栈地址

      

       blmain                                                    @调用main()函数

 

loop_tst:

       b           loop_tst

======================================================================

Second:led_on.c

#define GPBCON   (*(volatile long *)0x56000010)
#define GPBDAT   (*(volatile long *)0x56000014)
 
#define GPB4_out  (1<<(4*2))
#define GPB3_out  (1<<(3*2))
#define GPB2_out  (1<<(2*2))
#define GPB1_out  (1<<(1*2))
 
int main(void)
{
       GPBCON= (GPB1_out) | (GPB2_out) | (GPB3_out) | (GPB4_out);
       GPBDAT= 0x00000000; 
       return 0;    
}

==================================================================

Third:Makefile

 

led_on.bin:ctr1.0 led_on.o

       arm-linux-gcc-g -c -o ctr1.o ctr1.s

       arm-linux-gcc-g -c -o led_on.o led_on.c

       arm-linux-ld-Ttext 0x00000000 -g ctr1.o led_on.o -o led_on_elf

       arm-linux-objcopy-O binary -s led_on_elf led_on.bin

       arm-linux-objdump-D -m arm led_on_elf > led_on.dis

clean:

       rm-f *.o led_on_elf led_on.dis led_on.bin

==================================================================

至此点亮开发板上的led的裸板程序就完成了,make之后即可下载了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值