新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > TMS320C3X串口擴展技術

        TMS320C3X串口擴展技術

        作者: 時間:2006-05-07 來源:網絡 收藏

        摘要:介紹了TMS320C3X 串口的一種擴展方法,給出該接口電路的Verilog HDL實現。該接口電路已被作者應用到實際系統中,仿真和實踐證明該電路穩定可靠,具有一定的應用價值。

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

        關鍵詞:器 硬件描述語言 接口電路

        TMS320C3X是TI公司生產的第三代器,目前已相繼推出C30、C31、C32和VC33等四種類型,由于其性價比高而被廣泛應用于各個領域中。

        TMS320C3X是一種32bit的浮點,其程序、數據和外設地址都映射在同一存儲空間,并有豐富的尋址方式和較大的尋址空間,因此對外設的訪問非常靈活方便。但在實際應用中往往也要考慮一些不利因素:一是外部總線速度高、地址線寬,因此增加外對接口電路的時序要求較高,且電路連接較復雜;二是頻繁的外設訪問操作易產生流水線沖突而影響整體性能。的串口有較強的設備管理能力,與外設連接也很簡單,因此成為DSP與低速外設交換數據的首選。但在TMS320C3X系列中,除TMS320C30提供兩個串口外,其它幾種芯片都只有一個串口,在很多情況下限制了這些芯片的進一步使用。本文針對C3X串口的特點,以TMS320C3X與TLC3204X連接為例,設計了一種串口擴展方法。

        1 TMS320C3X與TLC3204X連接簡介

        TLC3204X是TI公司生產的話帶模數接口芯片(AIC),可與TMS320C3X等多種DSP芯片的串口直接相連,其A/D、D/A轉換精度為14bit,按16bit方式傳送,其中兩位用于芯片控制和啟動輔助通信[1]。圖1是TLC3204X與TMS320C3X串口的連接圖[2]。AIC與DSP通過DX和DR交換數據,AIC的主時鐘信號(MCLK)由DSP的定時器0提供,而AIC的移位脈沖(SCLK)作為串口的發送時鐘(CLKX)和接收時鐘(CLKR),發送和接收幀同步信號分別由AIC的FSX和FSR提供。DSP串口以16位變速傳送方式工作,AIC按字方式傳送數據。

        2 TMS320C3X串口擴展原理

        一般而言,外設數據字長較短,而TMS320C3X串口數據字長可靈活配置。利用這一特點,只要增設少量的外部電路,就能在現有基礎上擴展接口。在本例中,TLC3204X數據是16bit字長,因此只要將TMS320C3X串口設定為32bit傳送方式,每個TLC3204X各點用16bit,就能將該串口一分二。圖2為TMS320C3X與兩片TLC3204X的連接示意圖,其接口電路的設計可分為發送和接收兩部分的設計。

        2.1 發送接口電路

        該接口應完成兩個任務。一是接收來自TMS320C3X串口的32bit數據,由TMS320C3X提供移位脈沖CLKX,幀同步信號(FSX)由接口電路提供,其時序如圖3所示。二是將32bit數據會解為兩個16bit數據,然后再轉送到兩個TLC3204X芯片,由TLC3204X芯片提供發送時鐘SCLK和幀同步信號FSX以及完成信號EODX。傳送時序如圖4所示。

        2.2 接收接口電路

        該接口電路是發送接口電路的逆過程,其時序如圖5和圖6所示。

        3 接口電路的實現

        Verilog HDL[3]描述硬件單元的結構簡單且易讀,是當前最流行和通用的兩種硬件描述語言之一,得到眾多EDA工具的支持,因此利用該語言進行電路設計可以節省開發成本并縮短開發周期。

        3.1 接口電路的頂層Verilog HDL描述

        module DSP_TLC(SCLK1,DX1,FSX1,EODX1,DR1,FSR1,

        EODR1,SCLK0,DX0,FSX0,EODX0,DR0,FSR0,EODR0,

        CLKX,DX,FSX,DR,FSR,RESET);

        input FSX1,EODX1,FSX0,EODX0,DX,CLKX,RESET;

        output FSX,DX1,EX0;

        input DR1,SCLK1,FSR1,EODR1,DR0,SCLK0,FSR0, EODR0;

        output FSR,DR;

        Transmit TRA(DX1,SCLK1,FSX1,EODX1,DX0,SCLK0,

        FSX0,EODX0,DX,CLKX,FSX,RESET);

        Receive REC(DR1,SCLK1,FSR1,EODR1,DR0,SCLK0,

        FSR0,EODR0,DR,CLKX,FSR,FESET);

        Endmodule

        3.2 發送接口電路的Verilog HDL描述

        module Transmit(DX1, SCLK1,FSX1,EODX1,DX0,

        SCLK0,FSX0,EODX0,DX,CLKX,FSX,RESET);

        input SCLK1,FSX1,EODX1,SCLK0,FSX0,EODX0;

        input DX,CLKX,RESET;

        output FSX,DX1,DX0;

        reg [31:0] tmp_DX,temp_DX;

        reg [1:0] tmp_EODX;

        reg [4:0] DX_count;

        assign DX1=temp_DX[31];

        assign DX0=temp_DX[15];

        assign FSX=(tmp_EODX = =2'b11)? 1'b0:1'b1;

        always @(negedeg CLKX or negedge RESET)

        begin

        if (RESET= =1'b0)

        begin

        tmp_DX =32'b0;

        tmp_EODX =2'b0;

        DX_count =5'b0;

        end

        else

        begin

        if (EODX1 = =1'60)tmp_EODX[1] =1'b1;

        if (EODX0 = = 1'b0)tmp_EODX[0] =1'b1;

        if (DX_count = =5'b11111)tmp_EODX =2'b0;

        if (FSX = =1'b0)

        begin

        tmp_DX[0] =DX;

        tmp_DX[31:1] =tmp_DX[30:0];

        DX_count =DX_count +1;

        end

        else

        DX_count =5'b0;

        end

        end

        always @(posedge SCLK1)

        begin

        if (FSX1 = =1'b0)

        temp_DX[31:17] =temp_DX[30:16];

        else

        temp_DX[31:16] =tmp_DX[31:16];

        end

        always @(posedge SCLK0)

        begin

        if (FSX0 = =1'b0)

        temp_DX[15:1] =temp_DX[14:0];

        else

        temp_DX[15:0] =tmp_DX[15:0];

        end

        endmodeule

        3.3 接收接口電路的Verilog HDL描述

        module Receive(DR1,SCLK1,FSR1,EODR1,DR0,SCLK0,FSR0,EODR0,DR,CLKR,FSR,RESET);

        input DR1,SCLK1,FSR1,EODR1,DR0,SCLK0,FSR0,EODR0;

        input CLKR,RESET;

        output FSR,DR;

        reg [31:0] tmp_DR,temp_DR;

        reg [1:0] tmp_EODR;

        reg [4:0] DR_count;

        assign DR=(FSR = =1'b0) ? tmp_DR[31]:1'bz;

        assign FSR=(tmp_EODR = =2'b11)?1'b0:1'b1;

        always @(posedge CLKR or negedge RESET)

        begin

        if (RESET = =1'b0)

        begin

        tmp_DR =32'b0;

        tmp_EODR =2'b0;

        DR_count =5'b0;

        end

        else

        begin

        if (EODR1= =1'b0) tmp_EODR[1] =1'b1;

        if (DR_count = =5'b11111) tmp_EODR =2'b0;

        if (FSR = =1'b0)

        begin

        tmp_DR[31:1] = tmp_DR[30:0];

        DR_count =DR_count +1;

        end

        else

        begin

        DR_count =5'b0;

        tmp_DR = temp_DR;

        end

        end

        end

        always @(negedge SCLK1)

        begin

        if (FSR1= =1'b0)

        begin

        temp_DR[16] =DR1;

        temp_DR[31:17] =temp_DR[30:16];

        end

        end

        always @(negedge SCLK0)

        begin

        if (FSR0 = 1'b0)

        begin

        temp_DR[0] =DR0;

        temp_DR[15:1] = temp_DR[14:0];

        end

        end

        endmodule

        本文介紹了一種TMS320C3X串口擴展技術,并用Verilog VDL語言進行描述,利用中小容量的CPLD或FPGA就有實現該接口功能。該電路已被作者應用到實際系統中,仿真和實踐證明該接口穩定可靠,具有定的應用價值。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 来安县| 舒城县| 新巴尔虎左旗| 渑池县| 祥云县| 平潭县| 措勤县| 波密县| 石河子市| 五常市| 浦北县| 隆昌县| 崇州市| 新邵县| 阳江市| 瑞安市| 怀仁县| 漾濞| 象州县| 永顺县| 长葛市| 尼玛县| 遂平县| 保定市| 博罗县| 盐山县| 京山县| 临夏市| 龙游县| 岳阳市| 和静县| 白山市| 青岛市| 夏河县| 深泽县| 高尔夫| 灵武市| 葵青区| 玉门市| 达日县| 芦山县|