无敌大黄蜂

为at91sam9260降频续

0
阅读(2841)

昨天为AT91sam9260降频,没有说为什么mck是PLLA的二分之一,因为bootstrap里

#define MCKR_SETTINGS (AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK | AT91C_PMC_MDIV_2)

PRES = 0 MDIV =1

看linux-2.6.20源码arch/arm/mach-at91rm9200/clock.c

596    freq /= (1 << ((mckr >> 2) & 3));  /* prescale */
597    mck.rate_hz = freq / (1 + ((mckr >> 8) & 3)); /* mdiv */

这里freq 就是PLLA clock mckr>>2 就是PRES

596行的结果是freq不变  注意597行,这里应该是个bug,估计以后的版本应该改了,正确的写法是mck.rate_hz = freq / (1 << ((mckr >> 8) & 3)); /* mdiv */

当然如果MDIV是0或1是没有问题的,但是如果是2,按手册除数应该是4,源代码计算的除数成3了!!