?? sysinit.c
字號:
//-------------------------------------------------------------------------*
// 文件名: sysinit.c (芯片初始化文件) *
// 說 明: MCF52233芯片初始化(將25MHz晶振頻率倍頻到60MHz的系統時鐘) *
//-------------------------------------------------------------------------*
//1.頭文件
#include "sysinit.h" //芯片初始化頭文件
//2.內部函數聲明
void mcf52233_init(void);
void mcf5223_wtm_init(void);
void mcf5223_pll_init(void);
void mcf5223_scm_init(void);
//3.外部函數引用
extern void mcf5xxx_wr_cacr (uint32);
extern void mcf5xxx_wr_vbr (uint32);
//-------------------------------------------------------------------------*
// 函數名: mcf52233_init() *
// 功 能: 初始化MCF52233芯片 *
// 參 數: 無 *
// 返 回: 無 *
//-------------------------------------------------------------------------*
void
mcf52233_init(void)
{
extern char __DATA_ROM[];
extern char __DATA_RAM[];
extern char __DATA_END[];
extern char __BSS_START[];
extern char __BSS_END[];
extern char __heap_addr[];
extern char __heap_size[];
extern uint32 VECTOR_TABLE[];
extern uint32 __VECTOR_RAM[];
extern uint8 __SRAM[];
extern uint8 __SRAM_SIZE[];
extern uint32 __SP_INIT[];
register uint32 n;
register uint8 *dp, *sp;
//1 使能pst[0..3]
MCF_GPIO_PDDPAR = 0x0F;
//2 配置中斷向量表
mcf5xxx_wr_vbr((uint32)VECTOR_TABLE);
//3、將已初始化的數據從ROM移到RAM
if (__DATA_ROM != __DATA_RAM)
{
dp = (uint8 *)__DATA_RAM;
sp = (uint8 *)__DATA_ROM;
n = (uint32)(__DATA_END - __DATA_RAM);
while (n--)
*dp++ = *sp++;
}
//4 將所有未初始化的數據初始化為0
if (__BSS_START != __BSS_END)
{
sp = (uint8 *)__BSS_START;
n = (uint32)(__BSS_END - __BSS_START);
while (n--)
*sp++ = 0;
}
//5 設置實時時鐘頻率(MCF_CLOCK_RTCDR=晶振頻率/1Hz)
MCF_CLOCK_RTCDR = 25000000;
//6 模塊初始化
mcf5223_wtm_init(); //設置看門狗
mcf5223_pll_init(); //系統時鐘初始化
mcf5223_scm_init(); //
//清所有位允許中斷
MCF_INTC0_IMRL &= ~(MCF_INTC_IMRL_MASKALL);
}
//-------------------------------------------------------------------------*
// 函數名: mcf5223_wtm_init() *
// 功 能: 軟件看門狗定時器 *
// 參 數: 無 *
// 返 回: 無 *
//-------------------------------------------------------------------------*
void
mcf5223_wtm_init(void)
{
MCF_SCM_CWCR = 0; //禁止看門狗
//MCF_SCM_CWCR |=MCF_SCM_CWCR_CWT(0b110)|MCF_SCM_CWCR_CWE; //開看門狗
}
//-------------------------------------------------------------------------*
// 函數名: mcf5223_pll_init() *
// 功 能: 初始化PLL *
// 將25MHz晶振頻率倍頻到60MHz的系統時鐘 *
// 參 數: 無 *
// 返 回: 無 *
//-------------------------------------------------------------------------*
void
mcf5223_pll_init(void)
{
//fsys 計數公式:fsys = fref x 2(MFD + 2)/(2 exp RFD);
//fref x 2(MFD + 2) ≤ 60 MHz, fsys ≤ MHz。
//該程序中,CCHR是4(復位后默認值),MFD=4,RFD=0。系統頻率計算:
//為25MHz/(CCHR+1)* 2(MFD + 2)/(2 exp RFD) = 60Mhz.
MCF_CLOCK_SYNCR = (MCF_CLOCK_SYNCR_MFD(4)
| MCF_CLOCK_SYNCR_CLKSRC
| MCF_CLOCK_SYNCR_PLLMODE
| MCF_CLOCK_SYNCR_PLLEN) ;
while (!(MCF_CLOCK_SYNSR & MCF_CLOCK_SYNSR_LOCK))
{
}
}
//-------------------------------------------------------------------------*
// 函數名: mcf5223_scm_init() *
// 功 能: 初始化SCM模塊 *
// 設置基址、允許片上模塊訪問內部SRAM *
// 參 數: 無 *
// 返 回: 無 *
//-------------------------------------------------------------------------*
void
mcf5223_scm_init(void)
{
//使能片上模塊訪問內部SRAM
MCF_SCM_RAMBAR = (0
| MCF_SCM_RAMBAR_BA(SRAM_ADDRESS)
| MCF_SCM_RAMBAR_BDE);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -