USB2.0接口芯片CY7C68013的固件程序開(kāi)發(fā)
該文件提供了一個(gè)固件程序的框架結構,適用于一般的對數據傳輸的控制。該結構提供了對開(kāi)發(fā)者開(kāi)放的程序接口,開(kāi)發(fā)者通過(guò)在這些接口函數中加入適當的代碼來(lái)實(shí)現所需的功能。
其工作流程如圖 2所示,

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