原文出处:
http://www.cnblogs.com/hebaichuanyeah/
拿到一款陌生的MCU,通常想的是先跑跑裸机。……通常第一件事是观摩GPIO寄存器。
OK6410开发板电路图。
6410的IO口资源……
想关的寄存器地址
GPMCON:IO口配备寄存器。
GPMDAT与GPLPUD寄存器。
通常,接触一款新的MCU。个人喜好写一个构件库(观摩完所有的寄存器后,构件就全部写好了)。调用自己写好的构件会很方便。
创建init.s汇编代码
关看门狗 设置堆栈 设置CPU基地址
IMPORT main AREA init,CODE,READONLY PRESERVE8 ENTRY LDR R0, =0x70000000 ORR R0, r0, #0x13 MCR p15,0,R0,c15,c2,4 LDR R0, =0x7E004000 MOV R1, #0 STR R1, [r0] ldr SP, =8*1024 BL main END
创建LED.h文件
#define GPMCON (*(unsigned long volatile *)0x7F008820) #define GPMDAT (*(unsigned long volatile *)0x7F008824) #define GPMPUD (*(unsigned long volatile *)0x7F008828) #define LED1(Switch) if(!Switch)\ GPMDAT |= 0x01;\ else\ GPMDAT &= ~0x01 #define LED2(Switch) if(!Switch)\ GPMDAT |= 0x02;\ else\ GPMDAT &= ~0x02 #define LED3(Switch) if(!Switch)\ GPMDAT |= 0x04;\ else\ GPMDAT &= ~0x04 #define LED4(Switch) if(!Switch)\ GPMDAT |= 0x08;\ else\ GPMDAT &= ~0x08 extern void Delay(long); extern void LED_init(void);
创建LED.c文件
#include "LED.h" void Delay(long count) { int i; while(count--) for(i=0;i<100;i++); } void LED_init(void) { GPMCON &= 0xffff1111; //001:output GPMDAT = 0xffffffff; }
main.c主函数文件
#include "LED.h" void Main(void) { LED_init(); while(1) { LED1(1); LED4(0); Delay(100000); LED1(0); LED2(1); Delay(100000); LED3(1); LED2(0); Delay(100000); LED3(0); LED4(1); Delay(100000); } }
一个简单的流水灯程序。。和以前一样,用jlink烧至MCU。
原文出处: