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总线。
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中加些代码的时候发现了。
唉,真的是自己给自己挖的坑,只能怪自己工程有些混乱了。