c语言设置系统时钟,系统时钟(C语言配置)—②

(4)、系统时钟(C语言配置)—②

跟上一篇文章是一样的~~

所以不解释~~

不过这里我加了点位操作的概念~~

很让人蛋疼的是,在C或者汇编语言里面用来注释的,在这里还真成了注释,不能用于显示,所以我就在“*/”之间加上了一个“~”~~

程序:

start.S

.globl _start

_start:

/* Peri Port Setup *~/

ldr r0,=0x70000000

orr r0,r0,#0x13

mcr p15,0,r0,c15,c2,4

/* Close Watch Dog *~/

ldr r0,=0x7e004000

mov r1,#0

str r1,[r0]

/* Setup SP *~/

ldr sp,=8*1024

/* Go To Setup Clock *~/

bl clock_init

/* Go To main *~/

bl main

halt:

b halt

clock.c

#define APLL_LOCK (*((volatile unsigned long

*)0x7e00f000))

#define MPLL_LOCK (*((volatile unsigned long

*)0x7e00f004))

#define EPLL_LOCK (*((volatile unsigned long

*)0x7e00f008))

#define OTHERS (*((volatile unsigned long

*)0x7e00f900))

#define CLK_DIV0 (*((volatile unsigned long

*)0x7e00f020))

#define ARM_RATIO 0 /*

ARMCLK=DOUTAPLL/(ARM_RATIO+1) *~/

#define MPLL_RATIO 0 /*

DOUTMPLL=MOUTMPLL/(MPLL_RATIO+1) *~/

#define HCLK_RATIO 1 /* HCLK=HCLKX2/(HCLK_RATIO+1)

*~/

#define HCLKX2_RATIO 1 /*

HCLKX2=HCLKX2IN/(HCLKX2_RATIO+1) *~/

#define PCLK_RATIO 3 /* PCLK=HCLKX2/(PCLK_RATIO+1)

*~/

#define APLL_CON (*((volatile unsigned long

*)0x7e00f00c))

/* FOUTAPLL=MDIV*FIN/(PDIV*2^SDIV

=266*12/(3*2^1)

=532MHz *~/

#define APLL_CON_VAL

((1<<31)|(266<<16)|(3<<8)|(1))

#define MPLL_CON (*((volatile unsigned long

*)0x7e00f010))

/* FOUTMPLL=MDIV*FIN/(PDIV*2^SDIV

=266*12/(3*2^1)

=532MHz *~/

#define MPLL_CON_VAL

((1<<31)|(266<<16)|(3<<8)|(1))

#define CLK_SRC (*((volatile unsigned long

*)0x7e00f01c))

void clock_init()

{

/* Set Lock Time *~/

APLL_LOCK=0XFFFF;

MPLL_LOCK=0XFFFF;

EPLL_LOCK=0XFFFF;

/* Set Async Mode *~/

OTHERS&=(~0XC0);

while((OTHERS&0XF00)!=0);

/* Set CLK_DIV0 *~/

CLK_DIV0=(ARM_RATIO)|(MPLL_RATIO<<4)|(HCLK_RATIO<<8)|(HCLKX2_RATIO<<9)|(PCLK_RATIO<<12);

/* Set APLL_CON/MPLL_CON *~/

APLL_CON=APLL_CON_VAL;

MPLL_CON=MPLL_CON_VAL;

/* Start PLL *~/

CLK_SRC=0X03;

}

led.c

#define GPKCON0 (*((volatile unsigned long

*)0x7f008800))

#define GPKDAT (*((volatile unsigned long

*)0x7f008808))

/* Bit Operate *~/

#define SET_BIT(x,y)

(x|=(1<

#define CLR_BIT(x,y)

(x&=~(1<

#define CPL_BIT(x,y)

(x^=(1<

#define GET_BIT(x,y)

(x&(1<

void delay()

{

volatile unsigned long i=0x10000;

while(i--);

}

int main()

{

int i=0;

GPKCON0=0x11110000;

GPKDAT=0XF0;

while(1)

{

for(i=0;i<1000;i++)

{

if(i%2==0)

CLR_BIT(GPKDAT,4);

else

SET_BIT(GPKDAT,4);

delay();

}

}

return(0);

}

最后是Makefile:

led.bin: start.o clock.o led.o

arm-linux-ld -Ttext 0 -o led.elf start.o clock.o led.o

arm-linux-objcopy -O binary led.elf led.bin

arm-linux-objdump -D led.elf > led.dis

%.o : %.S

arm-linux-gcc -o $@ $< -c

%.o : %.c

arm-linux-gcc -o $@ $< -c

clean:

rm *.o led.elf led.dis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值