📄 usblib.txt
字号:
ENDP
WrPktEp1 PROC
;;;129 void WrPktEp1(U8 *buf,int num)
;;;130 {
000208 e3a02000 MOV r2,#0
;;;131 int i;
;;;132
;;;133 for(i=0;i<num;i++)
|L1.524|
00020c e1520001 CMP r2,r1
000210 aa000006 BGE |L1.560|
000214 ea000001 B |L1.544|
|L1.536|
000218 e2822001 ADD r2,r2,#1
00021c eafffffa B |L1.524|
;;;134 {
;;;135 rEP1_FIFO=buf[i];
|L1.544|
000220 e7d03002 LDRB r3,[r0,r2]
000224 e59fc1a0 LDR r12,|L1.972|
000228 e5cc31c4 STRB r3,[r12,#0x1c4]
;;;136 }
00022c eafffff9 B |L1.536|
;;;137 }
|L1.560|
000230 e12fff1e BX lr
ENDP
WrPktEp2 PROC
;;;140 void WrPktEp2(U8 *buf,int num)
;;;141 {
000234 e3a02000 MOV r2,#0
;;;142 int i;
;;;143
;;;144 for(i=0;i<num;i++)
|L1.568|
000238 e1520001 CMP r2,r1
00023c aa000006 BGE |L1.604|
000240 ea000001 B |L1.588|
|L1.580|
000244 e2822001 ADD r2,r2,#1
000248 eafffffa B |L1.568|
;;;145 {
;;;146 rEP2_FIFO=buf[i];
|L1.588|
00024c e7d03002 LDRB r3,[r0,r2]
000250 e59fc174 LDR r12,|L1.972|
000254 e5cc31c8 STRB r3,[r12,#0x1c8]
;;;147 }
000258 eafffff9 B |L1.580|
;;;148 }
|L1.604|
00025c e12fff1e BX lr
ENDP
RdPktEp3 PROC
;;;151 void RdPktEp3(U8 *buf,int num)
;;;152 {
000260 e3a02000 MOV r2,#0
;;;153 int i;
;;;154
;;;155 for(i=0;i<num;i++)
|L1.612|
000264 e1520001 CMP r2,r1
000268 aa000006 BGE |L1.648|
00026c ea000001 B |L1.632|
|L1.624|
000270 e2822001 ADD r2,r2,#1
000274 eafffffa B |L1.612|
;;;156 {
;;;157 buf[i]=(U8)rEP3_FIFO;
|L1.632|
000278 e59f314c LDR r3,|L1.972|
00027c e5d331cc LDRB r3,[r3,#0x1cc]
000280 e7c03002 STRB r3,[r0,r2]
;;;158 }
000284 eafffff9 B |L1.624|
;;;159 }
|L1.648|
000288 e12fff1e BX lr
ENDP
RdPktEp4 PROC
;;;162 void RdPktEp4(U8 *buf,int num)
;;;163 {
00028c e3a02000 MOV r2,#0
;;;164 int i;
;;;165
;;;166 for(i=0;i<num;i++)
|L1.656|
000290 e1520001 CMP r2,r1
000294 aa000006 BGE |L1.692|
000298 ea000001 B |L1.676|
|L1.668|
00029c e2822001 ADD r2,r2,#1
0002a0 eafffffa B |L1.656|
;;;167 {
;;;168 buf[i]=(U8)rEP4_FIFO;
|L1.676|
0002a4 e59f3120 LDR r3,|L1.972|
0002a8 e5d331d0 LDRB r3,[r3,#0x1d0]
0002ac e7c03002 STRB r3,[r0,r2]
;;;169 }
0002b0 eafffff9 B |L1.668|
;;;170 }
|L1.692|
0002b4 e12fff1e BX lr
ENDP
ConfigEp3DmaMode PROC
;;;173 void ConfigEp3DmaMode(U32 bufAddr,U32 count)
;;;174 {
0002b8 e3a03003 MOV r3,#3
;;;175 int i;
;;;176
;;;177 rINDEX_REG=3;
0002bc e59fc108 LDR r12,|L1.972|
0002c0 e5cc3178 STRB r3,[r12,#0x178]
;;;178 count=count&0xfffff; //transfer size should be <1MB
0002c4 e1a01601 MOV r1,r1,LSL #12
0002c8 e1a01621 MOV r1,r1,LSR #12
;;;179
;;;180 rDISRCC2=(1<<1)|(1<<0);
0002cc e3a03003 MOV r3,#3
0002d0 e24cc644 SUB r12,r12,#0x4400000
0002d4 e58c3004 STR r3,[r12,#4]
;;;181 rDISRC2=ADDR_EP3_FIFO; //src=APB,fixed,src=EP3_FIFO
0002d8 e59f30f4 LDR r3,|L1.980|
0002dc e1ccc1c3 BIC r12,r12,r3,ASR #3
0002e0 e58c3000 STR r3,[r12,#0]
;;;182 rDIDSTC2=(0<<1)|(0<<0);
0002e4 e3a03000 MOV r3,#0
0002e8 e1ccc003 BIC r12,r12,r3
0002ec e58c300c STR r3,[r12,#0xc]
;;;183 rDIDST2=bufAddr; //dst=AHB,increase,dst=bufAddr
0002f0 e1cc3003 BIC r3,r12,r3
0002f4 e5830008 STR r0,[r3,#8]
;;;184 #if USBDMA_DEMAND
;;;185 rDCON2=(count)|(0<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(4<<24)|(1<<23)|(0<<22)|(0<<20);
;;;186 //demand,requestor=APB,CURR_TC int enable,unit transfer,
;;;187 //single service,src=USBD,H/W request,autoreload,byte,CURR_TC
;;;188 #else
;;;189 rDCON2=(count)|(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(4<<24)|(1<<23)|(0<<22)|(0<<20);
0002f8 e3813480 ORR r3,r1,#0x80000000
0002fc e3833592 ORR r3,r3,#0x24800000
000300 e58c3010 STR r3,[r12,#0x10]
;;;190 //handshake,requestor=APB,CURR_TC int enable,unit transfer,
;;;191 //single service,src=USBD,H/W request,autoreload,byte,CURR_TC
;;;192 #endif
;;;193 rDMASKTRIG2= (1<<1);
000304 e3a03002 MOV r3,#2
000308 e1ccc003 BIC r12,r12,r3
00030c e58c3020 STR r3,[r12,#0x20]
;;;194 //DMA 2 on
;;;195
;;;196 //rEP3_DMA_FIFO=0x40; //not needed for OUT operation.
;;;197
;;;198 rEP3_DMA_TTC_L=0xff;
000310 e3a030ff MOV r3,#0xff
000314 e28cc644 ADD r12,r12,#0x4400000
000318 e5cc324c STRB r3,[r12,#0x24c]
;;;199 rEP3_DMA_TTC_M=0xff;
00031c e3a030ff MOV r3,#0xff
000320 e1ccc003 BIC r12,r12,r3
000324 e5cc3250 STRB r3,[r12,#0x250]
;;;200 rEP3_DMA_TTC_H=0x0f;
000328 e3a0300f MOV r3,#0xf
00032c e1ccc003 BIC r12,r12,r3
000330 e5cc3254 STRB r3,[r12,#0x254]
;;;201
;;;202 rOUT_CSR2_REG=rOUT_CSR2_REG|EPO_AUTO_CLR|EPO_OUT_DMA_INT_MASK;
000334 e1cc3003 BIC r3,r12,r3
000338 e5d33194 LDRB r3,[r3,#0x194]
00033c e38330a0 ORR r3,r3,#0xa0
000340 e5cc3194 STRB r3,[r12,#0x194]
;;;203 //AUTO_CLR(OUT_PKT_READY is cleared automatically), interrupt_masking.
;;;204 #if USBDMA_DEMAND
;;;205 rEP3_DMA_UNIT=EP3_PKT_SIZE; //DMA transfer unit=64 bytes
;;;206 rEP3_DMA_CON=UDMA_DEMAND_MODE|UDMA_OUT_DMA_RUN|UDMA_DMA_MODE_EN;
;;;207 // deamnd enable,out_dma_run=run,in_dma_run=stop,DMA mode enable
;;;208 #else
;;;209 rEP3_DMA_UNIT=0x01; //DMA transfer unit=1byte
000344 e3a03001 MOV r3,#1
000348 e1ccc003 BIC r12,r12,r3
00034c e5cc3244 STRB r3,[r12,#0x244]
;;;210 rEP3_DMA_CON=UDMA_OUT_DMA_RUN|UDMA_DMA_MODE_EN;
000350 e3a03005 MOV r3,#5
000354 e1ccc003 BIC r12,r12,r3
000358 e5cc3240 STRB r3,[r12,#0x240]
;;;211 // deamnd disable,out_dma_run=run,in_dma_run=stop,DMA mode enable
;;;212 #endif
;;;213 //wait until DMA_CON is effective.
;;;214 rEP3_DMA_CON;
00035c e1cc3003 BIC r3,r12,r3
000360 e5d33240 LDRB r3,[r3,#0x240]
;;;215 for(i=0;i<10;i++);
000364 e3a02000 MOV r2,#0
|L1.872|
000368 e352000a CMP r2,#0xa
00036c aa000001 BGE |L1.888|
000370 e2822001 ADD r2,r2,#1
000374 eafffffb B |L1.872|
;;;216 }
|L1.888|
000378 e12fff1e BX lr
ENDP
ConfigEp3IntMode PROC
;;;219 void ConfigEp3IntMode(void)
;;;220 {
00037c e3a00003 MOV r0,#3
;;;221 rINDEX_REG=3;
000380 e59f1044 LDR r1,|L1.972|
000384 e5c10178 STRB r0,[r1,#0x178]
;;;222
;;;223 rDMASKTRIG2= (0<<1); // EP3=DMA ch 2
000388 e3a00000 MOV r0,#0
00038c e2411644 SUB r1,r1,#0x4400000
000390 e5810020 STR r0,[r1,#0x20]
;;;224 //DMA channel off
;;;225 rOUT_CSR2_REG=rOUT_CSR2_REG&~(EPO_AUTO_CLR/*|EPO_OUT_DMA_INT_MASK*/);
000394 e2810644 ADD r0,r1,#0x4400000
000398 e5d00194 LDRB r0,[r0,#0x194]
00039c e3c00080 BIC r0,r0,#0x80
0003a0 e2811644 ADD r1,r1,#0x4400000
0003a4 e5c10194 STRB r0,[r1,#0x194]
;;;226 //AUTOCLEAR off,interrupt_enabled (???)
;;;227 rEP3_DMA_UNIT=1;
0003a8 e3a00001 MOV r0,#1
0003ac e1c11000 BIC r1,r1,r0
0003b0 e5c10244 STRB r0,[r1,#0x244]
;;;228 rEP3_DMA_CON=0;
0003b4 e3a00000 MOV r0,#0
0003b8 e1c11000 BIC r1,r1,r0
0003bc e5c10240 STRB r0,[r1,#0x240]
;;;229 // deamnd disable,out_dma_run=stop,in_dma_run=stop,DMA mode disable
;;;230 //wait until DMA_CON is effective.
;;;231 rEP3_DMA_CON;
0003c0 e1c10000 BIC r0,r1,r0
0003c4 e5d00240 LDRB r0,[r0,#0x240]
;;;232
;;;233 }
0003c8 e12fff1e BX lr
|L1.972|
0003cc 44a00000 DCD 0x44a00000
|L1.976|
0003d0 40200000 DCD 0x40200000
|L1.980|
0003d4 44a001cc DCD 0x44a001cc
ENDP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -