前一次试验了配置ADS1.2,不过那个源文件只有一个,并且是使用汇编编写的。本次讲的是如何配置ADS1.2,并且编写简单的汇编来初始化C语言运行的环境,最后调用C语言程序。
关于ADS1.2的配置,基本配置和上一次说的一样,最不过在第六步(配置ARM Linker)就不是上次讲的那麽简单了,因为程序现在是采用多个文件:一个汇编文件,负责为调用C程序设置环境(主要是栈);另一个是使用C语言编写的程序。我们知道在多文件编译的时候,要指定程序的入口,所以本次配置ARM Linker如下:
打开DebugRel Settings(ALT + F7),选择”ARM Linker”, 选择”Linktype为Simple”,将”Simple image”的”RO Base”改为0x30000000。设置“Equvalent Command Line”为:
-info totals -entry 0x30000000 -ro-base 0x30000000 -first Init.o(Init)
说明:Init.o为Init.S编译生成的目标文件,(Init)为Init.S中的Init域(AREA Init,CODE,READONLY)。
设置好之后,我们就可以分别编写程序了。在次给出我写的程序:
Init.S
IMPORT main CODE32 AREA Init,CODE,READONLY ENTRY ldr r0, =0x53000000 mov r1, #0x0 str r1, [r0] ldr sp, =1024 * 4 bl main main_loop b main_loop END
|
main.c
#define GPBCON (*(volatile unsigned long *)0x56000010) #define GPBDAT (*(volatile unsigned long *)0x56000014)
#define LED1 (1 << (5 * 2)) #define LED2 (1 << (6 * 2)) #define LED3 (1 << (7 * 2)) #define LED4 (1 << (8 * 2)) #define LEDS (LED1 | LED2 | LED3 | LED4)
void delay(int dly);
int main() { int flag = 0; GPBCON = LEDS; while (1) { if (flag) { GPBDAT = 0xffffffff; flag = 0; } else { GPBDAT = 0x00000000; flag = 1; } delay(120); } return 0; }
void delay(int dly) { int i; for (;dly > 0; dly--) for (i = 0;i < 10000; i++); }
|
阅读(5263) | 评论(7) | 转发(0) |