OK6410循环电灯程序,汇编语言与C语言。


学习笔记,高手勿笑!

汇编语言循环点灯程序:


start.S

/******************/
/*循环点亮4盏LED灯*/
/******************/

.globl _start
_start:

/* 硬件相关的设置 */
	/* Peri port setup */
	ldr r0, =0x70000000
	orr r0, r0, #0x13
	mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)


/* 关看门狗 */
/* 往WTCON(0x7E004000)写0 */
	ldr r0, =0x7E004000
	mov r1, #0
	str r1, [r0]

/* 设置GPMCON让GPM0-3作为输出引脚 */
/*GPMCON = 0x7F008820,GPMDAT  0x7F008824*/
	ldr r0, =0x7F008820
	ldr r1, =0x1111
	str r1, [r0]

/* 设置GPMDAT让GPM3输出0 */
	ldr r1, =0x7F008824
	mov r0, #0
	str r0, [r1]
	bl delay

loop:
	/* 点亮LED1 */
	mov r0, #0xE
	str r0,[r1]
	bl delay

	/* 点亮LED2 */
	mov r0, #0xD
	str r0,[r1]
	bl delay

	/* 点亮LED3 */
	mov r0, #0xB
	str r0,[r1]
	bl delay

	/* 点亮LED4 */
	mov r0, #0x7
	str r0,[r1]
	bl delay

	b loop

/*延时*/
delay:
	mov r2, #0x10000
delay_loop:
	sub r2, r2,#1
	cmp r2, #0
	bne delay_loop
	mov pc, lr

halt:
	b halt

makefile

led.bin: start.o
	arm-linux-ld -Ttext 0 -o led.elf start.o
	arm-linux-objcopy -O binary led.elf led.bin
	arm-linux-objdump -D led.elf > led.dis

start.o: start.S
	arm-linux-gcc -o start.o -c start.S

clean:
	rm -f start.o led.dis led.bin led.elf

在linux主机上面编译好后下载到nandflash,就可以看到LED灯循环闪动。

-------------------------------------

C语言循环点灯程序:

start.S

.globl _start
_start:

/* 硬件相关的设置 */
	/* Peri port setup */
	ldr r0, =0x70000000
	orr r0, r0, #0x13
	mcr p15,0,r0,c15,c2,4

/* 关看门狗 */
/* 往WTCON(0x7E004000)写0 */
	ldr r0, =0x7E004000
	mov r1, #0
	str r1, [r0]

/*设置C语言语言环境*/
	ldr sp, =8*1024
	bl main
	
halt:
	b halt


led.c


/*GPMCON = 0x7F008820,GPMDAT  0x7F008824*/

#define GPMCON (*(volatile unsigned long *)0x7F008820)
#define GPMDAT (*(volatile unsigned long *)0x7F008824)

void delay()
{
	volatile int i;
	for(i = 0; i < 0x10000; i++);
}

int main()
{
	int i;
	GPMCON = 0x1111;
	GPMDAT = 0xC;
	while(1)
	{
		for(i = 0; i < 4;i++)
		{
			GPMDAT = ~(1<<i);
			delay();
		}
	}
	return 0;
}

Makefile


led.bin: start.o led.o
	arm-linux-ld -Ttext 0 -o led.elf start.o led.o
	arm-linux-objcopy -O binary led.elf led.bin
	arm-linux-objdump -D led.elf > led.dis

start.o : start.S
	arm-linux-gcc -o start.o start.S -c -O2

led.o : led.c
	arm-linux-gcc -o led.o led.c -c -O2

clean:
	rm *.o led.elf led.bin led.dis

对GPIO的操作为了不影响其他位的状态,一般采用位操作。

如图所示对gpmcon和gpmdat的修改:




下载方法参见:OK6410烧写裸机程序到nandflash


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值