?? dsp281x_sysctrl.c
字號(hào):
/******************************************************************/
/*Copyright (C), 2008-2009, 力天電子,LiTian Tech.Co.Ltd. */
/* Module Name : system */
/* File Name : DSP281x_SysCtrl.c */
/* Author : 侯長(zhǎng)波 */
/* Create Date : 2009/12/1 */
/* Version : 2.0 */
/* Function :初始化系統(tǒng),包括看門狗、系統(tǒng)時(shí)鐘、外設(shè)時(shí)鐘 */
/* 中斷積存器、中斷向量表 */
/* Description : */
/* Support : www.LT430.com */
/******************************************************************/
#include "DSP281x_Device.h"
#include "System.h"
#pragma CODE_SECTION(InitFlash, "ramfuncs");
/*------------------------------------------*/
/*形式參數(shù):void */
/*返回值:void */
/*函數(shù)描述:初始化系統(tǒng) */
/*------------------------------------------*/
void InitSysCtrl(void)
{
DisableDog();//禁止看門狗
InitPll(0x02);//設(shè)置系統(tǒng)時(shí)鐘=XCLKIN*2/2
InitPeripheralClocks(); //設(shè)置外設(shè)時(shí)鐘
DINT; // 關(guān)閉總中斷
IER = 0x0000; // 關(guān)閉外設(shè)中斷
IFR = 0x0000; // 清中斷標(biāo)志
InitPieCtrl(); //初始化PIE控制寄存器
InitPieVectTable(); //使能PIE向量表
}
/*------------------------------------------*/
/*形式參數(shù):void */
/*返回值:void */
/*函數(shù)描述:禁止看門狗 */
/*------------------------------------------*/
void DisableDog(void)
{
EALLOW;
SysCtrlRegs.WDCR= 0x0068;
EDIS;
}
/*------------------------------------------*/
/*形式參數(shù):void */
/*返回值:void */
/*函數(shù)描述:喂看門狗 */
/*------------------------------------------*/
void KickDog(void)
{
EALLOW;
SysCtrlRegs.WDKEY = 0x0055;
SysCtrlRegs.WDKEY = 0x00AA;
EDIS;
}
/*------------------------------------------*/
/*形式參數(shù):void */
/*返回值:void */
/*函數(shù)描述:設(shè)置鎖相環(huán)倍頻系數(shù) */
/*------------------------------------------*/
void InitPll(Uint16 val)
{
volatile Uint16 iVol;
if (SysCtrlRegs.PLLCR.bit.DIV != val)
{
EALLOW;
SysCtrlRegs.PLLCR.bit.DIV = val;
EDIS;
for(iVol= 0; iVol<4096; iVol++);
}
}
/*------------------------------------------*/
/*形式參數(shù):void */
/*返回值:void */
/*函數(shù)描述:初始化外設(shè)時(shí)鐘 */
/*------------------------------------------*/
void InitPeripheralClocks(void)
{
EALLOW;
SysCtrlRegs.HISPCP.all = 0x0001;//設(shè)置高速時(shí)鐘 2分頻
SysCtrlRegs.LOSPCP.all = 0x0002;//設(shè)置低速時(shí)鐘 4分頻
//使能外圍模塊時(shí)鐘
SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;
SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1;
SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;
SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=1;
SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;
SysCtrlRegs.PCLKCR.bit.ECANENCLK=1;
SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;
EDIS;
}
/*------------------------------------------*/
/*形式參數(shù):void */
/*返回值:void */
/*函數(shù)描述:初始化Flash */
/*------------------------------------------*/
void InitFlash(void)
{
EALLOW;
FlashRegs.FPWR.bit.PWR = 3; //設(shè)置Flash為正常工作狀態(tài)
FlashRegs.FBANKWAIT.bit.RANDWAIT = 5;//設(shè)置隨機(jī)存取等待時(shí)間
FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5;//設(shè)置頁(yè)面存取等待時(shí)間
FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF; //設(shè)置從睡眠到等待的轉(zhuǎn)換時(shí)間
FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF; //設(shè)置從等待到激活的轉(zhuǎn)換時(shí)間
FlashRegs.FOPT.bit.ENPIPE = 1; //使能流水線模式
EDIS;
asm(" RPT #7 || NOP");//軟件延時(shí),等待流水線刷新
}
/*------------------------------------------*/
/*形式參數(shù):void */
/*返回值:狀態(tài)值 */
/*函數(shù)描述:unlocks the CSM */
/*------------------------------------------*/
#define STATUS_FAIL 0
#define STATUS_SUCCESS 1
Uint16 CsmUnlock()
{
volatile Uint16 temp;
// 寫入密鑰,應(yīng)將0xFFFF替換成密鑰值
EALLOW;
CsmRegs.KEY0 = 0xFFFF;
CsmRegs.KEY1 = 0xFFFF;
CsmRegs.KEY2 = 0xFFFF;
CsmRegs.KEY3 = 0xFFFF;
CsmRegs.KEY4 = 0xFFFF;
CsmRegs.KEY5 = 0xFFFF;
CsmRegs.KEY6 = 0xFFFF;
CsmRegs.KEY7 = 0xFFFF;
EDIS;
/// 執(zhí)行空讀
temp = CsmPwl.PSWD0;
temp = CsmPwl.PSWD1;
temp = CsmPwl.PSWD2;
temp = CsmPwl.PSWD3;
temp = CsmPwl.PSWD4;
temp = CsmPwl.PSWD5;
temp = CsmPwl.PSWD6;
temp = CsmPwl.PSWD7;
if (CsmRegs.CSMSCR.bit.SECURE == 0)
return STATUS_SUCCESS;
else
return STATUS_FAIL;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -