📄 linsci.ls
字号:
1 ; C Compiler for ST7 (COSMIC Software)
2 ; Generator V4.4a - 17 Dec 2001
3 ; Optimizer V4.2g - 21 Dec 2001
5 switch .data
6 0000 _MotorStatus_Backup:
7 0000 00 dc.b 0
48 ; 47 void SCI_Config(void)
48 ; 48 {
49 .text: section .text,new
50 0000 _SCI_Config:
53 ; 49 Resert_SCIRX_Watchdog(); // 6 second RX watchdog Refresh
55 0000 cd0000 call _Resert_SCIRX_Watchdog
57 ; 51 SCIBRR = TX_RX_SCIBRR_2400_Bauds; // 2.4K bauds TX RX
59 0003 a6e4 ld a,#228
60 0005 b700 ld _SCIBRR,a
61 ; 53 SCISR; // Clear all the flags in Status register
63 0007 b600 ld a,_SCISR
64 ; 54 SCIDR;
66 0009 b600 ld a,_SCIDR
67 ; 55 SCIDR = 0xff;
69 000b a6ff ld a,#255
70 000d b700 ld _SCIDR,a
71 ; 57 SCICR1 = 0x00; // SCI on,8 bit length,disable parity
73 000f 3f00 clr _SCICR1
74 ; 58 SCICR2 = SCI_RIE + SCI_RE + SCI_TE; // Receive/transmit enable,Receive interrupt enable
76 0011 a62c ld a,#44
77 0013 b700 ld _SCICR2,a
78 ; 60 Rx_Index = 0; // Initializes variables
80 0015 4f clr a
81 0016 c70005 ld L5_Rx_Index,a
82 ; 61 Tx_Index = 0;
84 0019 c70006 ld L3_Tx_Index,a
85 ; 62 SCI_Status = 0;
87 001c c70004 ld L7_SCI_Status,a
88 ; 63 PtrToSCIBuffRx = Lin_Rx_Buffer;
90 001f ae07 ld x,#high(_Lin_Rx_Buffer)
91 0021 cf0000 ld _PtrToSCIBuffRx,x
92 0024 a607 ld a,#low(_Lin_Rx_Buffer)
93 0026 c70001 ld _PtrToSCIBuffRx+1,a
94 ; 64 }
97 0029 81 ret
139 ; 74 void SCI_Send_Data(void)
139 ; 75 {
140 .text: section .text,new
142 xref.b _SCI_Send_Data$L
143 0000 _SCI_Send_Data:
146 ; 76 if (Timer_IsSCITXDelayElapsed() == TRUE)
148 0000 cd0000 call _Timer_IsSCITXDelayElapsed
150 0003 a101 cp a,#1
151 0005 2703cc008e jrne L54
152 ; 80 Lin_Tx_Buffer[0] = Slave_Addr; // master address
154 000a a601 ld a,#1
155 000c c70010 ld _Lin_Tx_Buffer,a
156 ; 81 Lin_Tx_Buffer[1] = Master_Addr; // slave address
158 000f 4f clr a
159 0010 c70011 ld _Lin_Tx_Buffer+1,a
160 ; 82 Lin_Tx_Buffer[2] = SCI_COM; // command
162 0013 a610 ld a,#16
163 0015 c70012 ld _Lin_Tx_Buffer+2,a
164 ; 83 Lin_Tx_Buffer[3] = Data_Length - 1; // data length - 1
166 0018 a603 ld a,#3
167 001a c70013 ld _Lin_Tx_Buffer+3,a
168 ; 84 Lin_Tx_Buffer[4] = (u8)(Freq_Motor/(10 * Pole_Pair_Num)); // actual frequency
170 001d c60001 ld a,_Freq_Motor+1
171 0020 ce0000 ld x,_Freq_Motor
172 0023 3f00 clr c_y
173 0025 90ae14 ld y,#20
174 0028 cd0000 call c_udiv
176 002b c70014 ld _Lin_Tx_Buffer+4,a
177 ; 85 Lin_Tx_Buffer[6] = (u8)(Freq_Motor/(10 * Pole_Pair_Num));
179 002e c60001 ld a,_Freq_Motor+1
180 0031 ce0000 ld x,_Freq_Motor
181 0034 3f00 clr c_y
182 0036 90ae14 ld y,#20
183 0039 cd0000 call c_udiv
185 003c c70016 ld _Lin_Tx_Buffer+6,a
186 ; 91 Lin_Tx_Buffer[5] = (u8)(MotorStatus_Backup & FAULT_MSK);
188 003f c60000 ld a,_MotorStatus_Backup
189 0042 a4f0 and a,#240
190 0044 c70015 ld _Lin_Tx_Buffer+5,a
191 ; 92 Lin_Tx_Buffer[7] = (u8)(MotorStatus_Backup & FAULT_MSK);
193 0047 c60000 ld a,_MotorStatus_Backup
194 004a a4f0 and a,#240
195 004c c70017 ld _Lin_Tx_Buffer+7,a
196 ; 94 Lin_Tx_Buffer[8] = 0x00; // checksum
198 004f 4f clr a
199 0050 c70018 ld _Lin_Tx_Buffer+8,a
200 ; 95 for (i=0;i<8;i++)
202 0053 3fff clr _SCI_Send_Data$L-1
203 0055 L74:
204 ; 97 Lin_Tx_Buffer[8] += Lin_Tx_Buffer[i];
206 0055 beff ld x,_SCI_Send_Data$L-1
207 0057 c60018 ld a,_Lin_Tx_Buffer+8
208 005a db0010 add a,(_Lin_Tx_Buffer,x)
209 005d c70018 ld _Lin_Tx_Buffer+8,a
210 ; 95 for (i=0;i<8;i++)
212 0060 3cff inc _SCI_Send_Data$L-1
215 0062 b6ff ld a,_SCI_Send_Data$L-1
216 0064 a108 cp a,#8
217 0066 25ed jrult L74
218 ; 99 Lin_Tx_Buffer[8] = (u8)(0 - Lin_Tx_Buffer[8]);
220 0068 c60018 ld a,_Lin_Tx_Buffer+8
221 006b 40 neg a
222 006c c70018 ld _Lin_Tx_Buffer+8,a
223 ; 101 PtrToSCIBuffTx = Lin_Tx_Buffer; // copies the user data to global variables
225 006f ae10 ld x,#high(_Lin_Tx_Buffer)
226 0071 cf0002 ld _PtrToSCIBuffTx,x
227 0074 a610 ld a,#low(_Lin_Tx_Buffer)
228 0076 c70003 ld _PtrToSCIBuffTx+1,a
229 ; 105 Tx_Index = LIN_TX_BUFFER_SIZE;
231 0079 a609 ld a,#9
232 007b c70006 ld L3_Tx_Index,a
233 ; 107 SCISR; // clear TDRE & TC bit
235 007e b600 ld a,_SCISR
236 ; 108 SCIDR = *PtrToSCIBuffTx; /* First byte is transmitted to generate the
238 0080 bf00 ld c_x,x
239 0082 c60003 ld a,_PtrToSCIBuffTx+1
240 0085 b701 ld c_x+1,a
241 0087 92c600 ld a,[c_x.w]
242 008a b700 ld _SCIDR,a
243 ; 110 SCICR2 |= SCI_TIE; //Enable TDRE Interrupt
245 008c 1e00 bset _SCICR2,#7
246 008e L54:
247 ; 112 }
250 008e 81 ret
275 ; 121 BOOL SCI_IsTransmitCompleted(void)
275 ; 122 {
276 .text: section .text,new
277 0000 _SCI_IsTransmitCompleted:
280 ; 123 if ((Tx_Index == 0) && (SCISR & SCI_TC)) return (TRUE);
282 0000 c60006 ld a,L3_Tx_Index
283 0003 2606 jrne L56
285 0005 0d0003 btjf _SCISR,#6,L56
288 0008 a601 ld a,#1
291 000a 81 ret
292 000b L56:
293 ; 124 else return (FALSE);
295 000b 4f clr a
298 000c 81 ret
346 ; 134 BOOL SCI_IsReceptionCompleted(void)
346 ; 135 {
347 .text: section .text,new
349 xref.b _SCI_IsReceptionCompleted$L
350 0000 _SCI_IsReceptionCompleted:
353 ; 136 if (SCI_Status & RX_Complete)
355 0000 c60004 ld a,L7_SCI_Status
356 0003 a580 bcp a,#128
357 0005 274c jreq L311
358 ; 140 SCI_Status &= (u8)(~RX_Complete);
360 0007 c60004 ld a,L7_SCI_Status
361 000a a47f and a,#127
362 000c c70004 ld L7_SCI_Status,a
363 ; 142 temp = Lin_Rx_Buffer[0];
365 000f c60007 ld a,_Lin_Rx_Buffer
366 0012 b7fe ld _SCI_IsReceptionCompleted$L-2,a
367 ; 143 for (i=1;i<9;i++)
369 0014 a601 ld a,#1
370 0016 b7ff ld _SCI_IsReceptionCompleted$L-1,a
371 0018 L511:
372 ; 145 temp += Lin_Rx_Buffer[i];
374 0018 beff ld x,_SCI_IsReceptionCompleted$L-1
375 001a b6fe ld a,_SCI_IsReceptionCompleted$L-2
376 001c db0007 add a,(_Lin_Rx_Buffer,x)
377 001f b7fe ld _SCI_IsReceptionCompleted$L-2,a
378 ; 143 for (i=1;i<9;i++)
380 0021 3cff inc _SCI_IsReceptionCompleted$L-1
383 0023 b6ff ld a,_SCI_IsReceptionCompleted$L-1
384 0025 a109 cp a,#9
385 0027 25ef jrult L511
386 ; 147 if ((temp == 0x00) && (Lin_Rx_Buffer[4] == Lin_Rx_Buffer[6])
386 ; 148 && (Lin_Rx_Buffer[5] == Lin_Rx_Buffer[7]))
388 0029 3dfe tnz _SCI_IsReceptionCompleted$L-2
389 002b 2624 jrne L321
391 002d c6000b ld a,_Lin_Rx_Buffer+4
392 0030 c1000d cp a,_Lin_Rx_Buffer+6
393 0033 261c jrne L321
395 0035 c6000c ld a,_Lin_Rx_Buffer+5
396 0038 c1000e cp a,_Lin_Rx_Buffer+7
397 003b 2614 jrne L321
398 ; 150 Timer_SetSCITXDelayPeriod(10); // 100ms delay before transmission begin
400 003d a60a ld a,#10
401 003f cd0000 call _Timer_SetSCITXDelayPeriod
403 ; 151 Set_TargetSpeed(Lin_Rx_Buffer[4]);
405 0042 c6000b ld a,_Lin_Rx_Buffer+4
406 0045 cd0000 call _Set_TargetSpeed
408 ; 152 Set_SpdVarPeriod(Lin_Rx_Buffer[5]);
410 0048 c6000c ld a,_Lin_Rx_Buffer+5
411 004b cd0000 call _Set_SpdVarPeriod
413 ; 153 return(TRUE);
415 004e a601 ld a,#1
418 0050 81 ret
419 0051 L321:
420 ; 155 else return(FALSE);
422 0051 4f clr a
425 0052 81 ret
426 0053 L311:
427 ; 157 else return(FALSE);
429 0053 4f clr a
432 0054 81 ret
465 ; 175 void SCI_IT_Routine (void)
465 ; 176 {
466 .text: section .text,new
468 xref.b _SCI_IT_Routine$L
469 0000 _SCI_IT_Routine:
471 0000 b600 ld a,c_x
472 0002 b700 ld _SCI_IT_Routine$L+0,a
473 0004 b601 ld a,c_x+1
474 0006 b701 ld _SCI_IT_Routine$L+1,a
476 ; 178 if (SCISR & SCI_RDRF)
478 0008 0a0003cc00e2 btjf _SCISR,#5,L751
479 ; 180 if (SCISR & SCI_ErrValue) // Error(OR/NF/FE) happened
481 000e b600 ld a,_SCISR
482 0010 a50e bcp a,#14
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -