ARM裸奔--I/O操作1
作者:相逢萍水 日期:2010-06-01
年初买的ARM开发板,放了半年后,今天终于把它拿出来,重新开始我的ARM征途了!
今天第一个实验就是点亮板子上的LED
一) 硬件
接法如下图

二)程序
1)启动代码
芯片复位后,在进入C语言的Main()前一般有一段汇编程序来做程序运行前的准备工作,比如各堆栈的设置,复位向量的跳转等等,这些都是由启动代码来做的,详细也可以到网上搜搜相关的文章看看。这里由于程序简单,自己对照着S3C2410的启动代码写了个精简的,功能很简单,就是复位后,设置好操作模式,堆栈指针后就跳入C语言里了,其它的没有作设置。
程序代码Mode_User equ 0x10
I_Bit equ 0x80
F_Bit equ 0x40
_STACK_BASEADDRESS EQU 0x33ff8000
;The location of stacks
UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~
SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800 ~
UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 ~
AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000 ~
IRQStack EQU (_STACK_BASEADDRESS-0x1000) ;0x33ff7000 ~
FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000 ~
AREA Init,CODE,READONLY
ENTRY
b ResetHandler
b . ;handler for Undefined mode
b . ;handler for SWI interrupt
b . ;handler for PAbort
b . ;handler for DAbort
b . ;reserved
b . ;handler for IRQ interrupt
b . ;handler for FIQ interrupt
ResetHandler
MSR CPSR_c,#Mode_User|I_Bit|F_Bit;
LDR SP,=UserStack
IMPORT Main
b Main ;跳转到Main()
END
上面代码保存为Init.s
2)C语言代码
程序代码#include "2410addr.h"
int Main(void)
{
rGPFCON = 0x5500;
rGPFUP = 0xff; // The pull up function is disabled GPF[7:0]
rGPFDAT = 0xFF;
rGPGCON = 0;
rGPGUP = 0XFF;
while(1)
{
rGPFDAT &= ~(1<<4); //点亮D1
rGPFDAT &= ~(1<<5); //点亮D2
rGPFDAT &= ~(1<<6); //点亮D3
rGPFDAT &= ~(1<<7); //点亮D4
}
}
通过jtag工具连接开发板,用单步运行时可以看到发光二极管依次点亮。
注意: ADS设置ARM Linker设置中的layout按下面的设,因为我们的启动代码保存的名字是Init.s

评论: 0 | 引用: 0 | 查看次数: -
发表评论
上一篇
下一篇

文章来自:
Tags: