?? dsp281x_sysctrl.c
字號:
?
+
/******************************************************************/
/*Copyright (C), 2008-2009, 力天電子,LiTian Tech.Co.Ltd. */
/* Module Name : system */
/* File Name : DSP281x_SysCtrl.c */
/* Author : 侯長波 */
/* Create Date : 2009/12/1 */
/* Version : 2.0 */
/* Function :初始化系統,包括看門狗、系統時鐘、外設時鐘 */
/* 中斷積存器、中斷向量表 */
/* Description : */
/* Support : www.LT430.com */
/******************************************************************/
#include "DSP281x_Device.h"
#include "System.h"
#pragma CODE_SECTION(InitFlash, "ramfuncs");
/*------------------------------------------*/
/*形式參數:void */
/*返回值:void */
/*函數描述:初始化系統 */
/*------------------------------------------*/
void InitSysCtrl(void)
{
DisableDog();//禁止看門狗
InitPll(0x2);//設置系統時鐘=XCLKIN*8/2
InitPeripheralClocks(); //設置外設時鐘
DINT; // 關閉總中斷
IER = 0x0000; // 關閉外設中斷
IFR = 0x0000; // 清中斷標志
InitPieCtrl(); //初始化PIE控制寄存器
InitPieVectTable(); //使能PIE向量表
}
/*------------------------------------------*/
/*形式參數:void */
/*返回值:void */
/*函數描述:禁止看門狗 */
/*------------------------------------------*/
void DisableDog(void)
{
EALLOW;
SysCtrlRegs.WDCR= 0x0068;
EDIS;
}
/*------------------------------------------*/
/*形式參數:void */
/*返回值:void */
/*函數描述:喂看門狗 */
/*------------------------------------------*/
void KickDog(void)
{
EALLOW;
SysCtrlRegs.WDKEY = 0x0055;
SysCtrlRegs.WDKEY = 0x00AA;
EDIS;
}
/*------------------------------------------*/
/*形式參數:void */
/*返回值:void */
/*函數描述:設置鎖相環倍頻系數 */
/*------------------------------------------*/
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++);
}
}
/*------------------------------------------*/
/*形式參數:void */
/*返回值:void */
/*函數描述:初始化外設時鐘 */
/*------------------------------------------*/
void InitPeripheralClocks(void)
{
EALLOW;
SysCtrlRegs.HISPCP.all = 0x0001;//設置高速時鐘 2分頻
SysCtrlRegs.LOSPCP.all = 0x0002;//設置低速時鐘 4分頻
//使能外圍模塊時鐘
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;
}
/*------------------------------------------*/
/*形式參數:void */
/*返回值:void */
/*函數描述:初始化Flash */
/*------------------------------------------*/
void InitFlash(void)
{
EALLOW;
FlashRegs.FPWR.bit.PWR = 3; //設置Flash為正常工作狀態
FlashRegs.FBANKWAIT.bit.RANDWAIT = 5;//設置隨機存取等待時間
FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5;//設置頁面存取等待時間
FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF; //設置從睡眠到等待的轉換時間
FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF; //設置從等待到激活的轉換時間
FlashRegs.FOPT.bit.ENPIPE = 1; //使能流水線模式
EDIS;
asm(" RPT #7 || NOP");//軟件延時,等待流水線刷新
}
/*------------------------------------------*/
/*形式參數:void */
/*返回值:狀態值 */
/*函數描述:unlocks the CSM */
/*------------------------------------------*/
#define STATUS_FAIL 0
#define STATUS_SUCCESS 1
Uint16 CsmUnlock()
{
volatile Uint16 temp;
// 寫入密鑰,應將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;
/// 執行空讀
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;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -