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

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

?? esam_function.c

?? 1、該PERIPHERAL文件夾包含五個有關系統外設的程序:DEC5502_USB、DEC5502_LED和DEC5502_UART程序。 2、DEC5502_USB程序主要實現了與PC機應用程
?? C
?? 第 1 頁 / 共 3 頁
字號:

/****************************************************************/
/*	文件名:		Esam_Function.c 								*/
/* 	功能:		定義ESAM卡的操作函數 							*/
/*  設計者:		陳湘和											*/
/*  設計日期:	10/20/2004										*/
/*--------------------------------------------------------------*/
/*  說明:														*/
/*  			該文件設計了通過DSP的UART操作ESAM卡進行數據保護 */
/*				的所有相關指令,這些指令是基于T=0協議設計的,如果 */
/* 				用戶的ESAM芯片基于T=1協議,請在使用這些函數前用	*/
/*				讀寫器或者在通過認證后用Set_Protocol指令將ESAM	*/
/*				芯片的協議改為T=0.								*/
/****************************************************************/

#include <stdio.h>
#include <csl.h>
#include "Uart_Function.h"
#include "DEC5502_DES.h"
#include "DEC5502_MAC.h"

/* 定義兩個宏來訪問系統控制寄存器 */
#define SYSCNTL1 (*(volatile int *)(0x280000))
#define SYSCNTL2 (*(volatile int *)(0x280001))

#define DES8			0
#define DES16			1
#define RSTTIME			0xAD6B		// RST信號低電平時間長度取500個時鐘周期							
#define MAXDATA			0xA7		// 一次最多能夠讀寫167個數據	
									
#define DATALENGTH		MAXDATA+7	// 接收命令緩沖區最大長度 = 
									// MAXDATA+1字節數據位+4字節MAC碼+2字節狀態位
						
Uint16 CommandLength;				// 定義命令報文的實際長度變量						
Uint16 Command[DATALENGTH];			// 定義存放命令報文的緩沖區,為了初始化方便
									// 長度設為與接收緩沖區長度一致	

Uint16 ReplyData[DATALENGTH];		// 定義接收信號緩沖區

		
extern Uint16 Get_Random(Uint16 *OutputPtr, Uint16 Length);	

/****************************************************************/
/*	函數名:		Reset_Esam() 									*/
/* 	功能:		對ESAM卡復位,并取得返回的復位應答信息			*/
/*	參數:														*/
/*				DataPtr----指向存放序列號的數組的指針			*/
/*  返回值:														*/
/*              返回unsigned short int型的16bits整數  			*/
/*				如果正確,返回值等于9000							*/
/****************************************************************/
extern Uint16 Reset_Esam(Uint16 *DataPtr)
{
	Uint16 i,FeedValue;
	
	/* 初始化接收ESAM卡應答信號的數據結構 */
    for(i=0; i<DATALENGTH; i++)
    {
    	ReplyData[i] = 0;
    }
    
	/* RST信號變為低電平 */
    SYSCNTL2 = 0x00;
    Delay_Time(200);
    
	/* 將ESAM卡的I/O端設為輸出,準備從ESAM卡接收復位應答信號 */
    SYSCNTL1 = 0x20;		
    Delay_Time(200);

    	
	/* 讓復位信號等待一段時間,滿足復位時序要求 */
	Delay_Time(RSTTIME);

	/* 讓ESAM脫離復位狀態,從而實現ESAM復位 */
	SYSCNTL2 = 0x08;
	
	/* 讀復位應答信號 */
	Read_Esam(ReplyData,13);	
	
	/* 從復位應答信號中分離出序列號 */
   	for(i=0; i<8; i++)
   	{
   		*DataPtr++ = ReplyData[i+5];
   	}
	
	/* 獲取狀態字 */
   	FeedValue = 0x9000;
	return FeedValue;
}

/****************************************************************/
/*	函數名:		Get_Response() 									*/
/* 	功能:		取回ESAM反饋的數據和MAC碼						*/
/*	參數:														*/
/*				DataPtr-----指向存放返回數據指針數組的指針		*/
/*				DataLen-----欲取回的數據和MAC碼總長度(以16進制	*/
/*							表示,單字節長度)					*/
/*  返回值:														*/
/*              返回unsigned short int型的16bits整數  			*/
/*				如果正確,返回值等于9000							*/
/****************************************************************/
extern Uint16 Get_Response(Uint16* DataPtr, Uint16 DataLen)
{
	Uint16 i,State;
	
	/* 清空命令緩沖區和接收數據緩沖區 */
    for(i=0; i<DATALENGTH; i++)
    {
    	Command[i] = 0;
    }
    
    /* 填寫接收返回數據的命令報文 */
	CommandLength = 5;
	
	Command[0] = 0x00;
	Command[1] = 0xC0;
	Command[2] = 0x00;
	Command[3] = 0x00;
	Command[4] = DataLen;	
	
	/* 將ESAM卡的I/O端設為輸入,準備向ESAM卡發接收返回數據命令 */
    SYSCNTL1 = 0x60;		
    Delay_Time(200);
    
    /* 向ESAM卡發接收返回數據命令 */
    Write_Esam();
    
    /* 將ESAM卡的I/O端設為輸出,準備從ESAM卡接收返回信息 */
    SYSCNTL1 = 0x20;		
    Delay_Time(200);
    
    /* 先清除接收緩沖區 */
    i = UART_RGET(URRBR);
	
	/* 取出ESAM反饋的命令報文中的第二個字節,丟棄 */
    while(!UART_FGET(URLSR,DR));
    i = UART_RGET(URRBR);
    
	/* 獲取返回信息 */
	Read_Esam(ReplyData,DataLen+2);
	
	/* 從返回信息中分離出數據和MAC碼 */
	for(i=0; i<DataLen; i++)
	{
		*DataPtr++ = ReplyData[i];
	}
	
	/* 獲取狀態字 */
   	State = (ReplyData[DataLen]<<8)|ReplyData[DataLen+1];
	return State;
}

/****************************************************************/
/*	函數名:		Del_Direct() 									*/
/* 	功能:		刪除以前建立的目錄文件(不包括MF文件)			*/
/*  參數:														*/
/*				無												*/
/*  返回值:														*/
/*              返回unsigned short int型的16bits整數  			*/
/*				如果正確,返回值等于9000							*/
/****************************************************************/
extern Uint16 Del_Direct(void)
{
	Uint16 i,State;
	
	/* 清空命令緩沖區 */
    for(i=0; i<DATALENGTH; i++)
    {
    	Command[i] = 0;
    }
    
    /* 填寫刪除目錄的命令報文 */
	CommandLength = 5;
	
	Command[0] = 0x80;
	Command[1] = 0x0E;
	Command[2] = 0x00;
	Command[3] = 0x00;
	Command[4] = 0x00;	
	
	/* 將ESAM卡的I/O端設為輸入,準備向ESAM卡發刪除目錄命令 */
    SYSCNTL1 = 0x60;		
    Delay_Time(200);
    
    /* 向ESAM卡發刪除目錄命令 */
    Write_Esam();
    
    /* 將ESAM卡的I/O端設為輸出,準備從ESAM卡接收返回信息 */
    SYSCNTL1 = 0x20;		
    Delay_Time(200);
    
    /* 先清除接收緩沖區 */
    i = UART_RGET(URRBR);
	
	/* 獲取返回信息 */
	Read_Esam(ReplyData,2);
	
	/* 獲取狀態字 */
   	State = (ReplyData[0]<<8)|ReplyData[1];
	return State;
}

/****************************************************************/
/*	函數名:		Create_Keyfile() 								*/
/* 	功能:		建立密鑰文件									*/
/*	參數:														*/
/*				FileID-----2字節長度的文件標識符				*/
/*				FileLen----2字節長度的文件空間大小				*/
/*				IncRight---增加密鑰權限							*/
/*  返回值:														*/
/*              返回unsigned short int型的16bits整數  			*/
/*				如果正確,返回值等于9000							*/
/****************************************************************/
extern Uint16 Create_Keyfile(Uint16 FileID, Uint16 FileLen, Uint16 IncRight)
{
	Uint16 i,State;
	
	/* 清空命令緩沖區和接收返回信息的數據結構 */
    for(i=0; i<DATALENGTH; i++)
    {
    	ReplyData[i] = 0;
    	Command[i] = 0;
    }
    
   /* 第一次發送創建Key文件的命令頭,如果正確,應該返回0xE0 */
	CommandLength = 5;
	
	Command[0] = 0x80;			// 填寫命令報文的頭域
	Command[1] = 0xE0;
	Command[2] = (FileID&0xFF00)>>8;
	Command[3] = FileID&0x00FF;
	Command[4] = 0x07;
	
	/* 將ESAM卡的I/O端設為輸入,準備向ESAM卡發創建Key文件命令 */
    SYSCNTL1 = 0x60;		
    Delay_Time(200);
    
    /* 發送創建Key文件命令的命令頭域 */
	Write_Esam();
	
	/* 將ESAM卡的I/O端設為輸出,準備從ESAM卡接收返回狀態 */
    SYSCNTL1 = 0x20;		
    Delay_Time(200);

    /* 讀空接收緩沖區 */
    i = UART_RGET(URRBR);
    
    /* 讀返回的狀態信號,以確定創建Key文件操作是否正確 */
	Read_Esam(ReplyData,1);
	
	/* 第二次發送創建Key文件命令的數據域,如果正確,應該返回狀態9000 */
	CommandLength = 7;
	
	Command[0] = 0x3F;			// 填寫命令報文的數據域
	Command[1] = (FileLen&0xFF00)>>8;
	Command[2] = FileLen&0x00FF;
    Command[3] = 0xFF;
    Command[4] = IncRight;
    Command[5] = 0xFF;
    Command[6] = 0xFF;
    
    /* 將ESAM卡的I/O端設為輸入,準備向ESAM卡發送創建Key文件命令的數據域 */
    SYSCNTL1 = 0x60;		
    Delay_Time(200);
   	
    /* 向ESAM卡發創建Key文件命令的數據域 */
    Write_Esam();
    
    /* 將ESAM卡的I/O端設為輸出,準備從ESAM卡接收返回狀態 */
    SYSCNTL1 = 0x20;		
    Delay_Time(200);
    
    /* 讀空接收緩沖區 */
    i = UART_RGET(URRBR);
    
    /* 讀返回的狀態信號,以確定創建Key文件操作是否正確 */
	Read_Esam(ReplyData,2);
	
	/* 獲取狀態字 */
   	State = (ReplyData[0]<<8)|ReplyData[1];
	return State;
}

/****************************************************************/
/*	函數名:		Increase_Key() 									*/
/* 	功能:		建立(39-外部認證/主控或36-線路保護)密鑰			*/
/*	參數:														*/
/*				KeyID----- 密鑰標識符							*/
/*				KeyType----密鑰類型(0x39或0x36)					*/
/*				UseRight---密鑰使用權							*/
/*				AltRight---密鑰更改權限							*/
/*     			NextState--后續狀態(如果密鑰類型0x36保留為0xFF) */
/*				ErrCount---錯誤計數器							*/
/*				Keys-------指向存放欲建立密鑰的數組的指針		*/
/*				Mode-------加解密密鑰方式(如果是8字節密鑰選		*/
/*						   DES8=0;否則為16字節密鑰選DES16=1)	*/
/*  返回值:														*/
/*              返回unsigned short int型的16bits整數  			*/
/*				如果正確,返回值等于9000							*/
/****************************************************************/
extern Uint16 Increase_Key(Uint16 KeyID, Uint16 KeyType, Uint16 UseRight, Uint16 AltRight, Uint16 NextState, Uint16 ErrCount, Uint16 *Keys,Uint16 Mode)
{
	
	Uint16 i,State,KeyLen;
	
	/* 清空命令緩沖區和接收返回信息的數據結構 */
    for(i=0; i<DATALENGTH; i++)
    {
    	ReplyData[i] = 0;
    	Command[i] = 0;
    }
    
    if(Mode == DES8)
    KeyLen = 8;	
    else
    KeyLen = 16;
    
   /* 第一次發送創建Key的命令頭,如果正確,應該返回0xD4 */
	CommandLength = 5;
	
	Command[0] = 0x80;			// 填寫命令報文的頭域
	Command[1] = 0xD4;
	Command[2] = 0x01;
	Command[3] = KeyID;
	Command[4] = KeyLen+5;
	
	/* 將ESAM卡的I/O端設為輸入,準備向ESAM卡發創建Key命令 */
    SYSCNTL1 = 0x60;		
    Delay_Time(200);
    
    /* 發送創建Key命令的命令頭域 */
	Write_Esam();
	
	/* 將ESAM卡的I/O端設為輸出,準備從ESAM卡接收返回狀態 */
    SYSCNTL1 = 0x20;		
    Delay_Time(200);

    /* 讀空接收緩沖區 */
    i = UART_RGET(URRBR);
    
    /* 讀返回的狀態信號,以確定創建Key操作是否正確 */
	Read_Esam(ReplyData,1);
	
	/* 第二次發送創建Key命令的數據域,如果正確,應該返回狀態9000 */
	CommandLength = KeyLen+5;
	
	Command[0] = KeyType;			// 填寫命令報文的數據域
	Command[1] = UseRight;
	Command[2] = AltRight;
	
	if(KeyType == 0x39)				// 如果是外部認證密鑰,有后續狀態
	Command[3] = NextState;
	else							// 如果是線路保護密鑰,該域保留為0xFF
    Command[3] = 0xFF;
    
    Command[4] = ErrCount;
    for(i=0; i<KeyLen; i++)
    {
    	Command[5+i] = *Keys++;
    }
    
    /* 將ESAM卡的I/O端設為輸入,準備向ESAM卡發送創建Key命令的數據域 */
    SYSCNTL1 = 0x60;		
    Delay_Time(200);
   	
    /* 向ESAM卡發創建Key命令的數據域 */
    Write_Esam();
    
    /* 將ESAM卡的I/O端設為輸出,準備從ESAM卡接收返回狀態 */
    SYSCNTL1 = 0x20;		
    Delay_Time(200);
    
    /* 讀空接收緩沖區 */
    i = UART_RGET(URRBR);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久伊人| 日韩在线a电影| 亚洲国产精品影院| 久久99国产精品久久| 91亚洲大成网污www| 日韩一级大片在线| 亚洲综合久久av| 懂色av一区二区三区蜜臀| 91精品国产欧美一区二区18| 欧美极品少妇xxxxⅹ高跟鞋| 奇米四色…亚洲| 91精彩视频在线| 亚洲色图制服丝袜| 国产精品99久久久久久似苏梦涵| 欧美伦理影视网| 一区二区三区在线免费视频| 国产成人精品1024| 久久综合999| 男女视频一区二区| 91精品国产入口| 午夜国产精品影院在线观看| 91福利小视频| 亚洲色图都市小说| 成人综合日日夜夜| 国产欧美日韩另类一区| 国产综合成人久久大片91| 欧美大片在线观看一区| 免费在线观看一区二区三区| 欧美视频中文字幕| 亚洲不卡一区二区三区| 在线精品亚洲一区二区不卡| 亚洲欧洲综合另类| 色综合久久久久网| 亚洲精选视频在线| 欧美在线视频你懂得| 亚洲欧美国产77777| 一本在线高清不卡dvd| 亚洲免费在线视频| 91久久精品一区二区二区| 亚洲一区二区高清| 欧美日韩一级视频| 日韩成人dvd| 日韩欧美亚洲国产精品字幕久久久| 日本中文字幕不卡| 日韩欧美的一区二区| 国产一区二区三区不卡在线观看 | 一本一道久久a久久精品综合蜜臀| 国产精品入口麻豆原神| 北条麻妃一区二区三区| 亚洲精品乱码久久久久久| 欧美日韩亚洲国产综合| 美女视频黄 久久| 国产午夜亚洲精品羞羞网站| 91在线一区二区| 亚洲成人av一区二区| 日韩美女主播在线视频一区二区三区| 蜜桃视频在线观看一区| 久久久久久亚洲综合影院红桃| 成人性生交大片| 亚洲一本大道在线| 日韩视频免费观看高清在线视频| 国产一二三精品| 亚洲男帅同性gay1069| 欧美日韩国产精选| 风流少妇一区二区| 亚洲成人黄色影院| 国产亚洲综合在线| 欧美日韩一区二区三区在线看| 美女在线视频一区| 1024精品合集| 精品国产一区二区三区久久影院| 成人国产精品免费观看动漫| 午夜精品视频一区| 国产精品视频一二三区| 91久久精品一区二区| 韩国成人在线视频| 亚洲午夜羞羞片| 中文字幕欧美激情| 日韩欧美综合一区| 色素色在线综合| 国产激情一区二区三区| 五月天视频一区| 亚洲男人电影天堂| 中文字幕第一区综合| 欧美一区二区三区的| 色综合天天狠狠| 成人一级视频在线观看| 免费高清成人在线| 亚洲午夜久久久| 1024精品合集| 久久久久久久久99精品| 欧美一级高清片| 欧美日韩精品一区二区| 91捆绑美女网站| 成人综合在线网站| 国产乱码精品一区二区三区av | 蜜桃一区二区三区在线| 一区二区三区四区在线免费观看 | 亚洲乱码国产乱码精品精的特点| 欧美va亚洲va香蕉在线| 欧美日韩一区高清| 欧美色图一区二区三区| 成人午夜激情在线| 国产一区二区看久久| 老司机精品视频线观看86| 亚洲国产精品精华液网站| 17c精品麻豆一区二区免费| 欧美国产日韩亚洲一区| 久久理论电影网| 久久综合九色综合97_久久久| 欧美videos大乳护士334| 91精品婷婷国产综合久久| 欧美专区在线观看一区| 色婷婷av一区二区三区软件| 91影视在线播放| 9i看片成人免费高清| av亚洲精华国产精华精华 | 成人av在线资源网| 成人涩涩免费视频| 成人国产精品免费网站| www.性欧美| 91黄色免费观看| 欧美伊人久久久久久久久影院 | 91免费观看国产| 91麻豆.com| 欧美老肥妇做.爰bbww| 91精品国产乱| 日韩精品一区国产麻豆| 久久综合九色综合欧美亚洲| 久久精品日韩一区二区三区| 国产性做久久久久久| 国产精品久久久久久久久免费丝袜| 中文字幕在线不卡国产视频| 亚洲欧美另类小说| 亚洲猫色日本管| 亚洲成人在线网站| 久久精品国产澳门| 国产丶欧美丶日本不卡视频| 不卡一区中文字幕| 欧美日韩一级二级| 精品免费一区二区三区| 亚洲国产高清在线| 亚洲国产精品人人做人人爽| 视频一区在线播放| 成熟亚洲日本毛茸茸凸凹| 日本丶国产丶欧美色综合| 日韩女优制服丝袜电影| 中文字幕精品一区二区三区精品 | 91麻豆国产在线观看| 欧美精品一卡二卡| 久久久久久黄色| 亚洲小少妇裸体bbw| 极品少妇一区二区| 色综合天天做天天爱| 日韩精品一区二区三区视频| 国产精品久久久久久久久动漫| 亚洲va韩国va欧美va精品| 国产在线视频精品一区| 欧美中文字幕一二三区视频| 精品盗摄一区二区三区| 18涩涩午夜精品.www| 麻豆成人免费电影| caoporen国产精品视频| 欧美一区二区三区系列电影| 中文字幕一区视频| 国内精品免费在线观看| 欧美亚洲动漫另类| 国产精品网曝门| 麻豆成人综合网| 欧美色窝79yyyycom| 国产精品视频你懂的| 日韩福利视频导航| 色偷偷成人一区二区三区91| 久久久久高清精品| 美国毛片一区二区三区| 91久久精品一区二区二区| 中文字幕+乱码+中文字幕一区| 三级欧美在线一区| 不卡电影一区二区三区| 日韩免费看网站| 亚洲第四色夜色| 欧美主播一区二区三区| 亚洲人快播电影网| bt7086福利一区国产| 亚洲精品一区二区三区四区高清| 亚洲国产精品尤物yw在线观看| 97久久人人超碰| 欧美高清在线一区| 国产福利一区在线观看| 精品国内片67194| 秋霞午夜鲁丝一区二区老狼| 欧美日韩视频一区二区| 亚洲精品乱码久久久久久| 97se亚洲国产综合在线| 国产精品久久免费看| 成人禁用看黄a在线| 欧美精品一区二区久久婷婷| 久久精品国产亚洲a| 日韩视频免费观看高清在线视频| 日本三级亚洲精品|