亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sci_boot.c

?? 一個很全面的TMS320F2812的最小系統的工程
?? C
字號:
//###########################################################################
//
// FILE: SCI_Boot.c
//
// TITLE: F2810/12 SCI Boot mode routines
//
// Functions:
//
// ui32 SCI_Boot(void)
// inline void SCIA_GPIOSelect(void)
// inline void SCIA_SysClockEnable(void)
// inline void SCIA_Init(void)
// inline void SCIA_AutobaudLock(void)
// inline ui16 SCIA_CheckKeyVal(void)
// inline void SCIA_ReservedFn(void)
// ui32 SCIA_GetLongData(void)
// ui32 SCIA_GetWordData(void)
// void SCIA_CopyData(void)
//
// Notes:
//
//###########################################################################
//
// Ver | dd mmm yyyy | Who | Description of changes
// =====|=============|==============|=======================================
// 1.0 | 12 Mar 2002 | LH | PG Release.
// | | |
//###########################################################################
#include "cpu\registers.h"
#include "f2812_boot.h"
// Private functions
inline void SCIA_GPIOSelect(void);
inline void SCIA_Init(void);
inline void SCIA_AutobaudLock(void);
inline ui16 SCIA_CheckKeyVal(void);
inline void SCIA_ReservedFn(void);
inline void SCIA_SysClockEnable(void);
ui32 SCIA_GetLongData(void);
ui16 SCIA_GetWordData(void);
void SCIA_CopyData(void);
// Data section where SCIA control registers
// reside
//#pragma DATA_SECTION(SciaRegs,".SciaRegs");
//volatile struct SCI_REGS SciaRegs;
//#pragma DATA_SECTION(GPIOMuxRegs,"GpioMuxRegsFile");
//volatile struct GPIO_MUX_REGS GPIOMuxRegs;
//#pragma DATA_SECTION(SciaRegs,"SciaRegsFile");
//volatile struct SCI_REGS SciaRegs;

//kickdog
void sKickDog(void)
{
    EALLOW;
    SysCtrlRegs.WDKEY = 0x0055;
    SysCtrlRegs.WDKEY = 0x00AA;
    EDIS;
}
//#################################################
// ui32 SCI_Boot(void)
//––––––––––––––––––––––––––––––––––––––––––––
// This module is the main SCI boot routine.
// It will load code via the SCI-A port.
//
// It will return a entry point address back
// to the InitBoot routine which in turn calls
// the ExitBoot routine.
//––––––––––––––––––––––––––––––––––––––––––––
ui32 SCI_Boot()
{
	ui32 EntryAddr;
	ui16 ErrorFlag;
	
	//sKickDog();	//lg/040616
	//SCIA_SysClockEnable();
	//SCIA_GPIOSelect();
	SCIA_Init();
	SCIA_AutobaudLock();
	// If the KeyValue was invalid, abort the load
	// and return the flash entry point.
	ErrorFlag = SCIA_CheckKeyVal();
	if (ErrorFlag == ERROR) return FLASH_ENTRY_POINT; //to be modified
	SCIA_ReservedFn();
	EntryAddr = SCIA_GetLongData();
	SCIA_CopyData();
	return EntryAddr;
}
//#################################################
// void SCIA_GPIOSelect(void)
//––––––––––––––––––––––––––––––––––––––––––
// Enable pins for the SCI-A module for SCI
// peripheral functionality.
//––––––––––––––––––––––––––––––––––––––––––
inline void SCIA_GPIOSelect()
{
	EALLOW;
	GpioMuxRegs.GPFMUX.all = 0x0030;
	EDIS;
}
//#################################################
// void SCIA_Init(void)
//––––––––––––––––––––––––––––––––––––––––––––––
// Initialize the SCI-A port for communications
// with the host.
//––––––––––––––––––––––––––––––––––––––––––––––
inline void SCIA_Init()
{
	// Enable FIFO reset bit only
	SciaRegs.SCIFFTX.all=0x8000;
	// 1 stop bit, No parity, 8-bit character
	// No loopback
	SciaRegs.SCICCR.all = 0x0007;
	// Enable TX, RX, Use internal SCICLK
	SciaRegs.SCICTL1.all = 0x0003;
	// Disable RxErr, Sleep, TX Wake,
	// Diable Rx Interrupt, Tx Interrupt
	SciaRegs.SCICTL2.all = 0x0000;
	// Relinquish SCI-A from reset
	SciaRegs.SCICTL1.all = 0x0023;
	return;
}
//#################################################
// void SCIA_AutobaudLock(void)
//––––––––––––––––––––––––––––––––––––––––––––––––
// Perform autobaud lock with the host.
// Note that if autobaud never occurs
// the program will hang in this routine as there
// is no timeout mechanism included.
//––––––––––––––––––––––––––––––––––––––––––––––––
inline void SCIA_AutobaudLock()
{
	ui16 byteData;
	// Must prime baud register with >= 1
	SciaRegs.SCILBAUD = 1;
	SciaRegs.SCIHBAUD = 0;	//lg/040616
	// Prepare for autobaud detection
	// Set the CDC bit to enable autobaud detection
	// and clear the ABD bit
	SciaRegs.SCIFFCT.all = 0x6000;// the original 0x2000 is wrong;
	// Wait until we correctly read an
	// ’A’ or ’a’ and lock
	while(SciaRegs.SCIFFCT.bit.ABD != 1) {}
	// After autobaud lock, clear the CDC bit
	SciaRegs.SCIFFCT.bit.CDC = 0;
	while(SciaRegs.SCIRXST.bit.RXRDY != 1) { }
	byteData = SciaRegs.SCIRXBUF.bit.RXDT;
	SciaRegs.SCITXBUF = byteData;
	return;
}
//#################################################
// ui16 SCIA_CheckKeyVal(void)
//–––––––––––––––––––––––––––––––––––––––––––––––––
// The header of the datafile should have a proper
// key value of 0x08 0xAA. If it does not, then
// we either have a bad data file or we are not
// booting properly. If this is the case, return
// an error to the main routine.
//–––––––––––––––––––––––––––––––––––––––––––––––––
inline ui16 SCIA_CheckKeyVal()
{
	ui16 wordData;
	wordData = SCIA_GetWordData();
	if(wordData != EIGHT_BIT_HEADER) return ERROR;
	// No error found
	return NO_ERROR;
}
//#################################################
// void SCIA_ReservedFn(void)
//–––––––––––––––––––––––––––––––––––––––––––––––––
// This function reads 8 reserved words in the header.
// None of these reserved words are used by the
// SCI boot loader at this time, they may be used in
// future devices for enhancments.
//–––––––––––––––––––––––––––––––––––––––––––––––––
inline void SCIA_ReservedFn()
{
	ui16 i;
	// Read and discard the 8 reserved words.
	for(i = 1; i <= 8; i++)
	{
		SCIA_GetWordData();
	}
	return;
}
//#################################################
// ui32 SCIA_GetLongData(void)
//–––––––––––––––––––––––––––––––––––––––––––––––
// This routine fetches two words from the SCI-A
// port and puts them together to form a single
// 32-bit value. It is assumed that the host is
// sending the data in the form MSW:LSW.
//–––––––––––––––––––––––––––––––––––––––––––––––
ui32 SCIA_GetLongData()
{
	ui32 longData = (ui32)0x00000000;
	// Fetch the upper 1/2 of the 32-bit value
	longData = ( (ui32)SCIA_GetWordData() << 16);
	// Fetch the lower 1/2 of the 32-bit value
	longData |= (ui32)SCIA_GetWordData();
	return longData;
}
//#################################################
// ui16 SCIA_GetWordData(void)
//–––––––––––––––––––––––––––––––––––––––––––––––
// This routine fetches two bytes from the SCI-A
// port and puts them together to form a single
// 16-bit value. It is assumed that the host is
// sending the data in the order LSB followed by MSB.
//–––––––––––––––––––––––––––––––––––––––––––––––
ui16 SCIA_GetWordData()
{
	ui16 wordData;
	ui16 byteData;
	wordData = 0x0000;
	byteData = 0x0000;
	// Fetch the LSB and verify back to the host
	while(SciaRegs.SCIRXST.bit.RXRDY != 1) { }
	wordData = (ui16)SciaRegs.SCIRXBUF.bit.RXDT;
	SciaRegs.SCITXBUF = wordData;
	// Fetch the MSB and verify back to the host
	while(SciaRegs.SCIRXST.bit.RXRDY != 1) { }
	byteData = (ui16)SciaRegs.SCIRXBUF.bit.RXDT;
	SciaRegs.SCITXBUF = byteData;
	// form the wordData from the MSB:LSB
	wordData |= (byteData << 8);
	return wordData;
}
//#################################################
// void SCIA_CopyData(void)
//–––––––––––––––––––––––––––––––––––––––––––––––––––––
// This routine copies multiple blocks of data from the host
// to the specified RAM locations. There is no error
// checking on any of the destination addresses.
// That is it is assumed all addresses and block size
// values are correct.
//
// Multiple blocks of data are copied until a block
// size of 00 00 is encountered.
//
//–––––––––––––––––––––––––––––––––––––––––––––––––––––
void SCIA_CopyData()
{
	struct HEADER {
		ui16 BlockSize;
		ui32 DestAddr;
	} BlockHeader;
	ui16 wordData;
	ui16 i;
	// Get the size in words of the first block
	BlockHeader.BlockSize = SCIA_GetWordData();
	// While the block size is > 0 copy the data
	// to the DestAddr. There is no error checking
	// as it is assumed the DestAddr is a valid
	// memory location
	while(BlockHeader.BlockSize != (ui16)0x0000)
	{
		BlockHeader.DestAddr = SCIA_GetLongData();
		for(i = 1; i <= BlockHeader.BlockSize; i++)
		{
			wordData = SCIA_GetWordData();
			*(ui16 *)BlockHeader.DestAddr++ = wordData;
		}
		// Get the size of the next block
		BlockHeader.BlockSize = SCIA_GetWordData();
	}
	return;
}
//#################################################
// inline void SCIA_SysClockEnable(void)
//–––––––––––––––––––––––––––––––––––––––––––––––––––––
// This routine enables the clocks to the SCIA Port.
//–––––––––––––––––––––––––––––––––––––––––––––––––––––
inline void SCIA_SysClockEnable()
{
	EALLOW;
	SysCtrlRegs.PCLKCR.bit.SCIENCLKA=1;
	SysCtrlRegs.LOSPCP.all = 0x0002;
	EDIS;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕av资源一区| 精品久久久久久综合日本欧美| 美女免费视频一区| 亚洲线精品一区二区三区 | 99视频热这里只有精品免费| 国产精品一区久久久久| 蜜臀av一级做a爰片久久| 麻豆精品一区二区综合av| 极品尤物av久久免费看| 久久99久久99小草精品免视看| 九九国产精品视频| 国产激情一区二区三区四区| 国产高清久久久久| 波多野结衣的一区二区三区| 色噜噜狠狠色综合欧洲selulu| 欧美性大战久久| 日韩欧美国产一区二区在线播放| 日韩免费电影网站| 国产日产欧美一区二区三区 | 99久久国产免费看| 91久久精品网| 日韩免费高清av| 国产精品三级av| 香蕉成人伊视频在线观看| 日av在线不卡| 成人精品视频.| 欧美午夜在线观看| 精品av久久707| 亚洲精品少妇30p| 久久99精品国产麻豆婷婷| www.66久久| 91麻豆精品国产91| 国产精品麻豆网站| 男人操女人的视频在线观看欧美| 国产精品69毛片高清亚洲| 欧美优质美女网站| 久久美女高清视频| 天天av天天翘天天综合网色鬼国产| 免费高清成人在线| 色拍拍在线精品视频8848| 精品电影一区二区| 亚洲成人tv网| 99re在线视频这里只有精品| 欧美成人官网二区| 香蕉加勒比综合久久| 成人免费电影视频| 精品伦理精品一区| 视频在线观看一区二区三区| 波多野结衣在线一区| 精品久久久久久久久久久院品网 | 国产精品天干天干在观线| 亚洲第一综合色| 成人免费视频app| 欧美xxxxx裸体时装秀| 亚洲18影院在线观看| 99热99精品| 欧美激情艳妇裸体舞| 蜜臀av一级做a爰片久久| 欧美三片在线视频观看| 亚洲特黄一级片| 不卡的电影网站| 欧美激情资源网| 韩国欧美国产1区| 日韩欧美国产小视频| 日韩成人一区二区三区在线观看| 色欧美88888久久久久久影院| 久久久99精品久久| 国产一区二区美女| 久久久青草青青国产亚洲免观| 丝袜美腿亚洲色图| 欧美久久久久久久久久| 天天综合日日夜夜精品| 91精品国产色综合久久不卡电影| 亚洲国产精品嫩草影院| 欧美日韩三级在线| 爽好多水快深点欧美视频| 91精品国产一区二区三区香蕉 | 日韩精品自拍偷拍| 理论片日本一区| 精品国产乱码久久久久久浪潮| 美女www一区二区| 久久久综合视频| 成人18视频在线播放| 亚洲免费在线看| 欧美在线观看一区二区| 视频一区视频二区中文| 337p日本欧洲亚洲大胆精品| 国产传媒一区在线| 国产精品国产三级国产aⅴ原创| av在线不卡网| 一区二区高清免费观看影视大全| 91福利在线导航| 午夜国产精品一区| 久久久精品影视| 在线观看日韩高清av| 天天色综合天天| 久久精品人人做| 91麻豆国产在线观看| 一个色妞综合视频在线观看| 欧美一区二区三区四区五区| 国产精品一区二区久激情瑜伽| 中文字幕欧美激情一区| 欧美午夜影院一区| 国产精品一二一区| 亚洲一区在线免费观看| 精品理论电影在线观看| 色综合色狠狠天天综合色| 日韩高清不卡一区二区三区| 国产蜜臀97一区二区三区 | 久久久久久久久伊人| 91久久线看在观草草青青| 麻豆精品视频在线观看视频| 中文字幕一区av| 日韩精品资源二区在线| 91猫先生在线| 国产aⅴ综合色| 日本中文字幕不卡| 亚洲欧洲国产日韩| 欧美va亚洲va国产综合| 欧美在线三级电影| 国产成人av电影在线观看| 午夜欧美2019年伦理 | 在线精品视频免费观看| 国产乱码精品一区二区三区av | 在线不卡中文字幕| 不卡视频在线看| 国产一区视频网站| 日韩成人一区二区| 亚洲一线二线三线久久久| 亚洲国产精品国自产拍av| 欧美大片在线观看一区| 欧美色图天堂网| 91香蕉视频在线| 不卡av电影在线播放| 国产盗摄视频一区二区三区| 久久精品av麻豆的观看方式| 天天av天天翘天天综合网色鬼国产| 亚洲婷婷国产精品电影人久久| 国产亚洲欧美在线| 久久人人爽人人爽| 久久人人超碰精品| 久久久久久久综合日本| 久久久精品黄色| 国产网红主播福利一区二区| 久久综合av免费| 日韩久久久精品| 精品福利视频一区二区三区| 欧美第一区第二区| 日韩欧美黄色影院| 精品国产一区久久| www国产亚洲精品久久麻豆| 欧美成人三级电影在线| 欧美r级在线观看| 欧美精品一区二区三区很污很色的 | 国产激情一区二区三区桃花岛亚洲| 理论电影国产精品| 国产曰批免费观看久久久| 韩国午夜理伦三级不卡影院| 国产精品一区二区黑丝| 不卡高清视频专区| 日本道免费精品一区二区三区| 欧美四级电影在线观看| 欧美一区中文字幕| 精品裸体舞一区二区三区| 久久精品无码一区二区三区| 国产精品丝袜黑色高跟| 亚洲免费在线电影| 日韩精品视频网| 国产成人免费在线观看不卡| 播五月开心婷婷综合| 色香蕉久久蜜桃| 91精品国产91热久久久做人人| 日韩一二三区视频| 日本一区二区视频在线| 亚洲在线免费播放| 久久99久久精品| 91蝌蚪porny| 91精品国产入口| 国产欧美一区二区精品性色超碰 | 日韩国产精品久久久| 国产一区在线看| 欧美亚洲国产一区二区三区va| 这里只有精品99re| 国产精品久久久久久久久果冻传媒 | 一本大道久久a久久综合| 欧美日韩国产123区| 精品国产免费人成电影在线观看四季 | 精品国产乱码久久久久久浪潮 | 国产精品乱子久久久久| 亚洲一区二区在线观看视频| 久久精品国内一区二区三区| 91色在线porny| 精品国产乱码久久久久久闺蜜| 日韩码欧中文字| 国产在线精品不卡| 欧美日韩一区二区三区不卡| 久久伊人蜜桃av一区二区| 午夜精品久久久| eeuss国产一区二区三区| 精品国产青草久久久久福利|