汇编语言:
.global _start
_start:
/*初始化使能所有外时钟 */
ldr r0, =0x020c4068
ldr r1, =0xffffffff
str r1 , [r0]
ldr r0,=0x020c406c
str r1,[r0]
ldr r0,=0x020c4070
str r1,[r0]
ldr r0,=0x020c4074
str r1,[r0]
ldr r0,=0x020c4078
str r1,[r0]
ldr r0,=0x020c407c
str r1,[r0]
ldr r0,=0x020c4080
str r1,[r0]
/*配置 GPIO1 _IO03 PIN的复用为GPIO,也就是设置 */
ldr r0,=0x020E0068
ldr r1,=0x5
str r1,[r0]
/*配置GPIO1_IO03的电气属性 也就是寄存器:
*IO.....
*地址:0x020E0068
*bit0:0低速率
*bit5:3:110 R0/6驱动能力
*bit7;6: 10 100MHz速度
*bit11:0关闭开路能力
*bit12: 1使能pull/keepper
*bit13: 0 kepper
*bit 15:14:00 100K下拉
*bit16:0 关闭hys
*/
ldr r0,=0x020e02f4
ldr r1,=0x10b0
str r1,[r0]
/*设置GPIO
*设置GPIO1——GDIR寄存器,设置GPIO1——GPIO03为输出
*GPIO1 _GDIR寄存器地址为0x0209c004,设置GPIO1——GDIR寄存器为bit3为1
*也就是设置GPIO1_IO03为输出
*/
ldr r0,=0x0209c004
ldr r1,=0x8
str r1,[r0]
/*打开LED,也就是设置GPIO1_IO03 为0
*GPIO1_DR寄存器地址为0x0209c00
*/
ldr r0,=0x0209c000
ldr r1,=0
str r1,[r0]
loop:
b loop
C语言:
start.s:
global _start
_start:
mrs ro,cpsri
bic r0,rO,#Oxif
orr r0,r0,#0x13
msrcpsr,ro
Idr sp,=0x80200000
b main
main.h:
#ifndef _H_LED_H
#define _H_LED_H
#define CCM_CCGR0 *((volatile unsigned int *)0x020c4068)
#define CCM_CCGR1 *((volatile unsigned int *)0x020c406C)
#define CCM_CCGR2 *((volatile unsigned int *)0x020c4070)
#define CCM_CCGR3 *((volatile unsigned int *)0x020c4074)
#define CCM_CCGR4 *((volatile unsigned int *)0x020c4078)
#define CCM_CCGR5 *((volatile unsigned int *)0x020c407C)
#define CCM_CCGR6 *((volatile unsigned int *)0x020c4080)
#define SW_MUX_GPIO5_IO3 *((volatile unsigned int *)0x020E0068)
#define SW_PAD_GPIO5_IO3 *((volatile unsigned int *)0x020E00F4)
#define GPIO5_DR *((volatile unsigned int *)0x0209C000)
#define GPIO5_GDIR *((volatile unsigned int *)0x0209C004)
#endif
main.c:
#include "main.h"
void clk_enable(void)
{
CCM_CCGR0 = 0xffffffff;
CCM_CCGR1 = 0xffffffff;
CCM_CCGR2 = 0xffffffff;
CCM_CCGR3 = 0xffffffff;
CCM_CCGR4 = 0xffffffff;
CCM_CCGR5 = 0xffffffff;
CCM_CCGR6 = 0xffffffff;
}
void led_init(void)
{
GPIO1_DR = 0x0;
}
void led_on(void)
{
GPIO1_DR &= ~(1<<4);
}
void led_off(void)
{
GPIO1_DR |= (1<<4);
}
void delay_short(volatile unsigned int n)
{
while(n--){}
}
void delay(volatile unsigned int n)
{
while(n--)
{
delay_short(0x7ff);
}
}
int main(void)
{
clk_enable();
led_init();
while (1)/* 死循环 *
{
led_off();
delay(500);
led_on();
delay(500);
}
return 0;
}