PLC 80251 Macro Assembler, Version 2.10 10-Oct-96 12:07:26 page: 1 PC Machine Code I Line File: A 1 DEFINE SERVICE_TEXT,space=code,align=01H A 2 SEGMENT SERVICE_TEXT A 3 FILE "C:\USB\930CODE\ALTXFA~1\SERVICE.C" A 4 MODE=BINARY A 5 ; 1 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A 6 ; 2 (C) Copyright Intel Corp., 1996 A 7 ; 3 A 8 ; 4 File: service.c A 9 ; 5 A 10 ; 6 Universal Serial Bus 930 Test firmware A 11 ; 7 A 12 ; 8 Revision History A 13 ; 9 --------------------------------------------- A 14 ; 10 0.1 05-27-96 Abdul Rahman Ismail A 15 ; 11 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ A 16 ; 12 A 17 ; 13 #include <8x930ax.h> A 18 ; 14 #include "defs.h" A 19 ; 15 A 20 ; 16 #include "service.h" A 21 ; 17 A 22 ; 18 #define EPINDEX (*((volatile sfr char *)0xf1)) A 23 ; 19 A 24 ; 20 // external functions. A 25 ; 21 extern void FillEP1Fifo( void ); A 26 ; 22 extern void FillEP2Fifo( void ); A 27 ; 23 A 28 ; 24 // external variables A 29 ; 25 extern BYTE gbEP1Running; A 30 ; 26 extern BYTE gbEP2Running; A 31 ; 27 A 32 ; 28 // function prototypes A 33 ; 29 reentrant void ServiceEndPoints( void ); A 34 ; 30 reentrant void CheckEPRunning( void ); A 35 ; 31 reentrant void CheckEPOverflow( void ); A 36 ; 32 A 37 ; 33 /*------------------------------------------------------------------- A 38 ; 34 Function name : ServiceEndPoints A 39 ; 35 Brief Description : Called whenever a new SOF is recd. Updates the A 40 ; 36 : TX fifos on all endpoints running. A 41 ; 37 -------------------------------------------------------------------*/ A 42 ; 38 A 43 ; 39 reentrant void ServiceEndPoints( void ) A 44 ; 40 { 00000000 A 45 _ServiceEndPoints: A 46 ; 41 if (gbEP1Running == TRUE) 00000000 A57EF3 0000 A 47 MOV R15,00:_gbEP1Running 00000005 A5BEF001 A 48 CMP R15,#01H 00000009 A578 03 A 49 JMPNE L_2 A 50 ; 42 FillEP1Fifo(); 0000000C 12 0000 A 51 LCALL _FillEP1Fifo 0000000F A 52 L_2: PLC 80251 Macro Assembler, Version 2.10 10-Oct-96 12:07:26 page: 2 PC Machine Code I Line File: c:\usb\930code\altxfa~1\service.src A 53 ; 43 A 54 ; 44 if (gbEP2Running == TRUE) 0000000F A57EF3 0000 A 55 MOV R15,00:_gbEP2Running 00000014 A5BEF001 A 56 CMP R15,#01H 00000018 A578 03 A 57 JMPNE L_3 A 58 ; 45 FillEP2Fifo(); 0000001B 12 0000 A 59 LCALL _FillEP2Fifo A 60 ; 46 } 0000001E A 61 L_3: 0000001E 22 A 62 RET A 63 ; A 64 A 65 ;**************************** _ServiceEndPoints *************************** A 66 A 67 ;Name Addr/Register Size Type A 68 A 69 ;_FillEP2Fifo IMPORT ----- function A 70 ;_gbEP2Running IMPORT 1 variable A 71 ;_FillEP1Fifo IMPORT ----- function A 72 ;_gbEP1Running IMPORT 1 variable A 73 ; A 74 A 75 ;Local Frame Size: 4 (bytes) A 76 ; A 77 A 78 .FRAME ServiceEndPoints,_$_ServiceEndPoints,pdata A 79 .FCALL FillEP1Fifo A 80 .FCALL FillEP2Fifo A 81 SEGMENT SERVICE_TEXT A 82 ; 47 A 83 ; 48 /*------------------------------------------------------------------- A 84 ; 49 Function name : CheckEPRunning A 85 ; 50 Brief Description : Checks whether an endpoint has started sending data A 86 ; 51 to the host. If so then sets the gbEP1Running to A 87 ; 52 true. A 88 ; 53 --------------------------------------------------------------------*/ A 89 ; 54 A 90 ; 55 reentrant void CheckEPRunning( void ) A 91 ; 56 { 0000001F A 92 _CheckEPRunning: A 93 ; 57 if (gbEP1Running == FALSE) 0000001F A57EF3 0000 A 94 MOV R15,00:_gbEP1Running 00000024 A5BEF000 A 95 CMP R15,#00H 00000028 A578 25 A 96 JMPNE L_8 A 97 ; 58 { A 98 ; 59 EPINDEX = 1; 0000002B A57EF001 A 99 MOV R15,#01H 0000002F A57AF1F1 A 100 MOV 0f1H,R15 A 101 ; 60 if ((TXFLG & GET_FIFO_BITS) != FIFO_FULL) 00000033 A57EF1F5 A 102 MOV R15,0f5H 00000037 A51A7F A 103 MOVS WR14,R15 0000003A A55E74 00C0 A 104 ANL WR14,#0c0H PLC 80251 Macro Assembler, Version 2.10 10-Oct-96 12:07:26 page: 3 PC Machine Code I Line File: c:\usb\930code\altxfa~1\service.src 0000003F A5BE74 00C0 A 105 CMP WR14,#0c0H 00000044 A568 09 A 106 JMPE L_8 A 107 ; 61 gbEP1Running = TRUE; 00000047 A57EF001 A 108 MOV R15,#01H 0000004B A57AF3 0000 A 109 MOV 00:_gbEP1Running,R15 A 110 ; 62 } 00000050 A 111 L_8: A 112 ; 63 A 113 ; 64 if (gbEP2Running == FALSE) 00000050 A57EF3 0000 A 114 MOV R15,00:_gbEP2Running 00000055 A5BEF000 A 115 CMP R15,#00H 00000059 A578 25 A 116 JMPNE L_9 A 117 ; 65 { A 118 ; 66 EPINDEX = 2; 0000005C A57EF002 A 119 MOV R15,#02H 00000060 A57AF1F1 A 120 MOV 0f1H,R15 A 121 ; 67 if ((TXFLG & GET_FIFO_BITS) != FIFO_FULL) 00000064 A57EF1F5 A 122 MOV R15,0f5H 00000068 A51A7F A 123 MOVS WR14,R15 0000006B A55E74 00C0 A 124 ANL WR14,#0c0H 00000070 A5BE74 00C0 A 125 CMP WR14,#0c0H 00000075 A568 09 A 126 JMPE L_9 A 127 ; 68 gbEP2Running = TRUE; 00000078 A57EF001 A 128 MOV R15,#01H 0000007C A57AF3 0000 A 129 MOV 00:_gbEP2Running,R15 A 130 ; 69 } A 131 ; 70 } 00000081 A 132 L_9: 00000081 22 A 133 RET A 134 ; A 135 A 136 ;**************************** _CheckEPRunning *************************** A 137 A 138 ;Name Addr/Register Size Type A 139 A 140 ;_gbEP2Running IMPORT 1 variable A 141 ;_gbEP1Running IMPORT 1 variable A 142 ; A 143 A 144 ;Local Frame Size: 4 (bytes) A 145 ; A 146 A 147 .FRAME CheckEPRunning,_$_CheckEPRunning,pdata A 148 SEGMENT SERVICE_TEXT A 149 ; 71 A 150 ; 72 /*------------------------------------------------------------------- A 151 ; 73 Function name : CheckEPOverflow A 152 ; 74 Brief Description : Continuously called to check whether an overflow A 153 ; 75 has occured on any endpoint. If it has the A 154 ; 76 endpoint is reset, and new data primed into the A 155 ; 77 fifos. A 156 ; 78 --------------------------------------------------------------------*/ PLC 80251 Macro Assembler, Version 2.10 10-Oct-96 12:07:26 page: 4 PC Machine Code I Line File: c:\usb\930code\altxfa~1\service.src A 157 ; 79 A 158 ; 80 reentrant void CheckEPOverflow( void ) A 159 ; 81 { 00000082 A 160 _CheckEPOverflow: A 161 ; 82 EPINDEX = 1; 00000082 A57EF001 A 162 MOV R15,#01H 00000086 A57AF1F1 A 163 MOV 0f1H,R15 A 164 ; 83 if (TXOVF == TRUE) 0000008A A5A9 30 F5 1B A 165 JMPNB S:0f5H.0,L_11 A 166 ; 84 { A 167 ; 85 gbEP1Running = FALSE; // Assume that the ep has stopped 0000008F A57EF000 A 168 MOV R15,#00H 00000093 A57AF3 0000 A 169 MOV 00:_gbEP1Running,R15 A 170 ; 86 A 171 ; 87 TXCLR = TRUE; // Clear the fifo. 00000098 A5A9D7F4 A 172 SETB S:0f4H.7 A 173 ; 88 A 174 ; 89 /* Fill the fifo with a known pattern */ A 175 ; 90 asm( "mov R8, #00h" ); 0000009C A57E8000 A 176 mov R8, #00h A 177 ; 91 FillEP1Fifo(); 000000A0 12 0000 A 178 LCALL _FillEP1Fifo A 179 ; 92 asm( "mov R8, #01h" ); 000000A3 A57E8001 A 180 mov R8, #01h A 181 ; 93 FillEP1Fifo(); 000000A7 12 0000 A 182 LCALL _FillEP1Fifo A 183 ; 94 } 000000AA A 184 L_11: A 185 ; 95 A 186 ; 96 EPINDEX = 2; 000000AA A57EF002 A 187 MOV R15,#02H 000000AE A57AF1F1 A 188 MOV 0f1H,R15 A 189 ; 97 if (TXOVF == TRUE ) 000000B2 A5A9 30 F5 1B A 190 JMPNB S:0f5H.0,L_13 A 191 ; 98 { A 192 ; 99 gbEP2Running = FALSE; 000000B7 A57EF000 A 193 MOV R15,#00H 000000BB A57AF3 0000 A 194 MOV 00:_gbEP2Running,R15 A 195 ; 100 A 196 ; 101 TXCLR = TRUE; 000000C0 A5A9D7F4 A 197 SETB S:0f4H.7 A 198 ; 102 asm( "mov R8, #00h" ); 000000C4 A57E8000 A 199 mov R8, #00h A 200 ; 103 FillEP2Fifo(); 000000C8 12 0000 A 201 LCALL _FillEP2Fifo A 202 ; 104 A 203 ; 105 asm( "mov R8, #01h" ); 000000CB A57E8001 A 204 mov R8, #01h A 205 ; 106 FillEP2Fifo(); 000000CF 12 0000 A 206 LCALL _FillEP2Fifo A 207 ; 107 } A 208 ; 108 } PLC 80251 Macro Assembler, Version 2.10 10-Oct-96 12:07:26 page: 5 PC Machine Code I Line File: c:\usb\930code\altxfa~1\service.src 000000D2 A 209 L_13: 000000D2 22 A 210 RET A 211 ; A 212 A 213 ;**************************** _CheckEPOverflow *************************** A 214 A 215 ;Name Addr/Register Size Type A 216 A 217 ;_FillEP2Fifo IMPORT ----- function A 218 ;_gbEP2Running IMPORT 1 variable A 219 ;_FillEP1Fifo IMPORT ----- function A 220 ;_gbEP1Running IMPORT 1 variable A 221 ; A 222 A 223 ;Local Frame Size: 4 (bytes) A 224 ; A 225 A 226 .FRAME CheckEPOverflow,_$_CheckEPOverflow,pdata A 227 .FCALL FillEP1Fifo A 228 .FCALL FillEP2Fifo A 229 XREF _gbEP2Running:pdata A 230 XREF _gbEP1Running:pdata A 231 XREF _FillEP2Fifo:code A 232 XREF _FillEP1Fifo:code A 233 XDEF _CheckEPOverflow A 234 XDEF _CheckEPRunning A 235 XDEF _ServiceEndPoints A 236 END Errors: 0 Warnings: 0 Lines Assembled: 237