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