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

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

?? uart.c

?? TI DM6446 EVM 串口下載程序 使用環境:windows dos環境或者linux 使用前需安裝mono
?? C
字號:
/* --------------------------------------------------------------------------
    FILE        : uart.c 				                             	 	        
    PURPOSE     : UART driver file
    PROJECT     : DaVinci User Boot-Loader and Flasher
    AUTHOR      : Daniel Allred
    DATE	    : Jan-22-2007
 
    HISTORY
 	     v1.00 completion 							 						      
 	          Daniel Allred - Jan-22-2007                                              
 ----------------------------------------------------------------------------- */
#include "dm644x.h"
#include "uart.h"
#include "util.h"
#include "ubl.h"

extern VUint32 gMagicFlag,gBootCmd;
extern VUint32 gDecodedByteCount,gSrecByteCount;

// Send specified number of bytes 
Uint32 UARTSendData(Uint8* seq, Bool includeNull)
{
	Uint32 status = 0;
    Int32 i,numBytes;
	Uint32 timerStatus = 1;
	
	numBytes = includeNull?(GetStringLen(seq)+1):(GetStringLen(seq));
	
	for(i=0;i<numBytes;i++) {
		/* Enable Timer one time */
		TIMER0Start();
		do{
			status = (UART0->LSR)&(0x20);
			timerStatus = TIMER0Status();
		} while (!status && timerStatus);

		if(timerStatus == 0)
			return E_TIMEOUT;
		
		// Send byte 
		(UART0->THR) = seq[i];
	}
	return E_PASS;
}

Uint32 UARTSendInt(Uint32 value)
{
	char seq[9];
	Uint32 i,shift,temp;

	for( i = 0; i < 8; i++)
	{
		shift = ((7-i)*4);
		temp = ((value>>shift) & (0x0000000F));
		if (temp > 9)
		{
			temp = temp + 7;
        }
		seq[i] = temp + 48;	
	}
	seq[8] = 0;
	return UARTSendData(seq, FALSE);
}

// Get string length by finding null terminating char
Int32 GetStringLen(Uint8* seq)
{
	Int32 i = 0;
	while ((seq[i] != 0) && (i<MAXSTRLEN)){ i++;}
	if (i == MAXSTRLEN)
		return -1;
	else
		return i;
}

// Receive data from UART 
Uint32 UARTRecvData(Uint32 numBytes, Uint8* seq)
{
	Uint32 i, status = 0;
	Uint32 timerStatus = 1;
	
	for(i=0;i<numBytes;i++) {
		
        // Enable timer one time
		TIMER0Start();
		do{
			status = (UART0->LSR)&(0x01);
			timerStatus = TIMER0Status();
		} while (!status && timerStatus);

		if(timerStatus == 0)
			return E_TIMEOUT;
		
		// Receive byte 
		seq[i] = (UART0->RBR) & 0xFF;
        
        // Check status for errors
        if( ( (UART0->LSR)&(0x1C) ) != 0 )
            return E_FAIL;

	}
	return E_PASS;
}

// More complex send / receive functions
Uint32 UARTCheckSequence(Uint8* seq, Bool includeNull)
{
    Int32 i, numBytes;
    Uint32  status = 0,timerStatus = 1;
    
    numBytes = includeNull?(GetStringLen(seq)+1):(GetStringLen(seq));
    
    for(i=0;i<numBytes;i++) {
        /* Enable Timer one time */
        TIMER0Start();
        do{
            status = (UART0->LSR)&(0x01);
            timerStatus = TIMER0Status();
        } while (!status && timerStatus);

        if(timerStatus == 0)
            return E_TIMEOUT;

        if( ( (UART0->RBR)&0xFF) != seq[i] )
            return E_FAIL;
    }
    return E_PASS;
}

Uint32 UARTGetHexData(Uint32 numBytes, Uint32* data) {
    
    Uint32 i,j;
    Uint32 temp[8];
    Uint32 timerStatus = 1, status = 0;
    Uint32 numLongs, numAsciiChar, shift;
    
    if(numBytes == 2) {
        numLongs = 1;
        numAsciiChar = 4;
        shift = 12;
    } else {
        numLongs = numBytes/4;
        numAsciiChar = 8;
        shift = 28;
    }

    for(i=0;i<numLongs;i++) {
        data[i] = 0;
        for(j=0;j<numAsciiChar;j++) {
            /* Enable Timer one time */
            TIMER0Start();
            do{
                status = (UART0->LSR)&(0x01);
                timerStatus = TIMER0Status();
            } while (!status && timerStatus);

            if(timerStatus == 0)
                return E_TIMEOUT;

            /* Converting ascii to Hex*/
            temp[j] = ((UART0->RBR)&0xFF)-48;
            if(temp[j] > 22)/* To support lower case a,b,c,d,e,f*/
               temp[j] = temp[j]-39;
            else if(temp[j]>9)/* To support Upper case A,B,C,D,E,F*/
               temp[j] = temp[j]-7;

            /* Checking for bit 1,2,3,4 for reception Error *///1E->1C
            if( ( (UART0->LSR)&(0x1C) ) != 0)
                return E_FAIL;

            data[i] |= (temp[j]<<(shift-(j*4)));
        }
    }
    return E_PASS;
}

Uint32 UARTGetCMD(Uint32* bootCmd)
{
    if(UARTCheckSequence((Uint8*)"    CMD", TRUE) != E_PASS)
    {
        return E_FAIL;
    }

    if(UARTGetHexData(4,bootCmd) != E_PASS)
    {
        return E_FAIL;
    }

    return E_PASS;
}

Uint32 UARTGetHeaderAndData(UART_ACK_HEADER* ackHeader)
{
    Uint32 error = E_FAIL;

    // Send ACK command
    error = UARTCheckSequence((Uint8*)"    ACK", TRUE);
    if(error != E_PASS)
    {
        return E_FAIL;
    }

    // Get the ACK header elements
    error =  UARTGetHexData( 4, (Uint32 *) &(ackHeader->magicNum)     );
    error |= UARTGetHexData( 4, (Uint32 *) &(ackHeader->appStartAddr) );
    error |= UARTGetHexData( 4, (Uint32 *) &(ackHeader->srecByteCnt)  );
    error |= UARTCheckSequence((Uint8*)"0000", FALSE);
    if(error != E_PASS)
    {
        return E_FAIL;
    }

    // Verify that the S-record's size is appropriate
    if((ackHeader->srecByteCnt == 0) || (ackHeader->srecByteCnt > MAX_IMAGE_SIZE))
    {
        UARTSendData((Uint8*)" BADCNT", TRUE);/*trailing /0 will come along*/
        return E_FAIL;
    }

    // Verify application start address is in RAM (lower 16bit of appStartAddr also used 
    // to hold UBL entry point if this header describes a UBL)
    if( (ackHeader->appStartAddr < RAM_START_ADDR) || (ackHeader->appStartAddr > RAM_END_ADDR) )
    {
        UARTSendData((Uint8*)"BADADDR", TRUE);/*trailing /0 will come along*/
        return E_FAIL;
    }

    // Allocate storage for S-record
    ackHeader->srecAddr = (Uint32) ubl_alloc_mem(ackHeader->srecByteCnt);

    // Send BEGIN command
    if ( UARTSendData((Uint8*)"  BEGIN", TRUE) != E_PASS )
        return E_FAIL;

    // Receive the data over UART
    if ( UARTRecvData(ackHeader->srecByteCnt, (Uint8*)(ackHeader->srecAddr)) != E_PASS )
    {
        UARTSendData((Uint8*)"\r\nUART Receive Error\r\n", FALSE);
        return E_FAIL;
    }

    // Return DONE when all data arrives
    if ( UARTSendData((Uint8*)"   DONE", TRUE) != E_PASS )
        return E_FAIL;

    // Now decode the S-record
    if ( SRecDecode(    (Uint8 *)(ackHeader->srecAddr),
                        ackHeader->srecByteCnt,
                        &(ackHeader->binAddr),
                        &(ackHeader->binByteCnt) ) != E_PASS )
    {
        UARTSendData((Uint8*)"\r\nS-record Decode Failed.\r\n", FALSE);
        return E_FAIL;
    }

    if ( UARTSendData((Uint8*)"   DONE", TRUE) != E_PASS )
        return E_FAIL;


    return E_PASS;
}   

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久亚洲精品一区二区三区| 久久久久久久精| 精品亚洲国内自在自线福利| 国产精品久久久久久久第一福利| 欧美日韩三级在线| 成人动漫视频在线| 麻豆传媒一区二区三区| 亚洲欧美激情小说另类| 精品国产伦一区二区三区观看体验 | 午夜久久福利影院| 欧美激情一区二区三区不卡| 欧美日韩国产在线观看| 成人v精品蜜桃久久一区| 久久国产精品第一页| 亚洲综合图片区| 国产精品系列在线| 亚洲制服丝袜av| 国产精品欧美一区喷水| 日韩天堂在线观看| 欧美日本一区二区在线观看| 99久久免费国产| 国产激情精品久久久第一区二区| 奇米一区二区三区| 午夜精品久久久久久久99樱桃| 国产精品传媒在线| 国产精品午夜电影| 久久人人超碰精品| 欧美xxxxxxxx| 欧美一区二区三区在| 欧美日韩专区在线| 日本久久一区二区| 色香色香欲天天天影视综合网| 成人免费观看av| 国产在线精品免费| 国产一区二区日韩精品| 久草热8精品视频在线观看| 亚洲444eee在线观看| 亚洲一区在线观看视频| 亚洲精品国产无套在线观| 综合久久国产九一剧情麻豆| 中文字幕欧美一| 久久精品网站免费观看| 日韩视频免费直播| 欧美一级在线免费| 精品入口麻豆88视频| 欧美电影免费观看高清完整版在 | 丁香激情综合国产| 蜜桃一区二区三区四区| 日韩精品色哟哟| 午夜精品视频一区| 美国一区二区三区在线播放| 久久精品国产一区二区三区免费看 | 精品一区二区免费看| 久久丁香综合五月国产三级网站| 日本一不卡视频| 激情综合色播激情啊| 国产一区二区在线电影| 国产高清久久久久| 9l国产精品久久久久麻豆| 色综合色狠狠综合色| 欧美性高清videossexo| 欧美性videosxxxxx| 欧美情侣在线播放| 欧美videos大乳护士334| 久久色.com| 综合久久给合久久狠狠狠97色| 亚洲欧美偷拍三级| 日韩综合在线视频| 国产精品中文字幕一区二区三区| 国产成人亚洲综合色影视| www.爱久久.com| 色嗨嗨av一区二区三区| 51精品秘密在线观看| 久久综合九色综合97婷婷| 中文字幕欧美激情一区| 一区二区三区在线视频观看| 首页国产丝袜综合| 国产黄色精品视频| 日本乱码高清不卡字幕| 日韩欧美另类在线| 久久电影网电视剧免费观看| 国产乱人伦偷精品视频免下载| 成人精品在线视频观看| 欧美专区亚洲专区| 精品少妇一区二区三区免费观看 | 国产精品一区三区| 色诱亚洲精品久久久久久| 欧美人与z0zoxxxx视频| 久久影院午夜片一区| 亚洲黄一区二区三区| 麻豆精品一二三| 91丨九色丨蝌蚪丨老版| 91精品国产全国免费观看| 国产午夜亚洲精品不卡| 亚洲一区二区av电影| 国精产品一区一区三区mba视频| 91亚洲精品乱码久久久久久蜜桃| 6080国产精品一区二区| 国产精品动漫网站| 另类小说综合欧美亚洲| 色综合久久综合网| 久久在线观看免费| 午夜精品视频一区| 99久久久久久99| 日韩久久久精品| 亚洲综合免费观看高清完整版| 国产在线国偷精品产拍免费yy| 色呦呦日韩精品| 精品999久久久| 午夜精品久久一牛影视| 99r精品视频| 久久精品这里都是精品| 日韩精品欧美精品| 在线中文字幕不卡| 国产精品亲子乱子伦xxxx裸| 久久国产精品露脸对白| 精品视频1区2区| 中文字幕日韩一区| 国产精品99久久久久久似苏梦涵| 欧美顶级少妇做爰| 一区二区三区资源| 成人av高清在线| 久久久久久久国产精品影院| 人人精品人人爱| 欧美日韩一本到| 最新不卡av在线| 成人免费观看男女羞羞视频| 久久视频一区二区| 久久99精品国产麻豆不卡| 欧美福利电影网| 亚洲国产精品久久一线不卡| 色噜噜夜夜夜综合网| 日韩理论片一区二区| 成人av在线播放网址| 久久久亚洲高清| 国产在线精品一区二区三区不卡 | 老司机精品视频导航| 欧美肥妇free| 日韩福利视频导航| 制服.丝袜.亚洲.中文.综合| 性欧美疯狂xxxxbbbb| 欧美午夜电影网| 亚洲五月六月丁香激情| 欧美日韩免费观看一区二区三区 | 91精品国产综合久久国产大片 | 欧美高清在线一区二区| 国产精品资源在线观看| 久久久精品欧美丰满| 国产成人啪午夜精品网站男同| 久久麻豆一区二区| 国产乱码精品1区2区3区| 久久午夜羞羞影院免费观看| 国产一区二区视频在线| 欧美激情一区二区三区在线| 成人丝袜高跟foot| 中文字幕日本不卡| 欧洲精品中文字幕| 天天操天天干天天综合网| 欧美一区二区三区的| 精油按摩中文字幕久久| 日本一区二区三级电影在线观看 | 久久综合久色欧美综合狠狠| 国内偷窥港台综合视频在线播放| 精品国产乱码91久久久久久网站| 国产尤物一区二区| 亚洲欧洲日本在线| 欧美精品第1页| 激情文学综合丁香| 国产精品美女一区二区三区| 在线视频国内自拍亚洲视频| 日韩精品一二三区| 久久久久久久久久久久久久久99 | 国产欧美一区二区精品秋霞影院| 成人福利视频在线看| 亚洲一区二区在线观看视频 | 国产69精品久久99不卡| 亚洲精品成a人| 日韩一区二区三区高清免费看看 | 国产一区免费电影| 亚洲蜜臀av乱码久久精品| 欧美精品高清视频| 国产成人免费视频网站| 亚洲一二三区在线观看| 26uuu欧美日本| 在线亚洲+欧美+日本专区| 蓝色福利精品导航| 自拍偷自拍亚洲精品播放| 欧美一区二区视频在线观看2022| 国产a久久麻豆| 午夜精品一区二区三区电影天堂 | 蜜臀av一区二区| 亚洲精品美腿丝袜| 久久久久久久久久久电影| 色哟哟精品一区| 国产一区二区三区在线观看精品 | 日韩视频免费观看高清在线视频| 99久久99久久免费精品蜜臀| 美女www一区二区| 一区二区三区四区在线免费观看 | 亚洲五码中文字幕|