?? avr_usb_disk.lst
字號:
04ED C011 RJMP 0x04FF
(0249) {
(0250) k = *(XmtBuff.pp+i);
04EE 90300158 LDS R3,0x158
04F0 90200157 LDS R2,0x157
04F2 2E44 MOV R4,R20
04F3 2455 CLR R5
04F4 0C42 ADD R4,R2
04F5 1C53 ADC R5,R3
04F6 2DE4 MOV R30,R4
04F7 2DF5 MOV R31,R5
04F8 95C8 LPM
04F9 2D20 MOV R18,R0
(0251) D12_DATA = k;//寫數(shù)據(jù)字節(jié)
04FA 93207C00 STS R18,0x7C00
(0252) csram;
04FC 9360FC01 STS R22,0xFC01
(0253) }
04FE 9543 INC R20
04FF 1740 CP R20,R16
0500 F368 BCS 0x04EE
(0254) XmtBuff.pp += j;
0501 90300158 LDS R3,0x158
0503 90200157 LDS R2,0x157
0505 2E40 MOV R4,R16
0506 2455 CLR R5
0507 0C42 ADD R4,R2
0508 1C53 ADC R5,R3
0509 92500158 STS R5,0x158
050B 92400157 STS R4,0x157
(0255) }else
050D C01E RJMP 0x052C
(0256) {
(0257) for(i=0;i<j;i++)
050E 2744 CLR R20
050F C00E RJMP 0x051E
(0258) {
(0259) k = *(XmtBuff.p+i);
0510 9030015A LDS R3,0x15A
0512 90200159 LDS R2,0x159
0514 2FE4 MOV R30,R20
0515 27FF CLR R31
0516 0DE2 ADD R30,R2
0517 1DF3 ADC R31,R3
0518 8120 LDD R18,0+Z
(0260) D12_DATA = k;//寫數(shù)據(jù)字節(jié)
0519 93207C00 STS R18,0x7C00
(0261) csram;
051B 9360FC01 STS R22,0xFC01
(0262) }
051D 9543 INC R20
051E 1740 CP R20,R16
051F F380 BCS 0x0510
(0263) XmtBuff.p += j;
0520 9030015A LDS R3,0x15A
0522 90200159 LDS R2,0x159
0524 2E40 MOV R4,R16
0525 2455 CLR R5
0526 0C42 ADD R4,R2
0527 1C53 ADC R5,R3
0528 9250015A STS R5,0x15A
052A 92400159 STS R4,0x159
(0264) }
(0265) XmtBuff.wrLength -= j;
052C 2E20 MOV R2,R16
052D 2433 CLR R3
052E 90500156 LDS R5,0x156
0530 90400155 LDS R4,0x155
0532 1842 SUB R4,R2
0533 0853 SBC R5,R3
0534 92500156 STS R5,0x156
0536 92400155 STS R4,0x155
(0266) D12_COMMAND = 0xfa;// 設(shè)置 IN 緩沖區(qū)有效(滿標(biāo)志)
0538 EF8A LDI R24,0xFA
0539 93807C01 STS R24,0x7C01
(0267) csram;
053B 9360FC01 STS R22,0xFC01
(0268) }
053D D595 RCALL pop_gset1
053E 9508 RET
_Setup_control:
p --> R10
j --> R20
i --> R22
053F D5AA RCALL push_gset3
FILE: G:\source\D12Setup.c
(0000) /*++
(0001)
(0002) Module Name:
(0003)
(0004) D12Setup.c
(0005)
(0006) Abstract:
(0007)
(0008) Header file related to D12 module
(0009)
(0010) Environment:
(0011)
(0012) ICCAVR 6.29
(0013)
(0014) Revision History:
(0015)
(0016) 04/23/2004 chenchi created
(0017)
(0018) --*/
(0019) /******************************************************************/
(0020) #include "io8515v.h"
(0021) #include "d12.h"
(0022) #include "d12setup.h"
(0023)
(0024) TRANSMIT_STRUCT XmtBuff;//定義傳輸結(jié)構(gòu)體變量
(0025)
(0026) /************************************************************
(0027) **工程名稱:U盤固件程序開發(fā)
(0028) **編譯器類型及版本:ICCAVR 6.26C
(0029) **日期:2004.4.30
(0030) **創(chuàng)建人:陳馳
(0031) **所屬單位:湖南大學(xué)計(jì)算機(jī)與通信學(xué)院
(0032)
(0033) **芯片類型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
(0034) **時(shí)鐘頻率:8MHZ
(0035)
(0036) **函數(shù)功能:完成設(shè)備枚舉
(0037) **函數(shù)輸入?yún)?shù)及說明:無
(0038)
(0039) **函數(shù)返回值:無
(0040) **在本函數(shù)以外定義的變量:D12_COMMAND,D12_DATA
(0041) **調(diào)用的函數(shù)說明:
(0042) (*StandardDeviceRequest[i])();
(0043) 標(biāo)準(zhǔn)設(shè)備請求函數(shù)
(0044)
(0045) **修改人:陳馳
(0046) **修改日期:2004.4.30
(0047) **修改說明:創(chuàng)建
(0048) *************************************************************/
(0049) void Setup_control(void)
(0050) {
(0051) unsigned char i,j,*p;
(0052) D12_COMMAND = 0x00;//選擇端點(diǎn)(指針指向0位置)
0540 2422 CLR R2
0541 92207C01 STS R2,0x7C01
(0053) cwait;
0543 0000 NOP
(0054) D12_COMMAND = 0xf0;//讀標(biāo)準(zhǔn)控制碼
0544 EF80 LDI R24,0xF0
0545 93807C01 STS R24,0x7C01
(0055) cwait1;
0547 0000 NOP
0548 0000 NOP
(0056) /****************************
(0057) 緩沖區(qū)數(shù)據(jù)結(jié)構(gòu):
(0058) 字節(jié)1:保留,可為任意值
(0059) 字節(jié)2:數(shù)據(jù)字節(jié)的數(shù)目/長度
(0060) 字節(jié)3:數(shù)據(jù)字節(jié)1
(0061) 字節(jié)4:數(shù)據(jù)字節(jié)2
(0062) *****************************/
(0063) i = D12_DATA;//字節(jié)1
0549 91607C00 LDS R22,0x7C00
(0064) cwait1;
054B 0000 NOP
054C 0000 NOP
(0065) i = D12_DATA;//字節(jié)2
054D 91607C00 LDS R22,0x7C00
(0066) cwait1;
054F 0000 NOP
0550 0000 NOP
(0067) j = D12_DATA;//數(shù)據(jù)字節(jié)
0551 91407C00 LDS R20,0x7C00
(0068) csram;
0553 9360FC01 STS R22,0xFC01
(0069) p = XmtBuff.b;//P指針指向傳輸緩沖區(qū)
0555 E185 LDI R24,0x15
0556 E091 LDI R25,1
0557 2EA8 MOV R10,R24
0558 2EB9 MOV R11,R25
(0070) *(p++) = j;
0559 2C2A MOV R2,R10
055A 2C3B MOV R3,R11
055B 2D82 MOV R24,R2
055C 2D93 MOV R25,R3
055D 9601 ADIW R24,1
055E 2EA8 MOV R10,R24
055F 2EB9 MOV R11,R25
0560 2DE2 MOV R30,R2
0561 2DF3 MOV R31,R3
0562 8340 STD R20,0+Z
(0071) for(i=0;i<7;i++)
0563 2766 CLR R22
0564 C006 RJMP 0x056B
(0072) {
(0073) j = D12_DATA;//數(shù)據(jù)字節(jié)
0565 91407C00 LDS R20,0x7C00
(0074) csram;
0567 9360FC01 STS R22,0xFC01
(0075) asm("st Z+,%j");
0569 9341 ST R20,Z+
(0076) }
056A 9563 INC R22
056B 3067 CPI R22,7
056C F3C0 BCS 0x0565
(0077) D12_COMMAND = 0x01;// 選擇端點(diǎn)(指針指向0位置)
056E 93807C01 STS R24,0x7C01
(0078) cwait;
0570 0000 NOP
(0079) D12_COMMAND = 0xf1;//應(yīng)答SETUP包
0571 EF81 LDI R24,0xF1
0572 93807C01 STS R24,0x7C01
(0080) csram;
0574 9360FC01 STS R22,0xFC01
(0081) i = XmtBuff.b[1];
0576 91600116 LDS R22,_XmtBuff+1
(0082) if (i <= 0x0B)//標(biāo)準(zhǔn)請求跳轉(zhuǎn)表
0578 E08B LDI R24,0xB
0579 1786 CP R24,R22
057A F070 BCS 0x0589
(0083) {
(0084) (*StandardDeviceRequest[i])();
057B E686 LDI R24,0x66
057C E090 LDI R25,0
057D 2FE6 MOV R30,R22
057E 27FF CLR R31
057F 0FEE LSL R30
0580 1FFF ROL R31
0581 0FE8 ADD R30,R24
0582 1FF9 ADC R31,R25
0583 81A0 LDD R26,0+Z
0584 81B1 LDD R27,1+Z
0585 2FEA MOV R30,R26
0586 2FFB MOV R31,R27
0587 D7A7 RCALL xicall
(0085) }
0588 C01B RJMP 0x05A4
(0086) else{
(0087) D12_COMMAND = 0x01;//選擇端點(diǎn)(指針指向0位置)
0589 E081 LDI R24,1
058A 93807C01 STS R24,0x7C01
(0088) cwait;
058C 0000 NOP
(0089) D12_COMMAND = 0xf0;// 寫緩沖區(qū)
058D EF80 LDI R24,0xF0
058E 93807C01 STS R24,0x7C01
(0090) cwait;
0590 0000 NOP
(0091) /****************************
(0092) 緩沖區(qū)數(shù)據(jù)結(jié)構(gòu):
(0093) 字節(jié)1:保留,可為任意值
(0094) 字節(jié)2:數(shù)據(jù)字節(jié)的數(shù)目/長度
(0095) 字節(jié)3:數(shù)據(jù)字節(jié)1
(0096) 字節(jié)4:數(shù)據(jù)字節(jié)2
(0097) *****************************/
(0098) D12_DATA = 0x00;//字節(jié)1
0591 2422 CLR R2
0592 92207C00 STS R2,0x7C00
(0099) cwait;
0594 0000 NOP
(0100) D12_DATA = 0x01;//字節(jié)2
0595 E081 LDI R24,1
0596 93807C00 STS R24,0x7C00
(0101) csram;
0598 9360FC01 STS R22,0xFC01
(0102) D12_DATA = 0x00;//數(shù)據(jù)字節(jié)
059A 2422 CLR R2
059B 92207C00 STS R2,0x7C00
(0103) csram;
059D 9360FC01 STS R22,0xFC01
(0104) D12_COMMAND = 0xfa;//設(shè)置 IN 緩沖區(qū)有效(滿標(biāo)志)
059F EF8A LDI R24,0xFA
05A0 93807C01 STS R24,0x7C01
(0105) csram;
05A2 9360FC01 STS R22,0xFC01
(0106) }
(0107) D12_COMMAND = 0x00;//選擇端點(diǎn)(指針指向0位置)
05A4 2422 CLR R2
05A5 92207C01 STS R2,0x7C01
(0108) cwait;
05A7 0000 NOP
(0109) D12_COMMAND = 0xf1;//應(yīng)答SETUP包
05A8 EF81 LDI R24,0xF1
05A9 93807C01 STS R24,0x7C01
(0110) cwait;
05AB 0000 NOP
(0111) D12_COMMAND = 0xf2;//清端點(diǎn)緩沖區(qū)
05AC EF82 LDI R24,0xF2
05AD 93807C01 STS R24,0x7C01
(0112) }
05AF D545 RCALL pop_gset3
05B0 9508 RET
(0113) /************************************************************
(0114) **工程名稱:U盤固件程序開發(fā)
(0115) **編譯器類型及版本:ICCAVR 6.26C
(0116) **日期:2004.4.30
(0117) **創(chuàng)建人:陳馳
(0118) **所屬單位:湖南大學(xué)計(jì)算機(jī)與通信學(xué)院
(0119)
(0120) **芯片類型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
(0121) **時(shí)鐘頻率:8MHZ
(0122)
(0123) **函數(shù)功能:停止控制端點(diǎn).應(yīng)答枚舉請求
(0124) **函數(shù)輸入?yún)?shù)及說明:無
(0125)
(0126) **函數(shù)返回值:無
(0127) **在本函數(shù)以外定義的變量:D12_COMMAND,D12_DATA
(0128) **調(diào)用的函數(shù)說明:無
(0129)
(0130) **修改人:陳馳
(0131) **修改日期:2004.4.30
(0132) **修改說明:創(chuàng)建
(0133) *************************************************************/
(0134) void void_function(void)
(0135) {
(0136) D12_COMMAND = 0x40;//0端點(diǎn)停止(用于發(fā)送Stall包)
_void_function:
05B1 E480 LDI R24,0x40
05B2 93807C01 STS R24,0x7C01
(0137) cwait;
05B4 0000 NOP
(0138) D12_DATA = 0x01;
05B5 E081 LDI R24,1
05B6 93807C00 STS R24,0x7C00
(0139) cwait;
05B8 0000 NOP
(0140) D12_COMMAND = 0x41;//1端點(diǎn)停止(用于發(fā)送Stall包)
05B9 E481 LDI R24,0x41
05BA 93807C01 STS R24,0x7C01
(0141) cwait;
05BC 0000 NOP
(0142) D12_DATA = 0x01;
05BD E081 LDI R24,1
05BE 93807C00 STS R24,0x7C00
(0143) cwait;
05C0 0000 NOP
(0144) D12_COMMAND = 0xf1;//應(yīng)答SETUP包
05C1 EF81 LDI R24,0xF1
05C2 93807C01 STS R24,0x7C01
(0145) csram;
05C4 9360FC01 STS R22,0xFC01
(0146) }
05C6 9508 RET
_get_status:
05C7 D508 RCALL push_gset1
(0147) /************************************************************
(0148) **工程名稱:U盤固件程序開發(fā)
(0149) **編譯器類型及版本:ICCAVR 6.26C
(0150) **日期:2004.4.30
(0151) **創(chuàng)建人:陳馳
(0152) **所屬單位:湖南大學(xué)計(jì)算機(jī)與通信學(xué)院
(0153)
(0154) **芯片類型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
(0155) **時(shí)鐘頻率:8MHZ
(0156)
(0157) **函數(shù)功能:標(biāo)準(zhǔn)設(shè)備請求
(0158) **函數(shù)輸入?yún)?shù)及說明:無
(0159)
(0160) **函數(shù)返回值:無
(0161) **在本函數(shù)以外定義的變量:D12_COMMAND,D12_DATA
(0162) **調(diào)用的函數(shù)說明:
(0163) USB_submit();
(0164) 控制端點(diǎn)提交函數(shù)
(0165)
(0166) **修改人:陳馳
(0167) **修改日期:2004.4.30
(0168) **修改說明:創(chuàng)建
(0169) *************************************************************/
(0170) void get_status(void)
(0171) {
(0172) XmtBuff.b[1] = 0x00;
05C8 2422 CLR R2
05C9 92200116 STS R2,_XmtBuff+1
(0173) switch (XmtBuff.b[0])
05CB 91400115 LDS R20,_XmtBuff
05CD 2755 CLR R21
05CE 3840 CPI R20,0x80
05CF E0E0 LDI R30,0
05D0 075E CPC R21,R30
05D1 F081 BEQ 0x05E2
05D2 3841 CPI R20,0x81
05D3 E0E0 LDI R30,0
05D4 075E CPC R21,R30
05D5 F029 BEQ 0x05DB
05D6 3842 CPI R20,0x82
05D7 E0E0 LDI R30,0
05D8 075E CPC R21,R30
05D9 F029 BEQ 0x05DF
05DA C007 RJMP 0x05E2
(0174) {
(0175) case 0x80:
(0176) break;
(0177) case 0x81:
(0178) XmtBuff.b[0] = 0x00;
05DB 2422 CLR R2
05DC 92200115 STS R2,_XmtBuff
(0179) break;
05DE C003 RJMP 0x05E2
(0180) case 0x82:
(0181) XmtBuff.b[0] = 0x00;
05DF 2422 CLR R2
05E0 92200115 STS R2,_XmtBuff
(0182) break;
(0183) }
(0184) XmtBuff.p_p=0;
05E2 2422 CLR R2
05E3 9220015B STS R2,0x15B
(0185) XmtBuff.wrLength = 2;
05E5 E082 LDI R24,2
05E6
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -