📄 crc1.s43
字号:
#include "msp430x14x.h"
#define TAB_FLASH 0300h
;******************************************************************************
RSEG CSTACK ; System stack
DS 0
;------------------------------------------------------------------------------
RSEG CODE ; Program code
;------------------------------------------------------------------------------
RESET mov.w #SFE(CSTACK),SP ; Initialize stackpointer
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
;将表项添入flash中 ;
CALL #SET_TAB
Mainloop mov #0500h,R15
mov #1,R4
mov.b #49,0(R15)
; mov.b #2,1(R15)
; mov.b #3,2(R15)
; mov.b #6,3(R15)
CALL #TRANSMIT_CRC
NOP
jmp Mainloop
;------------------------------------------------------------------------------
SET_TAB
;------------------------------------------------------------------------------
;首先将表格存入RAM中
mov #0300h,R15
;0--64
mov #00000h,0(R15)
mov #01021h,2(R15)
mov #02042h,4(R15)
mov #03063h,6(R15)
mov #04084h,8(R15)
mov #050A5h,10(R15)
mov #060C6h,12(R15)
mov #070E7h,14(R15)
mov #08108h,16(R15)
mov #09129h,18(R15)
mov #0A14Ah,20(R15)
mov #0B16Bh,22(R15)
mov #0C18Ch,24(R15)
mov #0D1ADh,26(R15)
mov #0E1CEh,28(R15)
mov #0F1EFh,30(R15)
mov #01231h,32(R15)
mov #00210h,34(R15)
mov #03273h,36(R15)
mov #02252h,38(R15)
mov #052B5h,40(R15)
mov #04294h,42(R15)
mov #072F7h,44(R15)
mov #062D6h,46(R15)
mov #09339h,48(R15)
mov #08318h,50(R15)
mov #0B37Bh,52(R15)
mov #0A35Ah,54(R15)
mov #0D3BDh,56(R15)
mov #0C39Ch,58(R15)
mov #0F3FFh,60(R15)
mov #0E3DEh,62(R15)
add #64,R15
;65--128
mov #02462h,0(R15)
mov #03443h,2(R15)
mov #00420h,4(R15)
mov #01401h,6(R15)
mov #064E6h,8(R15)
mov #074C7h,10(R15)
mov #044A4h,12(R15)
mov #05485h,14(R15)
mov #0A56Ah,16(R15)
mov #0B54Bh,18(R15)
mov #08528h,20(R15)
mov #09509h,22(R15)
mov #0E5EEh,24(R15)
mov #0F5CFh,26(R15)
mov #0C5ACh,28(R15)
mov #0D58Dh,30(R15)
mov #03653h,32(R15)
mov #02672h,34(R15)
mov #01611h,36(R15)
mov #00630h,38(R15)
mov #076D7h,40(R15)
mov #066F6h,42(R15)
mov #05695h,44(R15)
mov #046B4h,46(R15)
mov #0B75Bh,48(R15)
mov #0A77Ah,50(R15)
mov #09719h,52(R15)
mov #08738h,54(R15)
mov #0F7DFh,56(R15)
mov #0E7FEh,58(R15)
mov #0D79Dh,60(R15)
mov #0C7BCh,62(R15)
add #64,R15
;129--192
mov #048C4h,0(R15)
mov #058E5h,2(R15)
mov #06886h,4(R15)
mov #078A7h,6(R15)
mov #00840h,8(R15)
mov #01861h,10(R15)
mov #02802h,12(R15)
mov #03823h,14(R15)
mov #0C9CCh,16(R15)
mov #0D9EDh,18(R15)
mov #0E98Eh,20(R15)
mov #0F9AFh,22(R15)
mov #08948h,24(R15)
mov #09969h,26(R15)
mov #0A90Ah,28(R15)
mov #0B92Bh,30(R15)
mov #05AF5h,32(R15)
mov #04AD4h,34(R15)
mov #07AB7h,36(R15)
mov #06A96h,38(R15)
mov #01A71h,40(R15)
mov #00A50h,42(R15)
mov #03A33h,44(R15)
mov #02A12h,46(R15)
mov #0DBFDh,48(R15)
mov #0CBDCh,50(R15)
mov #0FBBFh,52(R15)
mov #0EB9Eh,54(R15)
mov #09B79h,56(R15)
mov #08B58h,58(R15)
mov #0BB3Bh,60(R15)
mov #0AB1Ah,62(R15)
add #64,R15
;193--256
mov #06CA6h,0(R15)
mov #07C87h,2(R15)
mov #04CE4h,4(R15)
mov #05CC5h,6(R15)
mov #02C22h,8(R15)
mov #03C03h,10(R15)
mov #00C60h,12(R15)
mov #01C41h,14(R15)
mov #0EDAEh,16(R15)
mov #0FD8Fh,18(R15)
mov #0CDECh,20(R15)
mov #0DDCDh,22(R15)
mov #0AD2Ah,24(R15)
mov #0BD0Bh,26(R15)
mov #08D68h,28(R15)
mov #09D49h,30(R15)
mov #07E97h,32(R15)
mov #06EB6h,34(R15)
mov #05ED5h,36(R15)
mov #04EF4h,38(R15)
mov #03E13h,40(R15)
mov #02E32h,42(R15)
mov #01E51h,44(R15)
mov #00E70h,46(R15)
mov #0FF9Fh,48(R15)
mov #0EFBEh,50(R15)
mov #0DFDDh,52(R15)
mov #0CFFCh,54(R15)
mov #0BF1Bh,56(R15)
mov #0AF3Ah,58(R15)
mov #09F59h,60(R15)
mov #08F78h,62(R15)
add #64,R15
;257--320
mov #09188h,0(R15)
mov #081A9h,2(R15)
mov #0B1CAh,4(R15)
mov #0A1EBh,6(R15)
mov #0D10Ch,8(R15)
mov #0C12Dh,10(R15)
mov #0F14Eh,12(R15)
mov #0E16Fh,14(R15)
mov #01080h,16(R15)
mov #000A1h,18(R15)
mov #030C2h,20(R15)
mov #020E3h,22(R15)
mov #05004h,24(R15)
mov #04025h,26(R15)
mov #07046h,28(R15)
mov #06067h,30(R15)
mov #083B9h,32(R15)
mov #09398h,34(R15)
mov #0A3FBh,36(R15)
mov #0B3DAh,38(R15)
mov #0C33Dh,40(R15)
mov #0D31Ch,42(R15)
mov #0E37Fh,44(R15)
mov #0F35Eh,46(R15)
mov #002B1h,48(R15)
mov #01290h,50(R15)
mov #022F3h,52(R15)
mov #032D2h,54(R15)
mov #04235h,56(R15)
mov #05214h,58(R15)
mov #06277h,60(R15)
mov #07256h,62(R15)
add #64,R15
;321--384
mov #0B5EAh,0(R15)
mov #0A5CBh,2(R15)
mov #095A8h,4(R15)
mov #08589h,6(R15)
mov #0F56Eh,8(R15)
mov #0E54Fh,10(R15)
mov #0D52Ch,12(R15)
mov #0C50Dh,14(R15)
mov #034E2h,16(R15)
mov #024C3h,18(R15)
mov #014A0h,20(R15)
mov #00481h,22(R15)
mov #07466h,24(R15)
mov #06447h,26(R15)
mov #05424h,28(R15)
mov #04405h,30(R15)
mov #0A7DBh,32(R15)
mov #0B7FAh,34(R15)
mov #08799h,36(R15)
mov #097B8h,38(R15)
mov #0E75Fh,40(R15)
mov #0F77Eh,42(R15)
mov #0C71Dh,44(R15)
mov #0D73Ch,46(R15)
mov #026D3h,48(R15)
mov #036F2h,50(R15)
mov #00691h,52(R15)
mov #016B0h,54(R15)
mov #06657h,56(R15)
mov #07676h,58(R15)
mov #04615h,60(R15)
mov #05634h,62(R15)
add #64,R15
;385--448
mov #0D94Ch,0(R15)
mov #0C96Dh,2(R15)
mov #0F90Eh,4(R15)
mov #0E92Fh,6(R15)
mov #099C8h,8(R15)
mov #089E9h,10(R15)
mov #0B98Ah,12(R15)
mov #0A9ABh,14(R15)
mov #05844h,16(R15)
mov #04865h,18(R15)
mov #07806h,20(R15)
mov #06827h,22(R15)
mov #018C0h,24(R15)
mov #008E1h,26(R15)
mov #03882h,28(R15)
mov #028A3h,30(R15)
mov #0CB7Dh,32(R15)
mov #0DB5Ch,34(R15)
mov #0EB3Fh,36(R15)
mov #0FB1Eh,38(R15)
mov #08BF9h,40(R15)
mov #09BD8h,42(R15)
mov #0ABBBh,44(R15)
mov #0BB9Ah,46(R15)
mov #04A75h,48(R15)
mov #05A54h,50(R15)
mov #06A37h,52(R15)
mov #07A16h,54(R15)
mov #00AF1h,56(R15)
mov #01AD0h,58(R15)
mov #02AB3h,60(R15)
mov #03A92h,62(R15)
add #64,R15
;449--512
mov #0FD2Eh,0(R15)
mov #0ED0Fh,2(R15)
mov #0DD6Ch,4(R15)
mov #0CD4Dh,6(R15)
mov #0BDAAh,8(R15)
mov #0AD8Bh,10(R15)
mov #09DE8h,12(R15)
mov #08DC9h,14(R15)
mov #07C26h,16(R15)
mov #06C07h,18(R15)
mov #05C64h,20(R15)
mov #04C45h,22(R15)
mov #03CA2h,24(R15)
mov #02C83h,26(R15)
mov #01CE0h,28(R15)
mov #00CC1h,30(R15)
mov #0EF1Fh,32(R15)
mov #0FF3Eh,34(R15)
mov #0CF5Dh,36(R15)
mov #0DF7Ch,38(R15)
mov #0AF9Bh,40(R15)
mov #0BFBAh,42(R15)
mov #08FD9h,44(R15)
mov #09FF8h,46(R15)
mov #06E17h,48(R15)
mov #07E36h,50(R15)
mov #04E55h,52(R15)
mov #05E74h,54(R15)
mov #02E93h,56(R15)
mov #03EB2h,58(R15)
mov #00ED1h,60(R15)
mov #01EF0h,62(R15)
jmp FW_END
;put the segment data into flash
;first:clear flash
DINT
mov #WDTPW+WDTHOLD,&WDTCTL
push R15
push R9
mov #TAB_FLASH,R15 ;segment n-1 start address
mov #0A502h,&FCTL1 ;Erase=1
mov #0A500h,&FCTL3 ;Lock=enable
mov #0,0(R15) ;erase flash segment
wait_bf bit #1,&FCTL3 ;wait for busy flag
JNZ wait_bf
mov #0A510h,&FCTL3 ;Lock=unable
mov #0A500h,&FCTL1 ;Erase=0
;write data
mov #0300h,R9
write_loop mov #0A500h,&FCTL3 ;Lock=enable
mov #0A540h,&FCTL1 ;WRT=1
mov 0(R9),0(R15)
INCD R9
INCD R15
cmp #0500h,R9
JLO write_loop
mov #0A510h,&FCTL3 ;Lock=unable
mov #0A500h,&FCTL1 ;Erase=0,WRT=0
pop R9
pop R15
FW_END RET
;-----------------------------------------------------------------------------
;------------------------------------------------------------------------------
TRANSMIT_CRC ;计算相应数据的CRC码
;------------------------------------------------------------------------------
;假设已知待发射数据的首地址为R15,数据长度为R4
;余式高位字节存于R14的高位字节,低位字节位于R14的低位字节
mov #0200h,R14
mov.b 1(R15),1(R14)
mov.b 2(R15),0(R14)
mov.b 0(R15),R5
mov R15,R6
add R4,R6
clr.b 0(R6)
clr.b 1(R6)
T_CRC_LOOP
bic #0FF00h,R5
RLA R5
add #TAB_FLASH,R5
xor.b 0(R5),0(R14)
xor.b 1(R5),1(R14)
mov.b 1(R14),R5
inc R15
cmp R6,R15
jhs T_CRC_END
mov.b 0(R14),1(R14)
mov.b 2(R15),0(R14)
jmp T_CRC_LOOP
T_CRC_END
mov.b 1(R14),0(R15)
mov.b 0(R14),1(R15)
incd R4
RET
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
COMMON INTVEC ; Interrupt vectors
;------------------------------------------------------------------------------
ORG RESET_VECTOR ;
DW RESET ;
END ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -