新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > CY7C68001與TMS320VC5416的接口設計

        CY7C68001與TMS320VC5416的接口設計

        ——
        作者: 時間:2007-01-26 來源:《現代電子技術》 收藏

        近年來,隨著數字信號技術的發展,需要處理的數據量越來越大,處理的速度也越來越快,因此具有高速性能dsp芯片的應用得到了廣泛重視。而通過dsp處理的數據往往要傳輸給pc機進行存儲和再處理,那么就必須研究dsp與pc機之間的高速通信問題,所以今年發展起來的usb 2.0技術及其高速易擴展等特點得到越來越廣泛的應用,本文就是使用usb 2.0芯片cy7c68001和dsp芯片tms320vc5416來實現dsp與pc機通信的。

        1 cy7c68001芯片特點描述

        cy7c68001是用來連接微處理器或dsp的dma從裝置,其內部不含微處理器;集成有usb2.0收發器(物理層)、usb2.0串行接口引擎sie(鏈路層、實現底層通信協議)、4kb的fifo和電壓調節器、鎖相環;支持高速(480mb/s)或全速(12mb/s)傳輸;3.3v操作電壓,24mhz外部振蕩頻率;可以選擇8位或16位總線方式;具有同步與異步的fifo接口;他可以向用戶提供足夠的端口,緩沖區和傳輸速度,提供usb2.0協議要求的全部4種傳輸方式(控制傳輸、中斷傳輸、批量傳輸和同步傳輸),可以滿足用戶對各種類型數據傳輸的需求。片上的串行接口處理器(sie)能完成大部分的usb協議操作,使用戶可以擺脫復雜的協議細節,簡化了用戶配置代碼,加快了程序開發過程。但是由于采用的是不帶mcu內核的usb接口芯片,usb的應用層協議應該由tms320vc5416編程實現,usb固件的加載必須靠dsp控制cy7c68001完成。

        2 cy7c68001芯片寄存器

        2.1 cy7c68001配置寄存器

        usb的配置寄存器主要有ifconfig,flagsab,flagscd,polar,revid。ifconfig配置usb的接口方式;flagsab與flagscd確定flagx所代表的狀態;polar確定fifo接口信號的極性;revid讀版本號。

        2.2 endpoint配置寄存器

        配置usb四個節點,主要有epxcfg,epxpktlenh與epxpktlenl,epxpeh與epxpel,epxisoinpkts幾類寄存器(x的值為2,4,6,8):epxcfg配置每一個endpoint的類型;epxpktlenh與epxpktlen設置每個節點包的大小;epxpfh與epxpfl確定每個節點的可編程的標志位;epxisoinpkts確定等時同步傳輸時,每一幀的數據包個數。

        2.3 狀態寄存器

        狀態寄存器有ep24flags與ep68flags;ep24flags確定節點2與4的fifo的狀態;ep68flags確定節點6與8的fifo的狀態。

        2.4 usb幀狀態寄存器

        usb總線配置寄存器主要有usbframeh、usbframel、microframe、fnaddr來確定usb每一幀的狀態,usbframeeh/l寄存器確定每一幀的數據長度;microframe寄存器確定每一個微幀的數據個數;fnaddr寄存器保存自舉時的7位地址。

        2.5 節點0(endpoint0)操作寄存器

        節點0(endpoint0)操作寄存器主要包括fp0buf,setup,ep0bc三個寄存器:ep0buf寄存器是節點0的緩沖寄存器,通過他可以完成對節點0數據的訪問;setup寄存器從計算機接收set-up數據包;ep0bc,節點0中的數據的個數。

        2.6 其他寄存器

        inpktend/flush寄存器強制數據包結束或清空fifo;interrupts寄存器為中斷使能寄存器;desc寄存器可以完成對描述表的操作。

        3 tms320vc5416與cy7c68001的硬件接口

        本設計將cy7c68001配置在tms320vc5416的i/o空間,采用cy7c68001的并行異步讀寫方式完成二者之間數據和命令的交換。其原理框圖如圖1所示。

        本文引用地址:http://www.104case.com/article/21014.htm

        cy7c68001除了存儲器接口外,還有1個中斷信號usbint反和4個狀態信號(ready,flaga,flagb和flagc),中斷信號usbint反,擴展總線的xint2反,操作復用tms320vc5416的外部中斷int2反被配置在系統狀態寄存(sysstat1)中,可由tms320vc5416查詢,以確定真正的中斷源,狀態信號ready,flaga,flagb和flagc配置在本系統狀態寄存器0(sysstat0)中,可由tms320vc5416查詢,由于采用了cpld,增強了系統的靈活性和可擴充性。在實際操作中,由于通信速度達到了480mb/s,所以采用4層板設計,而且對電源要進行很好的退耦處理,對dsp所需的16mhz有源晶振和cy7c68001用到的24mhz有源晶振要進行鋪銅處理。

        4 tms320vc5416對cy7c68001的操作

        cy7c68001有2個外部接口:

        (1)命令接口:用來訪問cy7c68001寄存器、endpoint0緩沖器及描述表;
        (2)fifo數據接口:用來訪問4個1kb的fifo中的數據。
        這兩個外部接口均可以通過同步或異步的方式進行訪問。在本系統中均采用異步的方式進行訪問的,命令口的命令字:


        ad:地址/數據選擇,為0時表示本操作為數據讀或寫,為1時表示本操作為地址寫;
        r/w:讀/寫操作選擇,為0時進行寫,為1時進行讀;
        d[5:0]:地址/數據,當ad=0時,d[3:0]為數據半字節,d[5:4]未用,命令字為8位,故命令字數據分二次讀出或寫入;當ad=1時,d[5:0]包含將要尋址的命令寄存器的地址。

        4.1 命令口的讀/寫操作

        系統中cy7c68001作為tms320vc5416的外設,占用tms320vc5416的i/o空間,地質為0x0007-0x0000。地址分配如下:fifo2,fifo4,fifo6,fifo8和命令口的地址分別為000,001,010,011,100,而地址101,110,111則保留。cy7c68001的地址線fifoadr[2:0]為100b時,選中cy7c68001的命令口。通過cy7c68001的命令口,可以訪問37個寄存器、endpoint0緩沖器(64個字節fifo)和描述表(500個字節fifo)等,如果將endpoint0緩沖器和描述表也看成是寄存器,那么單個命令口下內含了眾多的寄存器,對這些寄存器進行讀/寫訪問采用二次尋址方式,即首先通過命令口將要尋址寄存器子地址和操作類型(讀操作還是寫操作)寫入,然后再通過命令口將數據讀出或寫入相應的寄存器,寫入命令口的內容稱為命令字,命令字包含要尋址的寄存器的子地址,或是要寫入寄存器數據的高位4位或低4位,讀命令口必須在給命令口寫入命令字之后,所讀出的為相應寄存器的8位數據。在這里,對寄存器的操作均以8位數據寬度進行。

        4.1.1 tms320vc5416對cy7c68001寄存器的寫操作過程

        (1)將tms320vc5416對i/o空間訪問的等待周期設為7;
        (2)通過檢查系統狀態寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready線變高;

        (3)尋址cy7c68001命令口(最低3位地址必須為100b),將10xx,xxxxb寫命令字寫入命令寄存器(xx,xxxxb代表需尋址的寄存器的子地址);
        (4)通過檢查系統狀態寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready線變高;
        (5)尋址cy7c68001命令口(最低3位地址必須為100b),將0xxx,d7d6d5d4b數據高4位命令字寫入命令寄存器(d7d6d5d4b代表要寫入的數據的高4位);
        (6)通過檢查系統狀態寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready線變高;
        (7)尋址cy7c68001命令(最低3位地址必須為100b),將0xxx,d3d2d1d0b數據低4位命令字寫入命令寄存器(d3d2d1d0b代表要寫入的數據的低4位)。

        4.1.2 tms320vc5416對cy7c68001寄存器的讀操作過程

        (1)tms320vc5416對i/o空間訪問的等待周期設為7;
        (2)通過檢查系統狀態寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready線變高;
        (3)尋址cy7c68001命令口(最低3位地址必須為100b),將11xx,xxxxb讀命令字寫入命令寄存器(xx,xxxxb代表需尋址的寄存器的子地址);
        (4)等cy7c68001申請tms320vc5416的外部中斷xint2反;
        (5)尋址cy7c68001命令口(最低3位地址必須為100b),讀cy7c68001命令口。
        4.2 fifo數據接口的操作

        對數據接口的寫操作用到了sx2_fifowritesingle()函數,負責向usb的數據緩沖區中寫數據,由于這個寫程序是在主頻為160mhz時的設置,為了滿足數據保持時間最小為10ns,需要清空流水線,加入3個空操作nop,i/o系統的等待周期為2個;對數據接口讀操作用到了函數sx2_fiforeadsingle(),例如從端口4讀一個字節
        popm ah popm al pshm al pshm ah sub#1,a bc fifo_r3rd,aneq portr usbfifo4,*ar0 popm ah popm al b fiforeadexit
        另外,程序中用到了中斷函數int2_isr(),在讀周期,主機申請讀寄存器的值,此時產生中斷,從sx2讀進數據;

        5 usb的編程

        5.1 usb的初始化

        cy7c68001有e2prom自舉和通過dsp自舉2種自舉方式,在本系統中這兩種方式均可以,一般采用e2prom來進行usb的初始化,在e2prom中初始化的順序如下:
        0xc4通知ez_usb sx2有一個有效的e2prom存在;
        ifconfig 設置ifconfig寄存器,其函數為write_sx2reg();
        polar設置各個信號的極性,其中slow,slrd,slwr只能由e2prom來配置;
        descriptor 是否從e2prom中裝入初始化表。當值為0xc4時裝入,反之等待master裝入;
        descriptor length 這是兩個字節的空間,指示e2prom中descriptor的長度;
        descriptor data 描述表的內容,其函數為load_descriptors()。
        usb的編程主要分為2個部分,一是host方面驅動程序的編寫,一是有關dsp與usb數據與命令的交換,

        5.2 host端程序

        host端需要編寫usb設備驅動程序和應用程序。

        usb設備驅動程序主要是通過調用微軟的usbd.sys來實現pc機與usb總線的數據交換。因而usb設備驅動程序主要完成的功能如下:

        (1)對相應的usb設備建立設備驅動對象并完成對usb設備的初始化;
        (2)完成usb設備的即插即用功能;
        (3)完成usb設備電源的管理;
        (4)實現對usbd.sys的調用,完成對usb設備的控制與數據的交換;
        (5)實現對usb通訊措施的處理。

        usb設備應用程序主要用到以下幾個函數:

        opendriver()打開驅動程序;
        closedriver()關閉驅動程序;
        sx2getdevicedesc()獲取描述表;
        sx2getconfigdesc()獲取配置說明;
        sx2getpipeinfo()獲取接口信息;
        sx2sendvendorreq()向usb發送請求;
        sx2bulkdatatrans()在pc和usb間傳遞數據。

        5.3 tms320vc5416端程序

        tms320vc5416是通過其i/o口來完成cy7c68001的數據交換的,在這部分程序中主要完成以下功能:

        (1)完成對命令接口的讀與寫;
        (2)完成對fifo接口的讀與寫;
        (3)完成tms320vc5416對usb的自舉;
        (4)完成tms320vc5416與usb的控制命令的傳輸;
        (5)完成tms320vc5416與usb的各種方式的數據傳輸。

        6 結語

        本文以tms320vc5416為核心,利用cy7c68001實現了usb2.0設備接口協議,試驗證明該系統可以滿足高速信號處理的要求,并具有速度快和可靠性高等優點。




        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 兴文县| 宣城市| 光泽县| 唐海县| 南澳县| 繁峙县| 唐山市| 广安市| 临汾市| 厦门市| 古蔺县| 霍林郭勒市| 房山区| 临安市| 广东省| 揭西县| 合川市| 武鸣县| 新乡市| 普兰店市| 绥芬河市| 广灵县| 开远市| 泸溪县| 辽中县| 岐山县| 孝昌县| 高邑县| 花垣县| 阿克陶县| 尼木县| 洪江市| 永济市| 台前县| 乌什县| 佛教| 太和县| 平江县| 德保县| 贵港市| 綦江县|