?? dsk5509_usb.c
字號:
/****************************************************************/
/* 文件名: DSK5509_USB.c */
/* 功能: 實現5509片上usb的配置及與PC機的通信 */
/* 設計日期: 10/20/2004 */
/* 版權: 北京合眾達電子技術有限責任公司 */
/****************************************************************/
#include <stdio.h>
#include <csl.h>
#include <csl_irq.h>
#include <csl_pll.h>
#include <csl_usb.h>
#include <csl_chiphal.h>
#include "Descriptors.h"
#include "USB_FUNCTION.h"
#include "Global_Maco.h"
/* The example uses predefined CSL macros and symbolic */
/* constants to create the correct register settings */
/* needed to configure the usb. */
/* 鎖相環的設置 */
PLL_Config myConfig = {
0, //IAI: the PLL locks using the same process that was underway
//before the idle mode was entered
1, //IOB: If the PLL indicates a break in the phase lock,
//it switches to its bypass mode and restarts the PLL phase-locking
//sequence
10, //PLL multiply value; multiply 24 times
0 //Divide by 2 PLL divide value; it can be either PLL divide value
//(when PLL is enabled), or Bypass-mode divide value
//(PLL in bypass mode, if PLL multiply value is set to 1)
};
interrupt void USB_ISR();
/* 配置USB時鐘頻率 */
void USB_initPLL(Uint16 inclk, Uint16 outclk, Uint16 plldiv);
void main(void)
{
/* Initialize CSL library - This is REQUIRED !!! */
CSL_init();
/* Temporarily disable all maskable interrupts */
IRQ_globalDisable();
/* 設置系統的運行速度為144MHz */
PLL_config(&myConfig);
/* 對USB進行初始化設置 */
USB_InitConfig(hEpObjArray,EpIn0Event_mask,EpOut0Event_mask);
/* 進入系統死循環 */
for(;;)
{
/* 在該函數里面進行判斷是否滿足系統設置的默認狀態, */
/* 如果滿足就進行相應的處理,否則不進行任何處理 */
USB_DefaultDeal();
/* 下面為用戶擴展的狀態,用戶也可以在此添加自己的狀態處理函數 */
/* 塊傳輸節點1和4系統保留用來演示功能 */
if(usbflag == USB_CTRL0_READ)
{
usbflag = 0;
/* 用戶使用下面的接收函數時,必須使用CtrlDataLen這個系統定義的全局變量, */
/* 因為從主機傳來的數據長度直接保存在該變量里 */
/* 注意該接收函數的數據緩沖區的第一個字用來存儲接收長度的,所以用戶在定義*/
/* 緩沖區長度時為實際數據長度加1 */
//這部分是設計時用作測試用的,用戶可以參照使用
USB_ReceivCtrlData((Uint16 *)&usbbuffer, CtrlDataLen, USB_IOFLAG_SWAP);
if(usbflag == USB_BULK3_READ)
{
usbflag = 0;
// 如果是PC機向塊輸出節點3傳送數據,請用戶添加自己的處理代碼
}
if(usbflag == USB_BULK4_READ)
{
usbflag = 0;
// 如果是PC機向塊輸出節點4傳送數據,請用戶添加自己的處理代碼
}
if(usbflag == USB_BULK5_READ)
{
usbflag = 0;
// 如果是PC機向塊輸出節點5傳送數據,請用戶添加自己的處理代碼
}
if(usbflag == USB_BULK6_READ)
{
usbflag = 0;
// 如果是PC機向塊輸出節點6傳送數據,請用戶添加自己的處理代碼
}
if(usbflag == USB_BULK7_READ)
{
usbflag = 0;
// 如果是PC機向塊輸出節點7傳送數據,請用戶添加自己的處理代碼
}
if(usbflag == USB_CTRL0_WRITE)
{
usbflag = 0;
/* 用戶使用下面的發送函數時,必須使用CtrlDataLen這個系統定義的全局變量, */
/* 因為從主機傳來的數據長度直接保存在該變量里, */
/* 這樣主機欲接收的長度與控制節點In0發送的長度保持一致 */
/*
這部分是設計時用作測試用的,用戶可以參照使用
*/
usbbuffer[0] =0x0;
usbbuffer[1] =0x0301;
usbbuffer[2] =0x0705;
usbbuffer[3] =0x0b09;
usbbuffer[4] =0x0f0d;
USB_SendCtrlData((Uint16 *)&usbbuffer, CtrlDataLen, USB_IOFLAG_NONE);
}
if(usbflag == USB_BULK3_WRITE)
{
usbflag = 0;
// 如果是PC機向塊輸入節點3讀取數據,請用戶添加自己的處理代碼
}
if(usbflag == USB_BULK4_WRITE)
{
usbflag = 0;
// 如果是PC機向塊輸入節點4讀取數據,請用戶添加自己的處理代碼
}
if(usbflag == USB_BULK5_WRITE)
{
usbflag = 0;
// 如果是PC機向塊輸入節點5讀取數據,請用戶添加自己的處理代碼
}
if(usbflag == USB_BULK6_WRITE)
{
usbflag = 0;
// 如果是PC機向塊輸入節點6讀取數據,請用戶添加自己的處理代碼
}
if(usbflag == USB_BULK7_WRITE)
{
usbflag = 0;
// 如果是PC機向塊輸入節點7讀取數據,請用戶添加自己的處理代碼
}
}
}
/* USB中斷函數 */
interrupt void USB_ISR()
{
/* 調用USB事件的分配器 */
USB_evDispatch();
}
/********************************************************************/
/* No More */
/********************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -