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

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

?? bootloader.c

?? 在PSOC上實現bootloader功能
?? C
字號:
#include <m8c.h>        // part specific constants and macros
#include "bootloader.h"    // API definitions for all BootLoader Modules
#include <FlashBlock.h>

#define LAST_BLOCK_TO_CHECK	455		// Minimum = 1; Maximum = 455; if 0 then don't calculate CS
#define ENABLE_CONNECT_BY_PSOC	1	// 0-disable 	1-enable

#pragma text:BootCheckSum
#pragma abs_address:0x7200
const char BootCheckSumBlock[];
#pragma abs_address:0x73FE
const int LastBlock_To_Check = LAST_BLOCK_TO_CHECK;
#pragma end_abs_address

#pragma text:BootLoaderArea

//#define SETBUTTON()	PRT0DR|=0x20	// pull up for button on P0[5] pin
#define GETBUTTON() (0)		// get value on button pin
#define BOOTLOADER_MODE_LED_ON() PRT1DR|=0x80
#define BOOTLOADER_MODE_LED_OFF() PRT1DR&=0x7F

//extern void Boot_LoadConfigInit(void);
extern char FlashCheckSum(int);
extern char Boot_Is_Program_Good(void);

char Boot_ASCIItoBYTE(char Low,char High){
    char byte; 
	if (High>='a') byte=(High-'a'+10)<<4; else byte=(High-'0')<<4;
	if (Low>='a') byte|=(Low-'a'+10); else byte|=(Low-'0');
	return byte;
}

BYTE Boot_UART_cGetChar(void){
	BYTE bRxStatus;
	while (!(bRxStatus=Boot_RxD_bReadRxStatus() & RX8_RX_COMPLETE));
    return Boot_RxD_bReadRxData();
}

void Boot_UART_PutChar(char TxData){
	while (!(Boot_TxD_bReadTxStatus() & TX8_TX_BUFFER_EMPTY));
	Boot_TxD_SendData(TxData);     
}

void Boot_UART_CPutString(char* pstr){
	while (*pstr != 0){
	   Boot_UART_PutChar(*pstr);
	   pstr++;
	}
}

void Boot_PerformWrite(){
	char data[68];
	char i,ch,cl;
	int BlockID,j;
	FLASH_WRITE_STRUCT fwStruct;
	FLASH_READ_STRUCT frStruct;
	char led=0x00;	//LED off

    while(1){
       if (led) BOOTLOADER_MODE_LED_OFF(); else BOOTLOADER_MODE_LED_ON();
       led=~led;
       while ((ch=Boot_UART_cGetChar())!='S'); // waiting for start symbol 'S'
	   if ((ch = Boot_UART_cGetChar())=='S') break; // All blocks are sent ?
	      else {
		    cl=Boot_UART_cGetChar();       
	        data[0]=Boot_ASCIItoBYTE(cl,ch);
	      } 
	   for (i=1; i<68; i++) {
	      ch=Boot_UART_cGetChar();  // Read high nibble
	      cl=Boot_UART_cGetChar();  // Read low nibble 
	      data[i]=Boot_ASCIItoBYTE(cl,ch);  // Write transformed byte in buffer
	   } 
	   
	   // Read Last Block Symbol 'F'
	   if ((ch=Boot_UART_cGetChar())!='F') ; // Error Info!
	   
	   // Write Block to Flash
	   fwStruct.wARG_BlockId = (((int)data[1])<<2) + (data[2]>>6); // Form Block ID form Block Address
	   fwStruct.pARG_FlashBuffer = data+4;	// Data start Address
	   fwStruct.cARG_Temperature = 25;		// Temperature in Celsius
	   bFlashWriteBlock(&fwStruct);			// Write Block

	   // Read back Block
	   frStruct.wARG_BlockId = fwStruct.wARG_BlockId;	// Read back the same block
	   frStruct.pARG_FlashBuffer = data+4;  // Buffer Address
	   frStruct.wARG_ReadCount = 64;		// Read 64 bytes 
	   FlashReadBlock(&frStruct);			// Read Block

	   // Sending Back Written Block for Analyzing
	   Boot_UART_PutChar('S');	   // Start frame Symbol
	   for (i=0;i<68;i++){
	      ch = data[i]>>4;
	      if (ch>=0x0A) ch+=('a'-10); else ch+='0';
	      Boot_UART_PutChar(ch);		// Send High Nibble
	      cl = data[i]&0x0F;
	      if (cl>=0x0A) cl+=('a'-10); else cl+='0';
	      Boot_UART_PutChar(cl);		// Send Low Nibble
	   }
	   Boot_UART_PutChar('F');	   // Last frame Symbol
	}	
	
	if (LastBlock_To_Check==0) return;	// Don't calculate a checksum
	BlockID = 456;	// first block where checksum is saved (blocks of CheckSum Area:456,457,458,459,460,461,462,463)
	// Calculate CheckSum and Write It In Flash	
	for (j=1;j<=LastBlock_To_Check;j++){
		if ((j&0x3F)==0) {
 		  fwStruct.wARG_BlockId = BlockID;       // Block ID 
	      fwStruct.pARG_FlashBuffer = data;  	// Data start Address
	      fwStruct.cARG_Temperature = 25;		// Temperature in Celsius
	      bFlashWriteBlock(&fwStruct);			// Write Block
 		  BlockID++;							// Increment Block ID
		}  
		data[j&0x3F] = FlashCheckSum(j);		// data[i%64] <- CheckSum of i-th block
    }
    
    fwStruct.wARG_BlockId = BlockID;         // Block ID 
    fwStruct.pARG_FlashBuffer = data;  	// Data start Address
    fwStruct.cARG_Temperature = 25;		// Temperature in Celsius

    if (BlockID!=463){
       bFlashWriteBlock(&fwStruct);		// Write Block
       BlockID=463;
    };

    data[62]=(char)(LastBlock_To_Check>>8);	// Save last block to block
    data[63]=(char)LastBlock_To_Check;		

    fwStruct.wARG_BlockId = BlockID;         // Block ID     
    fwStruct.pARG_FlashBuffer = data;  	// Data start Address
    fwStruct.cARG_Temperature = 25;		// Temperature in Celsius
    bFlashWriteBlock(&fwStruct);		// Write Block
}

void BootLoader(){
//    long int x;
//    char z;
	int j;    	
	char buffer[10];
	char Error,i,k;
	char CheckSum;
    char strConnect[8];//={'C','O','N','N','E','C','T','\0'};
    char strAnswer[4];//={'O','K','!','\0'};
	// Initiate communications Strings:
    // strConnect[]="CONNECT", // Initiate string form PC
    // strAnswer[]="OK!";      // Answer to PC
	strConnect[0]='C';strConnect[1]='O';strConnect[2]='N';strConnect[3]='N';strConnect[4]='E';
    strConnect[5]='C';strConnect[6]='T';strConnect[7]=0;
	strAnswer[0]='O';strAnswer[1]='K';strAnswer[2]='!';strAnswer[3]=0;

 	// Initiate UART Module
	Boot_RxD_Start(RX8_PARITY_NONE);
	Boot_TxD_Start(TX8_PARITY_NONE);

#if ENABLE_CONNECT_BY_PSOC
	// Check conditions for remote programming only through UART
	// if was Power On Reset then check this
	//
	if (CPU_SCR0 & CPU_SCR0_PORS_MASK){
      	Boot_UART_CPutString(strConnect);	// Send Connect Message to PC
      	Boot_Counter_DisableInt();	// Disable Counter Interrupts
      	Boot_Counter_WritePeriod(8191);	// a half second timeout (Counter Clock=32kHz)
      	Boot_Counter_WriteCompareValue(4094);// compare value
      	Boot_Counter_Start();		// Start Counter
      	k=0;
      	while (Boot_Counter_wReadCounter()!=0){	// Timeout - a half second
	       if (Boot_RxD_bReadRxStatus() & RX8_RX_COMPLETE){ // if character was got by RxD
	           buffer[k]=Boot_RxD_bReadRxData();		// then read this character
	           if (buffer[k]==strAnswer[k]) k++;	// if match then go on
	             else k=0;							// Start receiving symbol from the beginning
	       }
	       if (k==3) {
	         Boot_UART_CPutString(strAnswer);	// send back strAnswer to establish connection
      	     Boot_PerformWrite();			// reprogram Flash
    	     M8C_Reset;						// Perform Software Reset by Supervisory Call      	   
	       }  
      	};
      	Boot_Counter_Stop();				// Stop Counter
	}
#endif

//z=0x84;
//while(1){
//    PRT1DR=z;
//	for (x=0; x<20000; x++);
//	z=~z;
//}

	// Control if a BoootLoader Program is correct 
	Error=0;
	if (!Boot_Is_Program_Good()) Error=1;
	// Control CheckSum if needed
	if (LastBlock_To_Check!=0) {	// Don't calculate checksum if 0
      for (j=1;j<=LastBlock_To_Check;j++){
         CheckSum=BootCheckSumBlock[j];
         if (CheckSum!=FlashCheckSum(j)) Error=1;	// Set CheckSum Error Flag
      }  
    }  
    // Check button to enter bootloader mode
//    SETBUTTON();		// pull up for Button
    if (!GETBUTTON()) 
      if (!Error) asm("ljmp __Start");	// if button not pressed - Start Firmwire
			
    // Here it communicates with PC and then starts programming
	BOOTLOADER_MODE_LED_ON();		// light on LED when entered BootLoader Mode
		
 	// Connect with PC Terminal Program
	Error=1;
	// Set Communication here
	while (Error){
	 	Error=0;
	 	for (i=0;i<7; i++) {
	 	  buffer[i]=Boot_UART_cGetChar();
	 	  if (buffer[i]!=*(strConnect+i)) { 
	 	       Error=1;
	 	       break;
	 	  }
	 	}
	 	if (Error) continue;
	
	    // Send Back Annswer - "Ok!"
      	Boot_UART_CPutString(strAnswer);
    	// Get Answer back -"Ok!"
    	for (i=0;i<3; i++) {
	 	  buffer[i]=Boot_UART_cGetChar();
	 	  if (buffer[i]!=*(strAnswer+i)) { 
	 	       Error=1;
	 	       break;
	 	  }
	 	}
	}
	
	// Waiting for blocks to be written
	Boot_PerformWrite();
	
	M8C_Reset;		// Perform Software Reset by Supervisory Call
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合狠狠综合久久综合88| 国产激情一区二区三区四区 | 国产日韩精品一区二区三区在线| 欧美日韩一级视频| 亚洲欧美日韩国产成人精品影院| 蜜臀久久99精品久久久久宅男| 一区二区三区久久| 亚洲一区二区三区四区不卡| 亚洲一区二区av在线| 亚洲国产cao| 美国一区二区三区在线播放| 久久精品国产99久久6| 韩国在线一区二区| 成人a免费在线看| 91网页版在线| 欧美一区二区在线不卡| xf在线a精品一区二区视频网站| 国产校园另类小说区| 亚洲精品久久嫩草网站秘色| 欧美精品一区二区蜜臀亚洲| 7777精品伊人久久久大香线蕉| 欧美在线你懂的| 欧美日韩电影一区| 国产亚洲制服色| 亚洲乱码一区二区三区在线观看| 一区二区三区加勒比av| 免费久久精品视频| 91香蕉视频在线| 日韩精品一区二区三区三区免费| 久久久久9999亚洲精品| 一区二区三区国产| 国产在线观看一区二区| 在线视频欧美精品| 久久这里只有精品6| 亚洲伦在线观看| 精品一区二区在线免费观看| 99九九99九九九视频精品| 国产酒店精品激情| 欧洲av在线精品| 亚洲精品一区二区三区福利| 亚洲精品欧美激情| 国产一区二区三区综合| 欧美日韩中字一区| 国产精品无圣光一区二区| 日韩国产一二三区| 91影视在线播放| 久久伊99综合婷婷久久伊| 午夜av一区二区三区| av电影天堂一区二区在线| 精品乱人伦一区二区三区| 一区二区三区四区不卡在线| 国产大陆a不卡| 欧美成人一区二区| 蜜臀av性久久久久av蜜臀妖精| 色综合久久天天| 亚洲三级在线观看| 不卡视频免费播放| 久久精品视频一区| 欧美国产成人在线| 美日韩黄色大片| 99久久精品情趣| 亚洲国产高清aⅴ视频| 精品一区二区三区蜜桃| 精品视频一区 二区 三区| 国产精品成人免费| 成人综合在线视频| 久久免费看少妇高潮| 蜜桃精品视频在线观看| 欧美喷水一区二区| 全国精品久久少妇| 91精品国产色综合久久不卡电影 | 91亚洲精品乱码久久久久久蜜桃 | 午夜精品一区二区三区免费视频 | 午夜精品福利久久久| 欧洲精品一区二区| 亚洲一区中文在线| 欧美日韩黄色影视| 蜜乳av一区二区三区| 在线成人午夜影院| 另类欧美日韩国产在线| 精品少妇一区二区三区| 国产成人综合自拍| 亚洲欧洲国产专区| 欧美中文字幕不卡| 日本午夜一本久久久综合| 欧美va日韩va| 成年人午夜久久久| 免费观看一级欧美片| 日韩欧美一区二区三区在线| 欧洲精品在线观看| 亚洲蜜臀av乱码久久精品| 91偷拍与自偷拍精品| 亚洲永久精品大片| 日韩精品影音先锋| 丰满白嫩尤物一区二区| 亚洲卡通动漫在线| 7777精品伊人久久久大香线蕉的| 极品美女销魂一区二区三区免费| 久久久久久久久久久电影| 色婷婷亚洲综合| 蜜臀精品久久久久久蜜臀| 亚洲国产精品精华液ab| 欧美亚洲一区二区三区四区| 另类人妖一区二区av| 国产精品久久精品日日| 欧美日韩成人一区| 福利一区福利二区| 午夜国产精品一区| 久久精品人人做人人爽人人| 色婷婷一区二区| 国产精品一级二级三级| 一区二区成人在线| 欧美国产日本视频| 日韩欧美一卡二卡| 91国偷自产一区二区开放时间 | 欧美日本国产视频| 国产精品99精品久久免费| 亚洲v中文字幕| 国产精品国产精品国产专区不蜜| 欧美精品久久久久久久多人混战| 一本到不卡免费一区二区| 秋霞午夜av一区二区三区| 亚洲视频一区二区在线| 久久久久久久综合色一本| 在线播放欧美女士性生活| 99久久精品国产导航| 麻豆国产精品一区二区三区 | 免播放器亚洲一区| 欧美一级午夜免费电影| 91黄色在线观看| 91年精品国产| 懂色av一区二区在线播放| 久久99精品久久久| 日韩 欧美一区二区三区| 亚洲综合网站在线观看| 中文字幕中文乱码欧美一区二区| 久久综合狠狠综合久久综合88| 7777精品伊人久久久大香线蕉超级流畅| 97se亚洲国产综合自在线| 国产91精品露脸国语对白| 国产在线不卡一卡二卡三卡四卡| 日本欧美一区二区| 日韩和欧美一区二区| 亚洲第一成人在线| 亚洲成a人片综合在线| 亚洲韩国精品一区| 亚洲线精品一区二区三区 | 精品久久久久香蕉网| 欧美一区午夜精品| 精品国精品自拍自在线| 日韩欧美久久久| 精品对白一区国产伦| 精品国产91久久久久久久妲己| 3d成人动漫网站| 99久久精品免费观看| 99久久久久久99| 色婷婷精品大在线视频| 91福利视频在线| 欧美精品成人一区二区三区四区| 欧美精选一区二区| 欧美精品一区二区精品网| 久久久久久久性| 亚洲欧洲国产专区| 香蕉影视欧美成人| 美女网站色91| 成人深夜视频在线观看| 91影院在线免费观看| 欧美日韩国产一区二区三区地区| 欧美高清性hdvideosex| 日韩精品一区二区三区视频在线观看| 久久色中文字幕| 亚洲欧美综合另类在线卡通| 一区二区三区在线高清| 日韩av在线免费观看不卡| 国产曰批免费观看久久久| 99麻豆久久久国产精品免费| 在线欧美小视频| 精品国产91久久久久久久妲己 | 日本少妇一区二区| 欧美二区在线观看| 久久国产日韩欧美精品| 美日韩一区二区三区| 国产成人在线网站| 在线视频综合导航| 日韩免费观看高清完整版在线观看| 亚洲精品一线二线三线| 亚洲视频1区2区| 久久99最新地址| 91视频www| 精品国产sm最大网站| 综合色天天鬼久久鬼色| 奇米一区二区三区av| 91蝌蚪porny九色| 精品国产一区二区三区四区四| 综合久久一区二区三区| 九九视频精品免费| 欧美视频一区二区三区四区| 国产欧美视频一区二区| 日本中文一区二区三区| 91丝袜高跟美女视频|