⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tinybld_ds6012a_.s

📁 PIC全系列单片机的bootloader程序
💻 S
字号:
;********************************************************************;	Tiny Bootloader		dsPIC series		Size=100words;	claudiu.chiculita@ugal.ro;	http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm;********************************************************************	; Thanks to  Valter Filipe Silva        ;.equ __30F6014, 1        ;.include "p30f6014.inc"        .equ __30F6012A, 1        .include "p30f6012a.inc"config          __FOSC, CSW_FSCM_OFF & XT_PLL8config          __FWDT, WDT_OFFconfig          __FBORPOR, PBOR_OFF & MCLR_ENconfig          __FGS, CODE_PROT_OFF.equ Fcy, 20000000 ; 7372800.equ baud, 19200 ; 115200 ;9600 ;19200 ; 115200.equ IdTypePIC, 0x71.equ max_flash, 0xC000*2	;dsPIC addresses (0x18000)	        .global __reset	.section .nbss, "b"buff:	.space 4buffer:	.space 128+5;REGISTRY:;W0	imediat;W1	Receive;W2	SendL		need?;W3	count rcv;W4	memory buffer pointer;W5	^;W6	for;W7;W8;W9;W10	delay1;W11	delay2;W12	EA Write ;W13	crc;W14	void(black hole);W15	stack.macro SendL car	mov.b \car, W2	mov W2,U1TXREG	.endm.text	.org	max_flash - 0x100 - ((32*3+4)*2)first_address:	clr W0	clr W0	clr W0	;nopr	clr W0	;nopr__reset:BootloaderEntry:        MOV #__SP_init, W15        MOV #__SPLIM_init, W0        MOV W0, SPLIM        NOP_init_uart2:	;Initialize and Enable UART2 for Tx and Rx	mov	#0x8000, W0	;bit15=UARTEN  bit10=ALTIO	mov	W0, U1MODE	mov	#0x0400, W0	;bit10=UTXEN	mov	W0, U1STA        ;mov     #(((Fcy/baud) / 16) - 1), W0  ;?Initialize Baud rate (divide INSTRUCTION Cycle)        ;mov     w0, U1BRG                           ;to 115200 Kbaud #(((7372800/115200) / 16) - 1)	mov #10, W0	mov W0, U1BRG	;2010 [8MHz,FRC=>2e6]/19200 => 6?	;6014 [7.3MHz,x16,/4=>29.49e6]/115200 => 15	;xxxx [20MHz,HS=>5e6]/19200 => 15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;			mov #0xC1,W7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;			;wait for computer	mov #buff, W4	rcall Receive	sub.b #0xC1, W1				;Expect C1h	bra NZ, way_to_exit	SendL #IdTypePIC			;send PIC type;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;			mov #0x00,W7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MainLoop:	SendL #'K'				; "-Everything OK, ready and waiting.";      L  H  U  C  [c  b  a]+mainl:	clr W13					;chksum	mov #buff, W4	mov #4, W6	dorcv4:	rcall Receive	dec W6, W6	bra NZ, dorcv4	mov buff, W12	mov buff+2, W3	mov W3, TBLPAG	;test W3.H to find out what to do	mov #(96+1), W6dorcvB:	rcall Receive	dec W6, W6	bra NZ, dorcvB	cp0 W13					;check crc	bra Z, chksumokziieroare:					;CRC failed	SendL #'N'	bra mainlchksumok:	;-----------------------------------------------------	;ERASE	TBLWTL W0,[W12]				;dummy	MOV #0x4041,W0		clrwdt	rcall Key_Sequence	;Load_Write_Latch:	MOV #buffer,W4	DO #31, edtbl3	TBLWTL.B [W4++],[W12++]	TBLWTL.B [W4++],[W12--]	TBLWTH.B [W4++],[W12]edtbl3:	inc2 W12, W12	MOV #0x4001,W0	rcall Key_Sequence	bra MainLoop	;-----------------------------------------------------	Key_Sequence:		; Expects a NVMCON value in W0	MOV W0,NVMCON				MOV #0x55,W0		; Write the key sequence	MOV W0,NVMKEY	MOV #0xAA,W0	MOV W0,NVMKEY	BSET NVMCON,#WR		; Start the write cycle	NOP	NOP	RETURN;Rcv1:	mov #buff, W4	Receive:	; 1000 * 65536*7/Fcy/62/16	;mov #(1000 * 65536*2/Fcy),W10	; ms to wait;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    mov #0xC1, W9;	sub W7, W9 ,W8 ; W7 is a flag to indicate if C1 is received;	bra NZ , flagtest	;	mov #1,W10;	mov #1,W11;flagtest:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	mov #80,W10 ; timeout 250 ms ?rpt2:	mov #0,W11rpt1:	btss U1STA, #URXDA	bra norcv	mov U1RXREG,W1			;return read data in W	mov.b W1,[W4++]	add.b W1,W13,W13			;compute crc	returnnorcv:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	mov #0xC1, W9	sub W7, W9 ,W8 ; W7 is a flag to indicate if C1 is received	bra NZ , rpt2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	clrwdt	dec W11, W11	bra NZ, rpt1	dec W10, W10	bra NZ, rpt2timeout:way_to_exit:	clr U1MODE			; deactivate UART	bra first_address.ascii "Mesaj!".end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -