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

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

?? bootloader_main.c

?? 基于avr(mage16)的bootload實驗范例
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***********************************************
****      AVR BootLoader應用范例              ***
****  	                                     ***
**** 作者:  HJJourAVR                        ***
**** 編譯器:WINAVR20050214                   ***
****                                         ***
****  	www.OurAVR.com	 2005.10.17          ***
***********************************************/
//程序參考 馬潮老師的M128 Boot_load應用的實例,ICCAVR版本

/*
本程序簡單的示范了AVR ATMEGA16的IAP應用,實現智能升級
		Boot Loader
		XMODEM-CRC傳輸協議
		CRC16校驗
		
出于簡化程序考慮,各種數據沒有對外輸出,學習時建議使用JTAG ICE硬件仿真器。
熔絲位設置
 BOOTSZ1=0
 BOOTSZ0=0  Boot區為1K字(2K字節)大小。
 BOOTRST=0  復位向量位于Boot區。
 
makefile中的程序基地址偏移
 LDFLAGS += -Wl,--section-start=.text=0x3800   //0x3800字節=0x1C00字
 
移植程序時,可根據實際大小設定Boot區,但要注意更改makefile和更改BootAdd常數,以及頁寫的大小分配;

采用115200bps的通訊速率,升級14KB程序需要耗時約5秒[上位機是WINDOWS 2000的超級終端]

疑問:
  1 用HEX文件燒錄工作正常,但elf仿真有問題。
    用AVRstudio仿真elf(熔絲設定BOOTRST=0,程序基地址偏移=0x3800)時,所有SRAM變量丟失初始化,
  	表現為put_s()的都是亂碼或不可見字符。
    但如果改成應用程序(熔絲設定BOOTRST=1,沒有程序基地址偏移),則put_s()可以正常顯示
  
  2 XMODEM的結束應答(EOT/CAN)后需加 delay_ms(500)的延時(程序優化,統一寫在跳轉到用戶程序前),
    否則在下面的情況將會無法正常結束XMODEM的傳輸,但其實程序已經升級成功
    特殊情況:用戶程序里面使用了串口,而且波特率較低(如9600bps)且開機即發送大量數據
 
*/

#include <avr/io.h>
#include <avr/delay.h>
//時鐘定為外部晶體7.3728MHz,F_CPU=7372800 使用USART,115200bps
#include <avr/boot.h>
/*
boot_page_erase ( address )
	擦除FLASH 指定頁,其中address 是以字節為單位的FLASH 地址
boot_page_fill ( address, data )
	填充BootLoader 緩沖頁,address 為以字節為單位的緩沖頁地址(對mega16 :0~128),
	而data 是長度為兩個字節的字數據,因此調用前address 的增量應為2。 
	此時data 的高字節寫入到高地址,低字節寫入到低地址。
boot_page_write ( address )
	boot_page_write 執行一次的SPM 指令,將緩沖頁數據寫入到FLASH 指定頁。
boot_rww_enable ( )
	RWW 區讀使能
	
	根據自編程的同時是否允許讀FLASH 存儲器,FLASH 存儲器可分為兩種類型:
可同時讀寫區( RWW Read-While-Write ) 和 非同時讀寫區( NRWW NotRead-While-Write)。
對于MEGA16 RWW 為前14K 字節 NRWW 為后2K 字節。
引導加載程序對RWW 區編程時MCU 仍可以從NRWW 區讀取指令并執行,而對NRWW 區編程時MCU 處于掛起暫停狀態。
在對RWW 區自編程(頁寫入或頁擦除)時,由硬件鎖定RWW 區 , RWW 區的讀操作被禁止
在對RWW 區的編程結束后應當調用boot_rww_enable() 使RWW 區開放。
*/
#include <avr/crc16.h>
/*
GCCAVR內置函數,可以不用頭痛CRC16了
關于CRC的詳細說明,可以查看一下網站: 
http://www.nongnu.org/avr-libc/user-manual/group__avr__crc.html 
函數原形
static __inline__ uint16_t _crc16_update(uint16_t __crc, uint8_t __data);
	多項式Polynomial: x^16 + x^15 + x^2 + 1 (0xa001)
	crc初始值Initial value: 0xffff
    通常用于磁盤控制器(disk-drive controllers)
static __inline__ uint16_t _crc_xmodem_update(uint16_t __crc, uint8_t __data);
	多項式Polynomial: x^16 + x^12 + x^5 + 1 (0x1021)
	crc初始值Initial value: 0x0
 	專用于XMODEM通訊協議,等效于C寫的
 	uint16_t crc_xmodem_update (uint16_t crc, uint8_t data)
    {
        int i;
        crc = crc ^ ((uint16_t)data << 8);
        for (i=0; i<8; i++)
        {
            if (crc & 0x8000)
                crc = (crc << 1) ^ 0x1021;
            else
                crc <<= 1;
        }
        return crc;
    }
static __inline__ uint16_t _crc_ccitt_update (uint16_t __crc, uint8_t __data)
	多項式Polynomial: x^16 + x^12 + x^5 + 1 (0x8408)
	crc初始值Initial value: 0xffff
    專用于PPP和IrDA通訊協議
*/

//管腳定義
#define PIN_RXD				0	//PD0
#define PIN_TXD				1	//PD1

//常數定義
#define SPM_PAGESIZE 		128				//M16的一個Flash頁為128字節(64字)
#define DATA_BUFFER_SIZE 	SPM_PAGESIZE	//定義接收緩沖區長度
#define BAUDRATE			115200			//波特率采用115200bps
//#define F_CPU				7372800			//系統時鐘7.3728MHz

//定義Xmoden控制字符
#define XMODEM_NUL 			0x00
#define XMODEM_SOH 			0x01
#define XMODEM_STX 			0x02
#define XMODEM_EOT 			0x04
#define XMODEM_ACK 			0x06
#define XMODEM_NAK 			0x15
#define XMODEM_CAN 			0x18
#define XMODEM_EOF 			0x1A
#define XMODEM_WAIT_CHAR 	'C'

//定義全局變量
struct str_XMODEM
{
    unsigned char SOH;						//起始字節
    unsigned char BlockNo;					//數據塊編號
    unsigned char nBlockNo;					//數據塊編號反碼
    unsigned char Xdata[128];				//數據128字節
    unsigned char CRC16hi;					//CRC16校驗數據高位
    unsigned char CRC16lo;					//CRC16校驗數據低位
}
strXMODEM;									//XMODEM的接收數據結構

unsigned long FlashAddress;					//FLASH地址
#define  BootAdd 			0x3800			//Boot區的首地址(應用區的最高地址)
/*	GCC里面地址使用32位長度,適應所有AVR的容量*/

unsigned char BlockCount;					//數據塊累計(僅8位,無須考慮溢出)

unsigned char STATUS;						//運行狀態
#define ST_WAIT_START 		0x00			//等待啟動
#define ST_BLOCK_OK 		0x01			//接收一個數據塊成功
#define ST_BLOCK_FAIL 		0x02			//接收一個數據塊失敗
#define ST_OK 				0x03			//完成


//長延時 max 65536ms
void delay_ms(unsigned int t)
{
    while(t--)
    {
        _delay_ms(1);
    }
}

//更新一個Flash頁的完整處理
void write_one_page(void)
{
    unsigned char i;
    unsigned char *buf;
    unsigned int  w;
    boot_page_erase(FlashAddress);				//擦除一個Flash頁
    boot_spm_busy_wait();						//等待頁擦除完成
    buf=&strXMODEM.Xdata[0];
    for(i=0;i<SPM_PAGESIZE;i+=2)				//將數據填入Flash緩沖頁中
    {
        w =*buf++;
        w+=(*buf++)<<8;
        //boot_page_fill(FlashAddress+i, w);	//原句
        boot_page_fill(i, w);					//只是低7位(128字節/頁)有效
    }
    boot_page_write(FlashAddress);				//將緩沖頁數據寫入一個Flash頁
    boot_spm_busy_wait();						//等待頁編程完成
}

//發送采用查詢方式
void put_c(unsigned char c) //發送采用查詢方式
{
    loop_until_bit_is_set(UCSRA,UDRE);
    UDR=c;
}

//發送字符串
void put_s(unsigned char *ptr)
{
    while (*ptr)
    {
        put_c(*ptr++);
    }
    put_c(0x0D);
    put_c(0x0A);  //結尾發送回車換行
}


//接收指定字節數據(帶超時控制,Timer0的1ms時基)
//	*ptr		數據緩沖區
//	len			數據長度
//	timeout		超時設定,最長65.536S
//  返回值		已接收字節數目
unsigned char get_data(unsigned char *ptr,unsigned char len,unsigned int timeout)
{
    unsigned count=0;
    do
    {
        if (UCSRA & (1<<RXC))
        {
            *ptr++=UDR;				//如果接收到數據,讀出
            count++;
            if (count>=len)
            {
                break;				//夠了?退出
            }
        }
        if(TIFR & (1<<OCF0))		//T0溢出 1ms

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一二三| 97久久超碰精品国产| 在线观看日韩av先锋影音电影院| 粉嫩嫩av羞羞动漫久久久| 日本一区二区三区久久久久久久久不| 久久精品理论片| 26uuu国产在线精品一区二区| 亚洲男人天堂av网| 精品亚洲免费视频| 天天免费综合色| 亚洲一区视频在线观看视频| 日本伊人午夜精品| 日韩视频在线永久播放| 国内成人自拍视频| 亚洲人成7777| 制服丝袜激情欧洲亚洲| 久久99精品国产91久久来源| 国产精品麻豆久久久| 91国产精品成人| 美国av一区二区| 国产精品欧美极品| 欧美日韩国产首页| 国产精品亚洲午夜一区二区三区 | 一区2区3区在线看| 欧美日韩大陆在线| 精品99999| 丁香五精品蜜臀久久久久99网站| 欧美裸体一区二区三区| 亚洲国产毛片aaaaa无费看| 色中色一区二区| 亚洲永久免费av| aaa国产一区| 日本不卡在线视频| 在线影院国内精品| 亚洲bt欧美bt精品777| 国产精品自拍av| 亚洲综合免费观看高清在线观看| 日韩一区二区视频| 91视频一区二区| 久久99日本精品| 一区二区三区在线观看视频| 26uuu亚洲综合色| 欧美视频三区在线播放| 成人av网站免费观看| 欧美aa在线视频| 一区二区高清在线| 久久精品夜色噜噜亚洲a∨ | 国产在线播精品第三| 亚洲国产乱码最新视频| 国产精品你懂的| 日韩女优视频免费观看| 欧美日韩午夜精品| 中文字幕一区二区在线观看| a亚洲天堂av| 视频精品一区二区| 亚洲视频狠狠干| 中文字幕巨乱亚洲| 欧美xxxxxxxxx| 在线综合亚洲欧美在线视频| 在线精品视频一区二区三四| 成人不卡免费av| 老鸭窝一区二区久久精品| 亚洲一二三四区不卡| 久久久久97国产精华液好用吗| 91精品国产一区二区三区香蕉| 色婷婷av一区二区三区大白胸 | 国产+成+人+亚洲欧洲自线| 五月综合激情日本mⅴ| 亚洲人成在线播放网站岛国| 国产精品色眯眯| 精品久久久三级丝袜| 在线亚洲欧美专区二区| 91视频精品在这里| 91色九色蝌蚪| 91视频一区二区| 色偷偷久久一区二区三区| 99久久精品免费观看| 粉嫩高潮美女一区二区三区| 国产成人在线电影| 国产成人鲁色资源国产91色综 | 亚洲一区二区视频| 亚洲精品美国一| 一区二区三区欧美久久| 亚洲精品伦理在线| 亚洲国产aⅴ成人精品无吗| 亚洲第一福利视频在线| 亚洲第一二三四区| 人人精品人人爱| 国产一区欧美一区| 国产成人午夜视频| aaa亚洲精品| 欧美色图第一页| 3d动漫精品啪啪一区二区竹菊| 日韩视频免费观看高清完整版 | 国产精品成人在线观看| 亚洲四区在线观看| 亚洲第一会所有码转帖| 看片的网站亚洲| 粉嫩av一区二区三区| 99精品久久久久久| 91.麻豆视频| 精品国产a毛片| 亚洲欧洲综合另类| 日韩精品一二区| 国产精品一区三区| 色综合色综合色综合| 欧美一区二区三区小说| 日本一区二区成人在线| 亚洲一二三四区不卡| 精品一区二区影视| 99国产精品久久久久久久久久久| 欧美日韩一区二区三区四区| 欧美成人猛片aaaaaaa| 国产精品免费免费| 天天av天天翘天天综合网| 黄一区二区三区| 色狠狠综合天天综合综合| 日韩免费视频一区| 中文字幕在线不卡一区二区三区| 五月天一区二区| 成人一二三区视频| 欧美三级一区二区| 国产清纯白嫩初高生在线观看91| 亚洲码国产岛国毛片在线| 久久精品国产成人一区二区三区| 91在线观看高清| 精品国产电影一区二区| 亚洲国产视频一区| 国产99久久久国产精品| 56国语精品自产拍在线观看| 国产精品妹子av| 久久成人羞羞网站| 欧美日韩久久一区二区| 国产精品久久福利| 久久狠狠亚洲综合| 欧美日本国产视频| 亚洲人精品午夜| 成人久久18免费网站麻豆| 日韩欧美色电影| 亚洲国产sm捆绑调教视频| 成人午夜又粗又硬又大| 欧美一区二区二区| 午夜精品久久久久久| 97久久人人超碰| 国产午夜精品理论片a级大结局| 午夜精品福利在线| 欧美成人bangbros| 久久久久亚洲蜜桃| 大胆欧美人体老妇| 国产91丝袜在线播放| 99精品欧美一区二区三区综合在线| 911精品产国品一二三产区| 国产精品不卡一区二区三区| 韩国精品主播一区二区在线观看 | 亚洲成a人片在线观看中文| 成人av手机在线观看| 久久精品人人做人人爽人人| 国产综合成人久久大片91| 欧美一区二区三区在线电影| 天天影视网天天综合色在线播放 | 日韩一级黄色片| 五月激情综合婷婷| 欧美中文字幕一区| 亚洲日本在线天堂| 97se狠狠狠综合亚洲狠狠| 中文字幕欧美国产| 国模一区二区三区白浆| 欧美一区二区精品在线| 老汉av免费一区二区三区| 777久久久精品| 亚洲一区二区四区蜜桃| 99re热这里只有精品免费视频 | 亚洲精品免费一二三区| 成人黄色a**站在线观看| 精品国产乱码久久久久久久久| 视频一区二区三区在线| 在线精品国精品国产尤物884a | 自拍偷拍亚洲综合| 国产成人h网站| 中文字幕第一区综合| 毛片av一区二区三区| 久久久久久久免费视频了| 激情六月婷婷久久| 精品国产第一区二区三区观看体验| 国产麻豆精品久久一二三| 欧美电视剧免费全集观看| 久久国产三级精品| 精品av综合导航| aaa欧美日韩| 亚洲欧美一区二区三区久本道91| 色欧美乱欧美15图片| 午夜av一区二区| 欧美一区二区高清| 狠狠色丁香九九婷婷综合五月| 欧美日韩三级在线| 九九九精品视频| 日韩欧美国产精品| 国产精品一区专区| 中文字幕一区二区5566日韩| 色综合天天综合网天天狠天天|