serial.asm
来自「dsp tmslf2407a 汇编,c的原代码,包括i2c,scitimer,f」· 汇编 代码 · 共 1,590 行 · 第 1/2 页
ASM
1,590 行
LDPK _status_rx
LAC _status_rx
BNZ L20
.line 15
;>>>> len_rx = SCIRXBUF;
LDPK _SCIRXBUF
BLDD _SCIRXBUF,#_len_rx
.line 16
;>>>> if((len_rx > 4)&&(len_rx <188)) //接收数至少要有5个字节
LDPK _len_rx
ZALS _len_rx
SUBK 4
BLEZ L22
ZALS _len_rx
SUBK 188
BGEZ L22
.line 18
;>>>> p_rx = 0;
LACK 0
LDPK _p_rx
SACL _p_rx
.line 19
;>>>> pcdata[0] = len_rx;
LDPK _len_rx
BLDD _len_rx,#_pcdata
.line 20
;>>>> status_rx = 1;
LACK 1
LDPK _status_rx
SACL _status_rx
.line 21
;>>>> len_rx --;
LDPK _len_rx
LAC _len_rx
SUBK 1
SACL _len_rx
.line 22
;>>>> p_rx ++;
LDPK _p_rx
LAC _p_rx
ADDK 1
SACL _p_rx
B L22
L20:
.line 25
;>>>> else if(status_rx == 1)
LAC _status_rx
SUBK 1
BNZ L23
.line 27
;>>>> pcdata[p_rx] = SCIRXBUF;
LDPK _p_rx
LAC _p_rx
ADLK _pcdata+0,0
MAR * ,AR0
SACL *
LAR AR3,* ,AR3
BLKD #_SCIRXBUF,*
.line 28
;>>>> p_rx ++;
LAC _p_rx
ADDK 1
SACL _p_rx
.line 29
;>>>> len_rx--;
LDPK _len_rx
LAC _len_rx
SUBK 1
SACL _len_rx
.line 30
;>>>> if(len_rx == 0)
LAC _len_rx
BNZ L22
.line 32
;>>>> status_rx = 2;
LACK 2
LDPK _status_rx
SACL _status_rx
B L22
L23:
.line 35
;>>>> else{rec=SCIRXBUF;} //read to clear RXRDY flag
MAR * ,AR2
LARK AR2,1
MAR *0+
BLKD #_SCIRXBUF,*
L22:
.line 36
;>>>> IFR |= 0x01;
LACK 1
LDPK _IFR
OR _IFR
SACL _IFR
.line 37
;>>>> break;
;>>>> case 0x0001: //高优先级模式的外部引脚1中断
B L25
L26:
.line 41
;>>>> if(simSerial == 0x06)delay52us(); //取电平的中间位置
MAR * ,AR2
LARK AR2,4
MAR *0+
LAC *
SUBK 6
BNZ L27
CALL _delay52us,AR1
B L28
L27:
.line 42
;>>>> else if(simSerial == 0x07)delay26us();
LAC *
SUBK 7
BNZ L29
CALL _delay26us,AR1
B L28
L29:
.line 43
;>>>> else if(simSerial == 0x08)delay17us();
LAC *
SUBK 8
BNZ L30
CALL _delay17us,AR1
B L28
L30:
.line 44
;>>>> else delay26us();
CALL _delay26us,AR1
L28:
.line 46
;>>>> for(i=0;i<8;i++)//读取一个字节
LACK 0
MAR * ,AR2
LARK AR2,3
MAR *0+
SACL *
ZALS *
SUBK 8
BGEZ L32
MAR *+
L31:
.line 48
;>>>> if(simSerial == 0x06)delay104us(); //位与位之间宽度
LAC *
SUBK 6
BNZ L33
CALL _delay104us,AR1
B L37
L33:
.line 49
;>>>> else if(simSerial == 0x07)delay52us();
LAC *
SUBK 7
BNZ L35
CALL _delay52us,AR1
B L37
L35:
.line 50
;>>>> else if(simSerial == 0x08)delay34us();
LAC *
SUBK 8
BNZ L36
CALL _delay34us,AR1
B L37
L36:
.line 51
;>>>> else delay52us();
;>>>> switch(i)
CALL _delay52us,AR1
B L37
L38:
.line 54
;>>>> case 0:{if( (PCDATDIR&0x10) == 0x10 )rec |= 0x01;break;}
LACK 16
LDPK _PCDATDIR
AND _PCDATDIR
MAR * ,AR1
SACL *
SSXM
LAC *
SUBK 16
BNZ L40
LACK 1
MAR * ,AR2
LARK AR2,1
MAR *0+
OR *
SACL *
B L40
L41:
.line 55
;>>>> case 1:{if( (PCDATDIR&0x10) == 0x10 )rec |= 0x02;break;}
LACK 16
LDPK _PCDATDIR
AND _PCDATDIR
MAR * ,AR1
SACL *
SSXM
LAC *
SUBK 16
BNZ L40
LACK 2
MAR * ,AR2
LARK AR2,1
MAR *0+
OR *
SACL *
B L40
L43:
.line 56
;>>>> case 2:{if( (PCDATDIR&0x10) == 0x10 )rec |= 0x04;break;}
LACK 16
LDPK _PCDATDIR
AND _PCDATDIR
MAR * ,AR1
SACL *
SSXM
LAC *
SUBK 16
BNZ L40
LACK 4
MAR * ,AR2
LARK AR2,1
MAR *0+
OR *
SACL *
B L40
L45:
.line 57
;>>>> case 3:{if( (PCDATDIR&0x10) == 0x10 )rec |= 0x08;break;}
LACK 16
LDPK _PCDATDIR
AND _PCDATDIR
MAR * ,AR1
SACL *
SSXM
LAC *
SUBK 16
BNZ L40
LACK 8
MAR * ,AR2
LARK AR2,1
MAR *0+
OR *
SACL *
B L40
L47:
.line 58
;>>>> case 4:{if( (PCDATDIR&0x10) == 0x10 )rec |= 0x10;break;}
LACK 16
LDPK _PCDATDIR
AND _PCDATDIR
MAR * ,AR1
SACL *
SSXM
LAC *
SUBK 16
BNZ L40
LACK 16
MAR * ,AR2
LARK AR2,1
MAR *0+
OR *
SACL *
B L40
L49:
.line 59
;>>>> case 5:{if( (PCDATDIR&0x10) == 0x10 )rec |= 0x20;break;}
LACK 16
LDPK _PCDATDIR
AND _PCDATDIR
MAR * ,AR1
SACL *
SSXM
LAC *
SUBK 16
BNZ L40
LACK 32
MAR * ,AR2
LARK AR2,1
MAR *0+
OR *
SACL *
B L40
L51:
.line 60
;>>>> case 6:{if( (PCDATDIR&0x10) == 0x10 )rec |= 0x40;break;}
LACK 16
LDPK _PCDATDIR
AND _PCDATDIR
MAR * ,AR1
SACL *
SSXM
LAC *
SUBK 16
BNZ L40
LACK 64
MAR * ,AR2
LARK AR2,1
MAR *0+
OR *
SACL *
B L40
L53:
.line 61
;>>>> case 7:{if( (PCDATDIR&0x10) == 0x10 )rec |= 0x80;break;}
LACK 16
LDPK _PCDATDIR
AND _PCDATDIR
MAR * ,AR1
SACL *
SSXM
LAC *
SUBK 16
BNZ L40
LACK 128
MAR * ,AR2
LARK AR2,1
MAR *0+
OR *
SACL *
B L40
L37:
.line 52
MAR * ,AR2
LARK AR2,3
MAR *0+
ZALS * ,AR0
SUBK 7
BGZ L40
ADDK 7
BLZ L40
ADLK LL10
TBLR *
LAC *
BACC
.sect ".switch"
LL10:
.word L38
.word L41
.word L43
.word L45
.word L47
.word L49
.word L51
.word L53
.text
L40:
.line 46
MAR * ,AR2
LARK AR2,3
MAR *0+
LAC *
ADDK 1
SACL *
ZALS *+
SUBK 8
BLZ L31
L32:
.line 64
;>>>> if(rec == frameHeader)//判断帧头
LARK AR2,1
MAR *0+
LAC *
SUBK 126
BNZ L55
.line 66
;>>>> sim_begin = 1;
LACK 1
LDPK _sim_begin
SACL _sim_begin
.line 67
;>>>> sim_end = 0;
LACK 0
LDPK _sim_end
SACL _sim_end
.line 68
;>>>> simConter = 0;
LDPK _simConter
SACL _simConter
.line 69
;>>>> simdata[simConter] = rec;
ADLK _simdata+0,0
MAR * ,AR0
SACL *
LAR AR3,* ,AR2
LAC * ,AR3
SACL *
.line 70
;>>>> simConter ++;
LAC _simConter
ADDK 1
SACL _simConter
B L56
L55:
.line 72
;>>>> else if(rec == frameEnd)//判断帧尾
LAC *
SUBK 13
BNZ L56
.line 74
;>>>> simdata[simConter] = rec;
LDPK _simConter
LAC _simConter
ADLK _simdata+0,0
MAR * ,AR0
SACL *
LAR AR3,* ,AR2
LAC * ,AR3
SACL *
.line 75
;>>>> sim_begin = 0;
LACK 0
LDPK _sim_begin
SACL _sim_begin
.line 76
;>>>> sim_end = 1;
LACK 1
LDPK _sim_end
SACL _sim_end
.line 77
;>>>> simConter = 0;
LACK 0
LDPK _simConter
SACL _simConter
L56:
.line 79
;>>>> if( (sim_begin==1) && (sim_end==0) )
LDPK _sim_begin
LAC _sim_begin
SUBK 1
BNZ L58
LDPK _sim_end
LAC _sim_end
BNZ L58
.line 81
;>>>> simdata[simConter] = rec;
LDPK _simConter
LAC _simConter
ADLK _simdata+0,0
MAR * ,AR0
SACL *
LAR AR3,* ,AR2
LAC * ,AR3
SACL *
.line 82
;>>>> simConter ++;
LAC _simConter
ADDK 1
SACL _simConter
L58:
.line 84
;>>>> XINT1CR |= 0x8000; //清除xint1 flag
LALK 1,15
LDPK _XINT1CR
OR _XINT1CR
SACL _XINT1CR
.line 86
;>>>> default: { break;}
B L25
L18:
.line 8
SSXM
LDPK _PIVR
LAC _PIVR
SUBK 1
BZ L26
SUBK 5
BZ L19
L25:
EPI0_7:
.line 88
MAR * ,AR1
SBRK 5
B I$$REST,AR1 ;and return
.endfunc 207,000000000H,5
.sym _simInit,_simInit,32,2,0
.globl _simInit
.func 208
;>>>> void simInit(void)
******************************************************
* FUNCTION DEF : _simInit
******************************************************
_simInit:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,1
LAR AR0,*0+
.line 3
;>>>> MCRA |= 0x0004; // iopa2 as xint1
LACK 4
LDPK _MCRA
OR _MCRA
SACL _MCRA
.line 4
;>>>> XINT1CR &= 0xfff9; //下降沿产生中断,高优先级
LACK 65529
LDPK _XINT1CR
AND _XINT1CR
SACL _XINT1CR
.line 5
;>>>> XINT1CR |= 0x0001; //使能外部中断
LACK 1
OR _XINT1CR
SACL _XINT1CR
.line 6
;>>>> simRxdIn; // 输入信号
LACK 65519
LDPK _MCRB
AND _MCRB
SACL _MCRB
LACK 61439
LDPK _PCDATDIR
AND _PCDATDIR
SACL _PCDATDIR
LACK 16
OR _PCDATDIR
SACL _PCDATDIR
.line 7
;>>>> sc2_snt_0; //接收使能
LACK 65023
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 512
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
LACK 65533
AND _PFDATDIR
SACL _PFDATDIR
EPI0_8:
.line 8
SBRK 2
LAR AR0,*-
PSHD *
RET
.endfunc 215,000000000H,1
.sym _simOutput1byte,_simOutput1byte,32,2,0
.globl _simOutput1byte
.func 216
;>>>> void simOutput1byte(uchar byte)//模拟串口输出一个字节
******************************************************
* FUNCTION DEF : _simOutput1byte
******************************************************
_simOutput1byte:
LF9 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,4
LAR AR0,*0+,AR2
.sym _byte,-3+LF9,12,9,16
.sym _i,1,12,1,16
.sym _temp,2,12,1,16
.sym _simSerial,3,14,1,16
.line 2
;>>>> uchar i,temp;
;>>>> uint simSerial;
.line 6
;>>>> simSerial = cfgdata[18] >> 8;
RSXM
LDPK _cfgdata+18
LAC _cfgdata+18,7
LARK AR2,3
MAR *0+
SACH * ,1
.line 7
;>>>> sc2_snt_1; //发送时打开发送使能
LACK 65023
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 514
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
.line 8
;>>>> simTxdout1; // txd =1;
LACK 65503
LDPK _MCRB
AND _MCRB
SACL _MCRB
LACK 8224
LDPK _PCDATDIR
OR _PCDATDIR
SACL _PCDATDIR
.line 9
;>>>> simTxdout0;
LACK 65503
LDPK _MCRB
AND _MCRB
SACL _MCRB
LACK 65503
LDPK _PCDATDIR
AND _PCDATDIR
SACL _PCDATDIR
.line 11
;>>>> if(simSerial == 0x06)delay104us(); //开始位
LAC *
SUBK 6
BNZ L60
CALL _delay104us,AR1
B L61
L60:
.line 12
;>>>> else if(simSerial == 0x07)delay52us();
LAC *
SUBK 7
BNZ L62
CALL _delay52us,AR1
B L61
L62:
.line 13
;>>>> else if(simSerial == 0x08)delay34us();
LAC *
SUBK 8
BNZ L63
CALL _delay34us,AR1
B L61
L63:
.line 14
;>>>> else delay52us();
CALL _delay52us,AR1
L61:
.line 16
;>>>> temp = 0x01;
LACK 1
MAR * ,AR2
LARK AR2,2
MAR *0+
SACL *-
.line 17
;>>>> for(i=0;i<8;i++) //8位数据位
LACK 0
SACL *
ZALS *
SUBK 8
BGEZ L65
MAR *+
L64:
.line 19
;>>>> if( byte&temp ){simTxdout1;}
ZALS *
SBRK 5-LF9
AND *
BZ L66
LACK 65503
LDPK _MCRB
AND _MCRB
SACL _MCRB
LACK 8224
LDPK _PCDATDIR
OR _PCDATDIR
SACL _PCDATDIR
B L67
L66:
.line 20
;>>>> else {simTxdout0;}
LACK 65503
LDPK _MCRB
AND _MCRB
SACL _MCRB
LACK 65503
LDPK _PCDATDIR
AND _PCDATDIR
SACL _PCDATDIR
L67:
.line 22
;>>>> if(simSerial == 0x06)delay104us();
ADRK 6-LF9
LAC *
SUBK 6
BNZ L68
CALL _delay104us,AR1
B L69
L68:
.line 23
;>>>> else if(simSerial == 0x07)delay52us();
LAC *
SUBK 7
BNZ L70
CALL _delay52us,AR1
B L69
L70:
.line 24
;>>>> else if(simSerial == 0x08)delay34us();
LAC *
SUBK 8
BNZ L71
CALL _delay34us,AR1
B L69
L71:
.line 25
;>>>> else delay52us();
CALL _delay52us,AR1
L69:
.line 27
;>>>> temp = temp << 1;
MAR * ,AR2
LARK AR2,2
MAR *0+
LAC * ,1
SACL *-
.line 17
LAC *
ADDK 1
SACL *
ZALS *+
SUBK 8
BLZ L64
L65:
.line 29
;>>>> simTxdout1;
LACK 65503
LDPK _MCRB
AND _MCRB
SACL _MCRB
LACK 8224
LDPK _PCDATDIR
OR _PCDATDIR
SACL _PCDATDIR
.line 31
;>>>> if(simSerial == 0x06)delay104us(); //停止位
LARK AR2,3
MAR *0+
LAC *
SUBK 6
BNZ L72
CALL _delay104us,AR1
B L73
L72:
.line 32
;>>>> else if(simSerial == 0x07)delay52us();
LAC *
SUBK 7
BNZ L74
CALL _delay52us,AR1
B L73
L74:
.line 33
;>>>> else if(simSerial == 0x08)delay34us();
LAC *
SUBK 8
BNZ L75
CALL _delay34us,AR1
B L73
L75:
.line 34
;>>>> else delay52us();
CALL _delay52us,AR1
L73:
.line 36
;>>>> delay104us(); //字节与字节之间延时
CALL _delay104us
.line 37
;>>>> sc2_snt_0; //关闭发送使能
LACK 65023
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 512
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
LACK 65533
AND _PFDATDIR
SACL _PFDATDIR
EPI0_9:
.line 38
SBRK 5
LAR AR0,*-
PSHD *
RET
.endfunc 253,000000000H,4
*****************************************************
* UNDEFINED REFERENCES *
*****************************************************
.global _crc16Calculate
.global I$$SAVE
.global I$$REST
.end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?