欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

s3c2440 ARM9 裸机驱动第二篇—2440系统时钟

程序员文章站 2024-02-22 18:40:34
...

学习嵌入式linux的小白

一、硬件部分:

1.时钟树:

2440的系统时钟是由MPLL和UPLL来设置的,MPLL用于设置FCLK、HCLK、PLCK。UPLL主要用于USB。

FCLK用于CPU核,HCLK用于AHB总线,PCLK用于APB总线。

s3c2440 ARM9 裸机驱动第二篇—2440系统时钟

2.寄存器:

对于2440,有如下寄存器

LOCKTIME、MPLLCON、UPLLCON、CLKCON、CLKSLOW、CLKDIVN、CAMDIVN。

其中:LOCKTIME用于设置locktime,默认值即可,可以不用配置

MPLLCON用于设置FCLK

UPLLCON用于设置USB时钟

CLKCON用于控制外设时钟开启或者关闭,默认都打开。

CLKDIVN、CAMDIVN用于设置HCLK、PCLK

二、软件部分:

添加一个函数void clk_init(void)

void clk_init(void)
{
	//LOCKTIME默认值
	
	CLKDIVN=0x03					//MCLK:HCLK:PCLK=1:2:4
	//CAMDIVN默认值
__asm__{					         //如果 HDIVN 不为 0,CPU 总线模式应该使用以下指令使其从								
			                         //快总线模式改变为异步总线模式(S3C2440不支持同步总线模式)。
	"MRC p15, 0, r0, c1, c0, 0\n"
	"ORR r1,  r1, #0xc0000000\n"
	"MCR p15, 0, r0, c1, c0, 0\n"
     };
	
}
//MPLLCON=(0xad<<12)|(2<<4)|1;	//MCLK=271.5M
MPLLCON=(0x5c<<12)|(1<<4)|2;    //MCLK=200M




三、出现的问题:

这是一个很傻很悲伤的问题,之前写GPIO的时候Makefile写错了,链接时将.c文件的编译文件放在了前面先链接(零地址处放的的.c的指令)

在之前的程序中发现并改了,但我写这节的时候并没有用改好的,任然用的存在问题的Makefile。

这样就没有关闭看门狗,导致开发板一直复位。

在写此节得时候,察觉到开发板不断复位,一是认为没有喂狗,但检查没问题;二是认为配置系统时钟时导致的复位,但也查不出问题。

调试了一整天,最后准备在Makefile中加些代码的时候发现了。

唉,真的是自己给自己挖的坑,只能怪自己工程有些混乱了。