?? d12isr.lis
字號:
.module D12ISR.c
.area text(rom, con, rel)
0000 .dbfile G:\source\D12ISR.c
0000 .dbfunc s D12_ISR _D12_ISR fI
; j -> R22
; i -> R20
.even
0000 _D12_ISR::
0000 00D0 rcall push_gset2
0002 .dbline -1
0002 .dbline 51
; /*++
;
; Module Name:
;
; D12ISR.c
;
; Abstract:
;
; Header file related to D12 module
;
; Environment:
;
; ICCAVR 6.29
;
; Revision History:
;
; 04/23/2004 chenchi created
;
; --*/
; /******************************************************************/
; #include "io8515v.h"
; #include "d12.h"
; /************************************************************
; **工程名稱:U盤固件程序開發
; **編譯器類型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **創建人:陳馳
; **所屬單位:湖南大學計算機與通信學院
;
; **芯片類型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **時鐘頻率:8MHZ
;
; **函數功能:中斷服務處理
; **函數輸入參數及說明:無
;
; **函數返回值:無
; **在本函數以外定義的變量:D12_COMMAND,D12_DATA
; **調用的函數說明:
; Setup_control():枚舉控制函數
; USB_submit():控制端點提交函數
; Bulk_Out_Pack(j):處理PC發送的批量傳輸包
; Bulk_In_Packet():回應批量傳輸包
; void bus_reset(void):總線重置
; void dma_eot(void):Dma 操作結束
;
; **修改人:陳馳
; **修改日期:2004.4.30
; **修改說明:創建
; *************************************************************/
; void D12_ISR(void)
; {
0002 .dbline 53
; unsigned char i,j;
; D12_COMMAND = 0xf4;// 讀中斷寄存器
0002 84EF ldi R24,244
0004 8093017C sts 31745,R24
0008 .dbline 54
; cwait1;
0008 0000 nop
000A .dbline 54
000A 0000 nop
000C .dbline 55
; i=D12_DATA;//讀取數據賦值給局部變量i
000C 4091007C lds R20,31744
0010 .dbline 56
; csram;
0010 609301FC sts 0xfc01,R22
0014 .dbline 56
0014 .dbline 57
; if(i & 0x01)//處理控制輸出端點
0014 40FF sbrs R20,0
0016 0DC0 rjmp L3
0018 .dbline 58
; {
0018 .dbline 59
; D12_COMMAND = 0x40;//讀最后狀態
0018 80E4 ldi R24,64
001A 8093017C sts 31745,R24
001E .dbline 60
; cwait1;
001E 0000 nop
0020 .dbline 60
0020 0000 nop
0022 .dbline 61
; i= D12_DATA;//從端點緩沖區讀取數據
0022 4091007C lds R20,31744
0026 .dbline 62
; csram;
0026 609301FC sts 0xfc01,R22
002A .dbline 62
002A .dbline 63
; if (i & 0x20) //收到SETUP包
002A 45FF sbrs R20,5
002C 4FC0 rjmp L4
002E .dbline 64
; {
002E .dbline 65
; Setup_control();//枚舉控制函數
002E 00D0 rcall _Setup_control
0030 .dbline 66
; }
0030 .dbline 67
0030 4DC0 rjmp L4
0032 L3:
0032 .dbline 67
; }else if(i & 0x02)//處理控制輸入端點
0032 41FF sbrs R20,1
0034 0BC0 rjmp L7
0036 .dbline 68
; {
0036 .dbline 69
; D12_COMMAND = 0x41;//讀最后狀態
0036 81E4 ldi R24,65
0038 8093017C sts 31745,R24
003C .dbline 70
; cwait1;
003C 0000 nop
003E .dbline 70
003E 0000 nop
0040 .dbline 71
; i = D12_DATA;//從端點緩沖區讀取數據
0040 4091007C lds R20,31744
0044 .dbline 72
; csram;
0044 609301FC sts 0xfc01,R22
0048 .dbline 72
0048 .dbline 73
; USB_submit();//控制端點提交函數
0048 45D0 rcall _USB_submit
004A .dbline 74
004A 40C0 rjmp L8
004C L7:
004C .dbline 74
; }else if(i & 0x04)//處理端點1輸出
004C 42FF sbrs R20,2
004E 01C0 rjmp L9
0050 .dbline 75
; {
0050 .dbline 77
0050 3DC0 rjmp L10
0052 L9:
0052 .dbline 77
;
; }else if(i & 0x08)//處理端點1輸入
0052 43FF sbrs R20,3
0054 01C0 rjmp L11
0056 .dbline 78
; {
0056 .dbline 80
0056 3AC0 rjmp L12
0058 L11:
0058 .dbline 80
;
; }else if(i & 0x10)//處理批量輸出端點
0058 44FF sbrs R20,4
005A 1DC0 rjmp L13
005C .dbline 81
; {
005C .dbline 82
; D12_COMMAND = 0x44;//讀最后狀態
005C 84E4 ldi R24,68
005E 8093017C sts 31745,R24
0062 .dbline 83
; cwait;
0062 0000 nop
0064 .dbline 84
; i = D12_DATA;
0064 4091007C lds R20,31744
0068 .dbline 85
; csram;
0068 609301FC sts 0xfc01,R22
006C .dbline 85
006C .dbline 86
; D12_COMMAND = 0x04;//選擇端點(指針指向0位置)
006C 84E0 ldi R24,4
006E 8093017C sts 31745,R24
0072 .dbline 87
; cwait;
0072 0000 nop
0074 .dbline 88
; D12_COMMAND = 0xf0;//讀緩沖區
0074 80EF ldi R24,240
0076 8093017C sts 31745,R24
007A .dbline 96
; /****************************
; 緩沖區數據結構:
; 字節1:保留,可為任意值
; 字節2:數據字節的數目/長度
; 字節3:數據字節1
; 字節4:數據字節2
; *****************************/
; cwait1;
007A 0000 nop
007C .dbline 96
007C 0000 nop
007E .dbline 97
; j=D12_DATA;//字節1
007E 6091007C lds R22,31744
0082 .dbline 98
; cwait1;
0082 0000 nop
0084 .dbline 98
0084 0000 nop
0086 .dbline 99
; j=D12_DATA;//字節2
0086 6091007C lds R22,31744
008A .dbline 100
; csram;
008A 609301FC sts 0xfc01,R22
008E .dbline 100
008E .dbline 101
; Bulk_Out_Packet(j);//處理PC發送的批量傳輸包
008E 062F mov R16,R22
0090 1127 clr R17
0092 00D0 rcall _Bulk_Out_Packet
0094 .dbline 102
0094 1BC0 rjmp L14
0096 L13:
0096 .dbline 102
; }else if(i & 0x20)//處理批量輸入端點
0096 45FF sbrs R20,5
0098 0DC0 rjmp L15
009A .dbline 103
; {
009A .dbline 104
; D12_COMMAND = 0x45;//讀 in 最后狀態
009A 85E4 ldi R24,69
009C 8093017C sts 31745,R24
00A0 .dbline 105
; cwait1;
00A0 0000 nop
00A2 .dbline 105
00A2 0000 nop
00A4 .dbline 106
; i = D12_DATA;
00A4 4091007C lds R20,31744
00A8 .dbline 107
; cwait1;
00A8 0000 nop
00AA .dbline 107
00AA 0000 nop
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -