ARM裸奔--I/O操作1



年初买的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






文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: arm s3c2410
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.