📄 d12isr.c
字号:
/*++
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.29
**日期: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)
{
unsigned char i,j;
D12_COMMAND = 0xf4;// 读中断寄存器
cwait1;
i=D12_DATA;//读取数据赋值给局部变量i
csram;
if(i & 0x01)//处理控制输出端点
{
D12_COMMAND = 0x40;//读最后状态
cwait1;
i= D12_DATA;//从端点缓冲区读取数据
csram;
if (i & 0x20) //收到SETUP包
{
Setup_control();//枚举控制函数
}
}else if(i & 0x02)//处理控制输入端点
{
D12_COMMAND = 0x41;//读最后状态
cwait1;
i = D12_DATA;//从端点缓冲区读取数据
csram;
USB_submit();//控制端点提交函数
}else if(i & 0x04)//处理端点1输出
{
}else if(i & 0x08)//处理端点1输入
{
}else if(i & 0x10)//处理批量输出端点
{
D12_COMMAND = 0x44;//读最后状态
cwait;
i = D12_DATA;
csram;
D12_COMMAND = 0x04;//选择端点(指针指向0位置)
cwait;
D12_COMMAND = 0xf0;//读缓冲区
/****************************
缓冲区数据结构:
字节1:保留,可为任意值
字节2:数据字节的数目/长度
字节3:数据字节1
字节4:数据字节2
*****************************/
cwait1;
j=D12_DATA;//字节1
cwait1;
j=D12_DATA;//字节2
csram;
Bulk_Out_Packet(j);//处理PC发送的批量传输包
}
else if(i & 0x20)//处理批量输入端点
{
D12_COMMAND = 0x45;//读 in 最后状态
cwait1;
i = D12_DATA;
cwait1;
csram;
Bulk_In_Packet();//回应批量传输包
}else if(i & 0x80)//D12_INT_SUSPENDCHANGE D12挂起
{
}else if(i & 0x40)//D12_INT_BUSRESET总线复位
{
bus_reset();//总线重置
}else
{
i=D12_DATA; //D12_INT_EOT DMA操作已结束
if(i & 0x01)
{
dma_eot();//Dma 操作结束
}
}
}
void bus_reset(void)//总线重置函数
{
}
void dma_eot(void)//Dma 操作结束函数
{
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.29
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院
**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ
**函数功能:控制端点传输提交
**函数输入参数及说明:无
**函数返回值:无
**在本函数以外定义的变量:传输结构体
**调用的函数说明:无
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void USB_submit(void)
{
unsigned char i,j,k;
/*********说明******************
D12芯片数据手册上说明控制端点
缓冲区大小为16BYTES,使用时试用
64BYTES可以完成传输,这里故用64
来处理
*******************************/
if(64 > XmtBuff.wrLength)
{
j = XmtBuff.wrLength;
}else
{
j = 64;
}
D12_COMMAND = 0x01;//选择端点(指针指向0位置)
cwait;
D12_COMMAND = 0xf0;//写缓冲区
cwait;
/****************************
缓冲区数据结构:
字节1:保留,可为任意值
字节2:数据字节的数目/长度
字节3:数据字节1
字节4:数据字节2
*****************************/
D12_DATA = 0x00;//写字节1
cwait;
D12_DATA = j;//写字节2
csram;
for(i=0;i<j;i++)
{
k = *(XmtBuff.pp+i);
D12_DATA = k;//写数据字节
csram;
}
XmtBuff.pp += j;
XmtBuff.wrLength -= j;
D12_COMMAND = 0xfa;//设置缓冲区有效(满标志)
csram;
}
/************************************************************
**工程名称:U盘固件程序开发
**编译器类型及版本:ICCAVR 6.29
**日期:2004.4.30
**创建人:陈驰
**所属单位:湖南大学计算机与通信学院
**芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
**时钟频率:8MHZ
**函数功能:BULK端点传输提交
**函数输入参数及说明:无
**函数返回值:无
**在本函数以外定义的变量:传输结构体
**调用的函数说明:
**修改人:陈驰
**修改日期:2004.4.30
**修改说明:创建
*************************************************************/
void BULK_submit(void)
{
unsigned char i,j,k;
if(64 > XmtBuff.wrLength)
{
j = XmtBuff.wrLength;
}else
{
j = 64;
}
D12_COMMAND = 0x05;// 选择端点(指针指向0位置)
cwait;
D12_COMMAND = 0xf0;// 写缓冲区
cwait;
/****************************
缓冲区数据结构:
字节1:保留,可为任意值
字节2:数据字节的数目/长度
字节3:数据字节1
字节4:数据字节2
*****************************/
D12_DATA = 0x00;//写字节1
cwait;
D12_DATA = j;//写字节2
csram;
/*****************************
判断输出
XmtBuff.p_p = 0:输出一般数据
XmtBuff.p_p = 1:输出CONST数据
******************************/
if(XmtBuff.p_p)
{
for(i=0;i<j ;i++)
{
k = *(XmtBuff.pp+i);
D12_DATA = k;//写数据字节
csram;
}
XmtBuff.pp += j;
}else
{
for(i=0;i<j;i++)
{
k = *(XmtBuff.p+i);
D12_DATA = k;//写数据字节
csram;
}
XmtBuff.p += j;
}
XmtBuff.wrLength -= j;
D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
csram;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -