USB2.0接口芯片CY7C68013的固件程序開發(fā)
該文件提供了一個固件程序的框架結(jié)構(gòu),適用于一般的對數(shù)據(jù)傳輸?shù)目刂?。該結(jié)構(gòu)提供了對開發(fā)者開放的程序接口,開發(fā)者通過在這些接口函數(shù)中加入適當(dāng)?shù)拇a來實(shí)現(xiàn)所需的功能。
其工作流程如圖 2所示,
圖2 固件程序框架工作流程
3.3接口函數(shù):
在固件程序框架中提供了功能函數(shù)接口,通過在這些接口函數(shù)中加入自行開發(fā)代碼可以實(shí)現(xiàn)特定的功能并大大降低固件程序的開發(fā)難度,加速USB系統(tǒng)開發(fā)的過程。這些接口函數(shù)分三類:任務(wù)分配、標(biāo)準(zhǔn)設(shè)備請求執(zhí)行和USB總線中斷處理[3]。下面將依次介紹這些接口函數(shù)和用途。
3.3.1任務(wù)分配
TD_Init()
說明:此函數(shù)主要是完成FX2的初始化,在FX2再次枚舉和開始任務(wù)分配前被調(diào)用,其目的是初始化各個端口以及各端口的先入先出緩沖區(qū)。
TD_Poll()
說明:此函數(shù)在設(shè)備運(yùn)行時被重復(fù)的調(diào)用,它應(yīng)包括完成特別任務(wù)的代碼。在該函數(shù)返回前,優(yōu)先級高的任務(wù)可能已經(jīng)完成。但是,如果它返回值為假,F(xiàn)X2將不會影響設(shè)備請求和USB總線設(shè)備掛起事件。如果需要大量的處理時間,F(xiàn)X2就會通過多次調(diào)用TD_Poll()函數(shù)將時間分段。
TD_Suspend()
說明:此函數(shù)是在設(shè)備進(jìn)入掛起狀態(tài)前調(diào)用的,開發(fā)者在其中加入適當(dāng)?shù)拇a,對設(shè)備的工作狀態(tài)進(jìn)行配置,可使設(shè)備處于低功耗狀態(tài)并返回真值。但是開發(fā)者可以改動TD_Suspend()的程序代碼,使其返回為假,這樣可以使FX2不進(jìn)入掛起狀態(tài)。
TD_Resume()
說明:當(dāng)外部要求重新啟動時(如,外界產(chǎn)生Wakeup中斷或者USB總線有傳輸活動發(fā)生),設(shè)備就會通過調(diào)用此函數(shù)來對處理器進(jìn)行重啟,也就是TD_Suspend()函數(shù)的逆操作。此時,設(shè)備在正常電源下重新啟動。
3.3.2設(shè)備請求
設(shè)備請求函數(shù)具有如下的形式:
BOOL DR_xxx(void)
{
……file://設(shè)備請求處理代碼
return(TURE);
}
主要是完成對于來自主機(jī)的命令及請求的處理工作,如配置端口等。
3.3.3USB中斷
FX2設(shè)備的中斷包括與標(biāo)準(zhǔn)8051中斷相同的中斷同時也包含一些FX2特有的中斷。由于在固件程序中提供了中斷服務(wù)例程接口,開發(fā)者只須在需要處理的中斷服務(wù)例程接口中加入自己編寫的中斷服務(wù)代碼即可完成對相應(yīng)中斷請求的服務(wù),這樣就可以避免深入研究FX2的中斷自動引導(dǎo)(Interrupt Autovectors)的邏輯結(jié)構(gòu)[2]。這些中斷服務(wù)例程接口函數(shù)的形式為:
void ISR_xxx(void) interrupt 0
{
……file://開發(fā)者中斷服務(wù)代碼
EZUSB_IRQ_CLEAR();
USBIRQ = bmXXX; // 清除該中斷請求
}
4. 總結(jié):
在了解了Cypress的固件程序框架結(jié)構(gòu)之后,采用Keil uVision2開發(fā)環(huán)境在該Cypress的固件框架下開發(fā)可以在很大程度上降低固件程序的開發(fā)難度并縮短開發(fā)周期,獲得較高的效率。
pid控制相關(guān)文章:pid控制原理
評論