📄 cs8900.lst
字号:
197 P3OUT &= ~IOR; // IOR-signal low
\ 00002C F2C040001900 BIC.B #0x40, &0x19
198 ReturnValue |= P5IN; // get low order byte from data bus
\ 000032 5E423000 MOV.B &0x30, R14
\ 000036 3EF0FF00 AND.W #0xff, R14
\ 00003A 0FDE BIS.W R14, R15
199 P3OUT |= IOR;
\ 00003C F2D040001900 BIS.B #0x40, &0x19
200 P5DIR = 0xff; // data port to output
\ 000042 F2433200 MOV.B #0xff, &0x32
201
202 return ReturnValue;
\ 000046 0C4F MOV.W R15, R12
\ 000048 3041 RET
203 }
204 //------------------------------------------------------------------------------
205 // copies bytes from frame port to MCU-memory
206 // NOTES: * MCU-memory MUST start at word-boundary
207 //------------------------------------------------------------------------------
\ In segment CODE, align 2
208 void CopyFromFrame8900(void *Dest, unsigned int Size)
\ CopyFromFrame8900:
209 {
210 unsigned int *pDest = Dest;
211
212 P5DIR = 0x00; // data port to input
\ 000000 C2433200 MOV.B #0x0, &0x32
\ 000004 233C JMP ??CopyFromFrame8900_1
213
214 while (Size > 1)
215 {
216 P3OUT = IOR | IOW | RX_FRAME_PORT; // access to RX_FRAME_PORT
\ ??CopyFromFrame8900_0:
\ 000006 F240C0001900 MOV.B #0xc0, &0x19
217 P3OUT &= ~IOR; // IOR-signal low
\ 00000C F2C040001900 BIC.B #0x40, &0x19
218 *pDest = P5IN; // get 1st byte from data bus (low-byte)
\ 000012 5F423000 MOV.B &0x30, R15
\ 000016 3FF0FF00 AND.W #0xff, R15
\ 00001A 8C4F0000 MOV.W R15, 0(R12)
219 P3OUT = IOR | IOW | (RX_FRAME_PORT + 1); // IOR high and put next address on bus
\ 00001E F240C1001900 MOV.B #0xc1, &0x19
220 P3OUT &= ~IOR; // IOR-signal low
\ 000024 F2C040001900 BIC.B #0x40, &0x19
221 *pDest++ |= P5IN << 8; // get 2nd byte from data bus (high-byte)
\ 00002A 0D4C MOV.W R12, R13
\ 00002C 0C4D MOV.W R13, R12
\ 00002E 2C53 ADD.W #0x2, R12
\ 000030 5F423000 MOV.B &0x30, R15
\ 000034 3FF0FF00 AND.W #0xff, R15
\ 000038 3FF0FF00 AND.W #0xff, R15
\ 00003C 8F10 SWPB R15
\ 00003E 8DDF0000 BIS.W R15, 0(R13)
222 P3OUT |= IOR;
\ 000042 F2D040001900 BIS.B #0x40, &0x19
223 Size -= 2;
\ 000048 3E50FEFF ADD.W #0xfffe, R14
224 }
\ ??CopyFromFrame8900_1:
\ 00004C 2E93 CMP.W #0x2, R14
\ 00004E DB2F JC ??CopyFromFrame8900_0
225
226 if (Size) // check for leftover byte...
\ 000050 0E93 CMP.W #0x0, R14
\ 000052 0C24 JEQ ??CopyFromFrame8900_2
227 {
228 P3OUT = IOR | IOW | RX_FRAME_PORT; // access to RX_FRAME_PORT
\ 000054 F240C0001900 MOV.B #0xc0, &0x19
229 P3OUT &= ~IOR; // IOR-signal low
\ 00005A F2C040001900 BIC.B #0x40, &0x19
230 *(unsigned char *)pDest = P5IN; // get byte from data bus
\ 000060 DC4230000000 MOV.B &0x30, 0(R12)
231 P3OUT |= IOR; // IOR high
\ 000066 F2D040001900 BIS.B #0x40, &0x19
232 }
233
234 P5DIR = 0xff; // data port to output
\ ??CopyFromFrame8900_2:
\ 00006C F2433200 MOV.B #0xff, &0x32
235 }
\ 000070 3041 RET
236 //------------------------------------------------------------------------------
237 // does a dummy read on the CS8900A frame-I/O-port
238 //------------------------------------------------------------------------------
\ In segment CODE, align 2
239 void DummyReadFrame8900(unsigned int Size)
\ DummyReadFrame8900:
240 {
241 P5DIR = 0x00; // data port to input
\ 000000 C2433200 MOV.B #0x0, &0x32
\ 000004 063C JMP ??DummyReadFrame8900_1
242
243 while (Size--)
244 {
245 P3OUT = IOR | IOW | RX_FRAME_PORT; // access to RX_FRAME_PORT
\ ??DummyReadFrame8900_0:
\ 000006 F240C0001900 MOV.B #0xc0, &0x19
246 P3OUT &= ~IOR; // IOR-signal low
\ 00000C F2C040001900 BIC.B #0x40, &0x19
247 }
\ ??DummyReadFrame8900_1:
\ 000012 0F4C MOV.W R12, R15
\ 000014 0C4F MOV.W R15, R12
\ 000016 3C53 ADD.W #0xffff, R12
\ 000018 0F93 CMP.W #0x0, R15
\ 00001A F523 JNE ??DummyReadFrame8900_0
248
249 P3OUT |= IOR; // IOR high
\ 00001C F2D040001900 BIS.B #0x40, &0x19
250 P5DIR = 0xff; // data port to output
\ 000022 F2433200 MOV.B #0xff, &0x32
251 }
\ 000026 3041 RET
252 //------------------------------------------------------------------------------
253 // requests space in CS8900 on-chip memory for
254 // storing an outgoing frame
255 //------------------------------------------------------------------------------
\ In segment CODE, align 2
256 void RequestSend(unsigned int FrameSize)
\ RequestSend:
257 {
\ 000000 0D4C MOV.W R12, R13
258 Write8900(TX_CMD_PORT, TX_START_ALL_BYTES);
\ 000002 3E40C000 MOV.W #0xc0, R14
\ 000006 6C42 MOV.B #0x4, R12
\ 000008 B012.... CALL #Write8900
259 Write8900(TX_LEN_PORT, FrameSize);
\ 00000C 0E4D MOV.W R13, R14
\ 00000E 7C400600 MOV.B #0x6, R12
\ 000012 3040.... BR #Write8900
260 }
261 //------------------------------------------------------------------------------
262 // check if CS8900 is ready to accept the
263 // frame we want to send
264 //------------------------------------------------------------------------------
\ In segment CODE, align 2
265 unsigned int Rdy4Tx(void)
\ Rdy4Tx:
266 {
267 Write8900(ADD_PORT, PP_BusST);
\ 000000 3E403801 MOV.W #0x138, R14
\ 000004 7C400A00 MOV.B #0xa, R12
\ 000008 B012.... CALL #Write8900
268 return Read8900(DATA_PORT) & READY_FOR_TX_NOW;
\ 00000C 7C400C00 MOV.B #0xc, R12
\ 000010 B012.... CALL #Read8900
\ 000014 3CF00001 AND.W #0x100, R12
\ 000018 3041 RET
269 }
Maximum stack usage in bytes:
Function CSTACK
-------- ------
CopyFromFrame8900 2
CopyToFrame8900 2
DummyReadFrame8900 2
Init8900 2
-> DelayCycles 2
-> DelayCycles 2
-> Write8900 2
-> Write8900 2
-> Write8900 2
-> Read8900 2
-> Write8900 2
-> Write8900 2
Rdy4Tx 2
-> Write8900 2
-> Read8900 2
Read8900 2
ReadFrame8900 2
ReadFrameBE8900 2
ReadHB1ST8900 2
RequestSend 2
-> Write8900 2
-> Write8900 2
Write8900 2
WriteFrame8900 2
Segment part sizes:
Function/Label Bytes
-------------- -----
P3OUT 1
P3DIR 1
P5IN 1
P5OUT 1
P5DIR 1
MyMAC 6
InitSeq 20
Init8900 132
Write8900 60
WriteFrame8900 52
CopyToFrame8900 90
Read8900 74
ReadFrame8900 64
ReadFrameBE8900 64
ReadHB1ST8900 74
CopyFromFrame8900 114
DummyReadFrame8900 40
RequestSend 22
Rdy4Tx 26
812 bytes in segment CODE
5 bytes in segment DATA16_AN
26 bytes in segment DATA16_C
812 bytes of CODE memory
26 bytes of CONST memory
0 bytes of DATA memory (+ 5 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -