📄 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 + -