?? usbecd.c
字號:
/*
*************************************************************************************************************
- 函數名稱 : D12_SelectEndpoint(INT8U bEndp)
- 函數說明 : 讀取PDIUSBD12端點狀態
- 輸入參數 : bEndp:端點號
- 輸出參數 : 緩沖區狀態,端點狀態
*************************************************************************************************************
*/
INT8U D12_ReadEndpointStatus(INT8U bEndp)
{
INT8U endpointStatus;
outportc(USB_COMMAND_SELECT_ENDPOINT+bEndp); //輸出讀取端點狀態命令
endpointStatus=inportd(); //讀取端點狀態
return endpointStatus;
}
/*
*************************************************************************************************************
- 函數名稱 : D12_ReadLastTransactionStatus(INT8U bEndp)
- 函數說明 : 讀取PDIUSBD12最后處理狀態寄存器
- 輸入參數 : bEndp:端點號
- 輸出參數 : 返回最后處理狀態寄存器
*************************************************************************************************************
*/
INT8U D12_ReadLastTransactionStatus(INT8U bEndp)
{
INT8U tempStatus;
outportc(USB_COMMAND_READ_LAST_XACTION_STATUS+bEndp); //輸出讀取最后處理狀態寄存器命令
tempStatus=inportd(); //讀取狀態
return tempStatus;
}
/*
*************************************************************************************************************
- 函數名稱 : D12_ReadEndpoint(INT8U bendp,INT8U len,INT8U *buf)
- 函數說明 : 讀取PDIUSBD12緩沖區中的數據
- 輸入參數 : bEndp:端點號 len:讀取數據的長度 buf:存放數據指針
- 輸出參數 : 返回讀到的字節數
*************************************************************************************************************
*/
INT8U D12_ReadEndpoint(INT8U bendp,INT8U len,INT8U *buf)
{
INT8U i,j;
outportc(USB_COMMAND_SELECT_ENDPOINT+bendp); //輸出選擇端點命令
if((inportd() & USB_ENDPOINT_STATUS_FULL_EMPTY)==0) //如果緩沖區為空
{
return 0;
}
outportc(USB_COMMAND_READ_BUFFER); //輸出讀緩沖區命令
i=inportd(); //讀取保留字節
j=inportd(); //讀取數據字節數目/長度
if(j>len) //如果大于要求讀的字節數目/長度
j=len; //則只讀要求的字節數目/長度
for(i=0;i<j;i++)
*(buf+i)=inportd(); //讀取要求的字節數目/長度
outportc(USB_COMMAND_CLEAR_BUFFER); //清緩沖區,新的信息包才可以重新被接收
return j;
}
/*
*************************************************************************************************************
- 函數名稱 : D12_WriteEndpoint(INT8U bendp,INT8U len,INT8U *buf)
- 函數說明 : 向PDIUSBD12緩沖區寫中的數據
- 輸入參數 : bEndp:端點號 len:要寫入數據的長度 buf:數據存放指針
- 輸出參數 : 返回寫入的字節數
*************************************************************************************************************
*/
INT8U D12_WriteEndpoint(INT8U bendp,INT8U len,INT8U *buf)
{
INT8U i;
outportc(USB_COMMAND_SELECT_ENDPOINT+bendp); //輸出選擇端點命令
i=inportd(); //可選地讀取1字節
outportc(USB_COMMAND_WRITE_BUFFER); //輸出寫緩沖區命令
outportd(0x00); //寫入1個保留字節
outportd(len); //寫入即將寫入的字節數目
for(i=0;i<len;i++)
outportd(*(buf+i)); //寫入要求的字節數目/長度
outportc(USB_COMMAND_VALIDATE_BUFFER); //使緩沖區有效
return len;
}
/*
*************************************************************************************************************
- 函數名稱 : D12_SetEndpointStatus(INT8U bendp,INT8U bStalled)
- 函數說明 : 設置PDIUSBD12端點狀態
- 輸入參數 : bEndp:端點號 bStalled:要設置的狀態1:表示停止
- 輸出參數 : 無
*************************************************************************************************************
*/
void D12_SetEndpointStatus(INT8U bendp,INT8U bStalled)
{
outportc(USB_COMMAND_SET_ENDPOINT_STATUS+bendp); //輸出設置端點命令
outportd(bStalled); //設置端點狀態
}
/*
*************************************************************************************************************
- 函數名稱 : D12_AcknowledgeEndpoint(INT8U bendp)
- 函數說明 : PDIUSBD12應答SETUP
- 輸入參數 : bEndp:端點號
- 輸出參數 : 無
*************************************************************************************************************
*/
void D12_AcknowledgeEndpoint(INT8U bendp)
{
outportc(USB_COMMAND_SELECT_ENDPOINT+bendp); //輸出選擇端點命令
outportc(USB_COMMAND_ACKNOWLEDGE_ENDPOINT); //輸出應答Setup命令
if(bendp==0)
outportc(USB_COMMAND_CLEAR_BUFFER); //清空該端點緩沖區
}
/*
*************************************************************************************************************
- 函數名稱 : D12_SendResume(void)
- 函數說明 : 發送恢復通常用于器件處于掛起狀態
- 輸入參數 : 無
- 輸出參數 : 無
*************************************************************************************************************
*/
void D12_SendResume(void)
{
outportc(USB_COMMAND_SEND_RESUME); //輸出發送恢復命令
}
/*
*************************************************************************************************************
- 函數名稱 : D12_ReadCurrentFrameNumber(void)
- 函數說明 : 讀當前幀數目
- 輸入參數 : 無
- 輸出參數 : 幀數
*************************************************************************************************************
*/
INT16U D12_ReadCurrentFrameNumber(void)
{
INT8U i;
INT16U j;
outportc(USB_COMMAND_READ_CURRENT_FRAME_NUMBER); //輸出讀取當前幀數目命令
i=inportd(); //讀取幀數目的低字節
j=inportd(); //讀取幀數目的高字節
j=(j<<8)+i; //組合為16位
return j;
}
/*
*************************************************************************************************************
- 函數名稱 : D12_init_Unconfig(void)
- 函數說明 : 禁止0 除外的所有端點
- 輸入參數 : 無
- 輸出參數 : 無
*************************************************************************************************************
*/
void D12_init_Unconfig(void)
{
D12_SetEndpointEnable(0); //禁止0 除外的所有端點
}
/*
*************************************************************************************************************
- 函數名稱 : D12_init_Config(void)
- 函數說明 : 使能普通/同步端點
- 輸入參數 : 無
- 輸出參數 : 無
*************************************************************************************************************
*/
void D12_init_Config(void)
{
D12_SetEndpointEnable(1); //使能普通/同步端點
}
/*
*************************************************************************************************************
- 函數名稱 : stall_ep0(void)
- 函數說明 : 使控制端點處于停止狀態
- 輸入參數 : 無
- 輸出參數 : 無
*************************************************************************************************************
*/
void stall_ep0(void)
{
D12_SetEndpointStatus(USB_ENDPOINT_CONTROL_OUT, USB_SET_ENDPOINT_STALL); //0,1
D12_SetEndpointStatus(USB_ENDPOINT_CONTROL_IN, USB_SET_ENDPOINT_STALL); // 1,1
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -