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

2019-07-13 02:31发布

学习嵌入式linux的小白 一、硬件部分: 1.时钟树:
2440的系统时钟是由MPLL和UPLL来设置的,MPLL用于设置FCLK、HCLK、PLCK。UPLL主要用于USB。
FCLK用于CPU核,HCLK用于AHB总线,PCLK用于APB总线。
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 " "ORR r1, r1, #0xc0000000 " "MCR p15, 0, r0, c1, c0, 0 " }; } //MPLLCON=(0xad<<12)|(2<<4)|1; //MCLK=271.5M MPLLCON=(0x5c<<12)|(1<<4)|2;    //MCLK=200M

三、出现的问题:

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

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

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

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

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

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