2009.08到mini2440(二)板级设置

二、目的

修改cpu/arm920t/start.s包括时钟部分、中断部分、看门狗

修改cpu/arm920t/

增加mini2440的板子定义

三、步骤

1、 注释LED跳转

cpu/arm920t/start.s第117行,这部分的LED初始化代码是为AT91RM9200DK开发板写的。这里我们注释掉跳转语句

blcoloured_LED_init

blred_LED_on

@bl coloured_LED_init

@bl red_LED_on

2、  添加板子宏定义

在include/configs/mini2440.h 文件中去掉s3c2410的宏定义,修改为:

#define CONFIG_S3C2440          1     /*in a SAMSUNG S3C2440 SoC     */

3、  CPU频率定义

S3c2440比s3c2410的频率要高,为405MHZ。所以我们必须要修改CPU频率设置的代码。

#if defined(CONFIG_S3C2400)|| defined(CONFIG_S3C2410)

/* turn off the watchdog */

# ifdefined(CONFIG_S3C2400)

#  define pWTCON             0x15300000

#  define INTMSK              0x14400008    /* Interupt-Controller base addresses */

#  define CLKDIVN     0x14800014    /* clockdivisor register */

#else

#  define pWTCON             0x53000000

#  define INTMSK              0x4A000008   /* Interupt-Controller base addresses */

#  define INTSUBMSK 0x4A00001C

#  define CLKDIVN     0x4C000014   /* clockdivisor register */

# endif

修改为

#ifdefined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

/* turn off the watchdog */

# ifdefined(CONFIG_S3C2400)

#  define pWTCON             0x15300000

#  define INTMSK              0x14400008    /* Interupt-Controller base addresses */

#  define CLKDIVN     0x14800014    /* clockdivisor register */

#else

#  define pWTCON             0x53000000

#  define INTMSK              0x4A000008   /* Interupt-Controller base addresses */

#  define INTSUBMSK        0x4A00001C

#  define CLKDIVN            0x4C000014   /*clock divisor register */

# endif

#define CLK_CTL_BASE      0x4c000000

#define MDIV_405        0x7f << 12

#define PSDIV_405              0x21

#define MDIV_200        0xa1 << 12

#define PSDIV_200              0x31

由于S3C2410和S3C2440的MPLL、UPLL计算公式不一样,所以get_PLLCLK函数也需要修改

get_PLLCLK函数在cpu\arm920t\s3c24x0\speed.c

static ulongget_PLLCLK(int pllreg)

{

S3C24X0_CLOCK_POWER * const clk_power =S3C24X0_GetBase_CLOCK_POWER();

ulong r, m, p, s;

if (pllreg == MPLL)

r = clk_power->MPLLCON;

else if (pllreg == UPLL)

r = clk_power->UPLLCON;

else

hang();

m = ((r & 0xFF000) >> 12) + 8;

p = ((r & 0x003F0) >> 4) + 2;

s = r & 0x3;

#ifdefined(CONFIG_S3C2440)

if(pllreg == MPLL)

{  

return((CONFIG_SYS_CLK_FREQ * m * 2) /(p << s));

}

#endif

return((CONFIG_SYS_CLK_FREQ * m) / (p<< s));

}

由于S3C2410和S3C2440的设置方法也不一样,所以get_HCLK函数也需要修改

get_HCLK函数在cpu\arm920t\s3c24x0\speed.c

ulong get_HCLK(void)

{

S3C24X0_CLOCK_POWER * const clk_power =S3C24X0_GetBase_CLOCK_POWER();

#ifdefined(CONFIG_S3C2440)

return(get_FCLK()/4);

#endif

return((clk_power->CLKDIVN & 0x2) ?get_FCLK()/2 : get_FCLK());

}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyjpjj.html