將串行應(yīng)用移植到USB接口的簡便方法(06-100)
在下面的討論中,我們假設(shè)原先的串行端口代碼是用C語言編寫的,并且使用了可訪問集成UART外設(shè)的公共C語言庫。 給定這些條件后,將固件移植到CDC需要進(jìn)行如下的修改:
本文引用地址:http://www.ex-cimer.com/article/81086.htm·在主文件頭部,用相應(yīng)的USB聲明代替針對串行端口的#include聲明;
·在主函數(shù)中,增加對USB-CDC初始化代碼的調(diào)用;
·在主函數(shù)中,增加對USB后臺任務(wù)的調(diào)用;
·驗證應(yīng)用程序代碼,以實現(xiàn)與USB后臺任務(wù)的協(xié)同多任務(wù)處理;
·最后,為鏈接器提供USB-CDC專用庫,生成最終的可執(zhí)行代碼,然后對閃存芯片進(jìn)行編程。
實際上,上述這種情況要求應(yīng)用所調(diào)用的任何功能都不能包含阻塞循環(huán)。 也就是說,任何功能都不能占用100%的處理器時間,也不能妨礙USB后臺任務(wù)的執(zhí)行。 反過來,所有USB專用控制函數(shù)、中斷、標(biāo)志和緩沖機(jī)制都由CDC類固件后臺任務(wù)管理,設(shè)計工程師無需關(guān)注其實現(xiàn)細(xì)節(jié)。 設(shè)計工程師所看到的只是一個非常類似于公共串行端口庫的小函數(shù)集。表1給出了部分函數(shù)例子。
大多數(shù)讀者立即就可認(rèn)出這些函數(shù)并將其與通用C語言庫中的函數(shù)對應(yīng)起來。 事實上,puts 和 gets 函數(shù)可以直接用CDC類中對應(yīng)的 putsUSBUSART 和 getsUSBUSART 函數(shù)來替代。 通過其它專用實施函數(shù)還可以支持不同的串類型(空結(jié)束與固定長度緩沖)和存儲類型(RAM還是ROM串表)。 下面給出熟悉的HelloWorld程序利用CDC-USB函數(shù)實現(xiàn)的程序。
#include "systemusbusb.h"
#include "io_cfg.h"
void main(void)
{
InitializeSystem();
while(1)
{
USBTasks(); // USB Tasks
HelloWorld(); // send a message to the
world
}//end while
}//end main
HelloWorld(void)
{
If ( mUSBUSARTIsTxTrfReady()) // check if Tx buffer empty
putrsUSBUSART( "Hello World!rn") //
send a new text string
} // Hello World
評論