⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d12isr.lis

📁 USB通信程序开发(附源码 精品)包括详细论文说明
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                         .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 + -