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

📄 d12isr.c

📁 usb开发(基于D12)。。湖南大学计算机与通信学院同学毕业设计及源代码!!好的很啊
💻 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 + -