文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>LPC2124 C LEDFlash

LPC2124 C LEDFlash

时间:2009-04-09  来源:creatory


在ARM中不能直接运行C程序,先要用汇编语言来配置C运行的环境才行
初始化C运行环境的汇编文件:Startup.s
说明:|Image$$RO$$Limit|=|Image$$RO$$Base|+code size+RO data size
;导入ADS定义的变量
IMPORT |Image$$RO$$Limit| ;只读区域的末地址
IMPORT |Image$$RW$$Base|;读写区域的首地址
IMPORT |Image$$ZI$$Base|
IMPORT |Image$$ZI$$Limit|
;声明要调用C的入口点
IMPORT main
 AREA init,CODE,READONLY
 ENTRY
 CODE32
Reset 
 LD SP,=0X40003F00 ;设置堆栈指针
 ;初始化C的运行环境
 LDR R0,=|Image$$RO$$Limit|
 LDR R1,=|Image$$RW$$Base|
 LDR R3,=|Image$$ZI$$Base|
 CMP R0,R1 ;将Ro limit跟Rw base相比较
 BEQ LOOP1 ;如果相等则说明Rwbase紧跟在Rolimit后跳至LOOP1
LOOP0
 ;如果RW区域不为空则将RO数据拷贝至RW区域
 CMP R1,R3 ;将Rw base跟ZI base比较(CC无符号数小于)
 LDRCC R2,[R0],#4 ;如何RW区域不为空则将加载的RW数据拷贝到运行域(R2做临时寄存器)
 STRCC R2,[R1],#4 ;由于ARM指令是32位,4字节对齐则地址每次要加4
 BCC LOOP0
LOOP1
 LDR R1,=|Image$$ZI$$Limit|
 MOV R2,#0
LOOP2
 CMP R3,R1;将ZIbase跟ZIlimit比较(CC无符号数小于)
 STRCC R2,[R3],#4 ;如果小于则说明区域不为空则清零
 BCC LOOP2 ;继续
 ;跳至C程序的入口
 B main
 END
C程序
#include "LPC2124.h"
#define uint32 unsigned int
//延时函数
void delay(uint32 time){
 uint32 i;
 for(;time>0;time--)
  for(i=0;i<60000;i++);
}
int main(void){
 //设置P0所有管脚连接GPIO 
 PINSEL0=0x00000000;
 //设置P0所有管脚方向为输出
 IO0DIR=0xFFFFFFFF;
 while(1){
  ;P0口置位
  IO0SET=0xFFFFFFFF;
  ;延时
  delay(10);
  ;P0口清零
  IO0CLR=0xFFFFFFFF;
  delay(10);
 }
 return 0;
}
//LPC2124.h头文件中包含了一些寄存器的地址定义
//寄存器具体的地址可根据LPC2124UserManual中给出的定义
/*Pin Connect Block*/
//管脚连接模块控制寄存器,为防止编译器优化加上volatile关键字
//使每次的读取写入都物理的进行
#define PINSEL0 (*(volatile unsigned long*)0xe002c000)
#define PINSEL1 (*(volatile unsigned long *)0xe002c004)
//#define PINSEL2 (*(volatile unsigned long *)0xe002c014)
/*Genral Purpose Input/Output(GPIO)*/
//通过并行I/0口寄存器
#define IO0PIN (*(volatile unsigned long*)0xe0028000)
#define IO0SET (*(volatile unsigned long*)0xe0028004)
#define IO0DIR (*(volatile unsigned long*)0xe0028008)
#define IO0CLR (*(volatile unsigned long*)0xe002800c)
#define IO1PIN (*(volatile unsigned long*)0xe0028010)
#define IO1SET (*(volatile unsigned long*)0xe0028014)
#define IO1DIR (*(volatile unsigned long*)0xe0028018)
#define IO1CLR (*(volatile unsigned long*)0xe002801c)
配置ADS,DebugRelSettings->Target Settings->Post-linker选择ARM fromElf
   ->ARM Linker->Output->RO Base: 0x00 RW Base:0x40003000
  ->Options->Image entry point:0x00
  ->Layout->Object/Symbol:Startup.o Section:init
  (Startup.o就是由Startup.s汇编引导文件生成的目标文件名,init就是ARM的第一个引导段名)
  ->ARM fromELF->Output format: Intel 32 bit Hex
            ->Output filename:flashled.hex
相关阅读 更多 +
排行榜 更多 +
舔狗之路

舔狗之路

休闲益智 下载
实景全景地图

实景全景地图

交通出行 下载
射箭英雄

射箭英雄

休闲益智 下载