<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 利用ST16C554D實(shí)現(xiàn)DSP多路串行通訊

          利用ST16C554D實(shí)現(xiàn)DSP多路串行通訊

          作者:付強(qiáng)文 張英敏 黎玉剛 時(shí)間:2005-03-23 來源: 收藏

          2004年11月A版

          本文引用地址:http://www.ex-cimer.com/article/4686.htm

          摘  要:    給出了DSP多路串行通信系統(tǒng)的構(gòu)成及相關(guān)程序代碼。
          關(guān)鍵詞:    DSP;串行通訊;ST16C554D;TMS320VC33
          引言
              DSP是數(shù)字信號(hào)處理理論與超大規(guī)模集成電路技術(shù)融合的結(jié)晶。目前,DSP技術(shù)正廣泛地應(yīng)用于通信、語音、圖像、航空航天、儀器儀表等領(lǐng)域,在推動(dòng)信息處理數(shù)字化方面發(fā)揮著越來越大的作用。隨著應(yīng)用領(lǐng)域越來越廣,應(yīng)用環(huán)境也越來越復(fù)雜,如何實(shí)現(xiàn)DSP與外設(shè)的可靠數(shù)據(jù)交換就變得至關(guān)重要。串行通訊成本低,結(jié)構(gòu)簡(jiǎn)單,控制方便,DSP和外設(shè)的通訊通常都采用這種方式。
              TMS320VC33是TI公司一種浮點(diǎn)DSP芯片,性價(jià)比高,指令執(zhí)行速度可達(dá)150 MFLOPS。但是為了不使其強(qiáng)大的計(jì)算能力受到影響,TMS320VC33僅提供了一個(gè)串口,要實(shí)現(xiàn)多路串行通訊,就必須通過外部器件來擴(kuò)展。

          ST16C554D
              ST16C554D是EXAR公司生產(chǎn)的通用異步通信芯片,可支持4路獨(dú)立的串行通訊。芯片的每路傳輸和接收單元都提供了獨(dú)立的串并轉(zhuǎn)換和并串轉(zhuǎn)換,以實(shí)現(xiàn)串行異步數(shù)據(jù)接收同步。串行數(shù)據(jù)流的同步通過添加起始位和停止位實(shí)現(xiàn),而數(shù)據(jù)的完整性通過校驗(yàn)位來確認(rèn),在同一塊芯片上要集成這種多路串行通訊是較為復(fù)雜的,ST16C554D采用了先進(jìn)的CMOS處理技術(shù),達(dá)到了低損耗和高速率的要求。
              與普通處理器相比,ST16C554D提供了16字節(jié)的接收和發(fā)送FIFO,這就允許外部CPU在給定的時(shí)間內(nèi)處理更多的在線任務(wù),并減少了全局的UART中斷服務(wù)時(shí)間。
          另外,ST16C554D將16C554D和68C554D的兩種封裝集成在同一個(gè)芯片上,使用方便。16模式用于與INTEL系列芯片接口,而68模式用于與MOTOROLA和其他通用接口。
          ST16C554D特性有:

          TMS320VC33多路通訊系統(tǒng)的實(shí)現(xiàn)
              圖1是某捷聯(lián)慣性導(dǎo)航系統(tǒng)的部分原理框圖,通過ST16C554D實(shí)現(xiàn)了DSP芯片TMS320VC33的多路串行通訊。圖中三個(gè)陀螺為光纖陀螺,陀螺數(shù)據(jù)采用RS-422串行輸出,輸出周期為1ms。
              圖中,ST16C554D的讀寫信號(hào)和通道片選由DSP的選通信號(hào)STRB、地址信號(hào)A3-A6及讀寫信號(hào)R/W產(chǎn)生。為了使整個(gè)系統(tǒng)成為完全可編程系統(tǒng),采用了一片可編程邏輯器件GAL20V8B來實(shí)現(xiàn)邏輯控制,從而增加了系統(tǒng)的靈活性。GAL芯片采用ABEL語言編程。ST16C554D譯碼電路的邏輯方程如下:
          EQUATIONS
                !CSA=!PAGE3&!AR6&!AR5&!AR4!&!AR3;
                !CSB=!PAGE3&!AR6&!AR5&!AR4&AR3;


                !CSC=!PAGE3&!AR6&!AR5&AR4&!AR3;
                !CSD=!PAGE3&!AR6&!AR5&AR4&AR3;
                !IOR=!PAGE3&RW&!STRB;
                !IOW=!PAGE3&!RW&!STRB;
              本系統(tǒng)中,ST16C554D的通道D用作監(jiān)控口和PC機(jī)接連,通道A、B、C的接收端用于接收陀螺數(shù)據(jù),通道C的發(fā)送端也與PC機(jī)相連,可在通道D的監(jiān)控下高速發(fā)送各陀螺的原始數(shù)據(jù)。例如,PC機(jī)向通道D發(fā)送指令“$A?!保珼SP接收到該指令后將X陀螺的原始采樣數(shù)據(jù)從通道C高速發(fā)送至PC機(jī)。
              通道D采用RS-232方式,波特率為19.2Kbps,用MAX232實(shí)現(xiàn)電平轉(zhuǎn)換后可直接和PC機(jī)串口連接。通道A、B、C采用RS-422方式,波特率為460.8Kbps,可用MAX3095芯片做接收電平轉(zhuǎn)換,用MAX3045芯片做發(fā)送電平驅(qū)動(dòng)??紤]通道C發(fā)送端要和PC機(jī)相連,而PC機(jī)串口僅支持RS-232協(xié)議,故系統(tǒng)使用了PCI1601轉(zhuǎn)換卡。PCI1601帶有兩個(gè)9針的RS-422串口,采用PCI總線和PC機(jī)相連,安裝驅(qū)動(dòng)后使用方法和普通PC機(jī)串口一致,波特率可達(dá)921.6Kbps。
              在串行通訊中,為了保證傳輸可靠性和數(shù)據(jù)實(shí)時(shí)性,發(fā)送常采用查詢方式,接收常采用中斷方式。但在本系統(tǒng)中,TMS320VC33要執(zhí)行導(dǎo)航解算程序,若4路接收均采用中斷方式會(huì)嚴(yán)重影響它的計(jì)算能力??紤]A、B、C口陀螺數(shù)據(jù)爆發(fā)周期固定為1ms,且D口由PC機(jī)發(fā)來的監(jiān)控指令數(shù)據(jù)量不大,接收可采用定時(shí)查詢方式。
              系統(tǒng)中三個(gè)陀螺通過1KHz時(shí)鐘實(shí)現(xiàn)同步。陀螺數(shù)據(jù)每幀包含7個(gè)字節(jié),傳輸波特率460.8Kbps,采用偶校驗(yàn),8位數(shù)據(jù)位,1位停止位,故可以算出每次傳輸時(shí)間需要為(8+3)*7/460.8=0.167ms。所以系統(tǒng)將1KHz時(shí)鐘經(jīng)SN54HC174J芯片延時(shí)0.2ms后作為TMS320VC33外接的定時(shí)時(shí)鐘。這樣,TMS320VC33在INT0產(chǎn)生1ms中斷時(shí),數(shù)據(jù)已傳輸完成,可以在中斷服務(wù)函數(shù)中將所有通道的寄存器查詢一遍并讀空數(shù)據(jù)。由于ST16C554D的每路串口有16字長(zhǎng)的接收FIFO,該方法不會(huì)產(chǎn)生數(shù)據(jù)丟失,并且延遲很小。

          程序設(shè)計(jì)
              在異步串行通訊中,收發(fā)雙方必須事先規(guī)定兩件事:一是字符格式,即規(guī)定傳送中每個(gè)字符的具體格式;二是波特率。這些規(guī)定是通過設(shè)置相關(guān)寄存器來實(shí)現(xiàn)的。
              本系統(tǒng)中,ST16C554D外接晶振7.3728MHz,基地址為0xC00000,由TMS320VC33編程實(shí)現(xiàn)它的初始化設(shè)置。TMS320VC33的程序在Code Composer C3X 下用C語言編寫,下面僅給出通道C的初始化代碼及收發(fā)程序,其他通道與此類似。
          #define C_rx_buf_size 100        //接收緩沖區(qū)大小
          #define C_tx_buf_size 100        //發(fā)送緩沖區(qū)大小
          unsigned char C_rx_buf[C_rx_buf_size];     //接收緩沖區(qū)
          unsigned char C_tx_buf[C_tx_buf_size];     //發(fā)送緩沖區(qū)
          unsigned int p_C_rx_w=0;         //接收緩沖區(qū)寫指針
          unsigned int p_C_tx_w=0, p_C_tx_r=0;    //發(fā)送緩沖區(qū)讀寫指針
          volatile int *Add_C_RHR = (volatile int *)0xC00010;     //C口基地址
          volatile int *Add_C_THR = (volatile int *)0xC00010;
          volatile int *Add_C_DLL = (volatile int *)0xC00010;
          volatile int *Add_C_IER = (volatile int *)0xC00011;
          volatile int *Add_C_DLM = (volatile int *)0xC00011;
          volatile int *Add_C_ISR = (volatile int *)0xC00012;
          volatile int *Add_C_FCR = (volatile int *)0xC00012;
          volatile int *Add_C_LCR = (volatile int *)0xC00013;
          volatile int *Add_C_MCR = (volatile int *)0xC00014;
          volatile int *Add_C_LSR = (volatile int *)0xC00015;
          volatile int *Add_C_MSR = (volatile int *)0xC00016;
          void init_ST16C554D_C( )     //串口C口的初始化函數(shù)
          {    *Add_C_LCR = 0x80;    //使能波特率因子寄存器
              *Add_C_DLM = 0x00;        
               *Add_C_DLL = 0x01;    //設(shè)置波特率為460800
                             (主頻7.3728M)
              *Add_C_LCR = 0x1b;    //選擇字長(zhǎng)為8位,停止位為
                              1位,偶校驗(yàn)
              *Add_C_FCR = 0x07;    //選擇FIFO MODE
              *Add_C_IER = 0x00;    //禁止中斷
              *Add_C_MCR = 0x08;    //選擇NORMAL MODE
          }
          void Read_ST16C554D_C( )//串口C口的接收函數(shù),置于INT0中斷函數(shù)中
          {    while( (*Add_C_LSR) & 0x01 )      //判C口線狀態(tài)寄存器
               {      *( C_rx_buf + p_C_rx_w) = (*Add_C_RHR) & 0x0ff;                        //接收數(shù)據(jù)送接收緩沖區(qū)
                     p_C_rx_w ++;        //接收緩沖區(qū)指針加1
                     if(p_C_rx_w == C_rx_buf_size)    p_C_rx_w = 0;                        //接收緩沖區(qū)指針回零
                }
          }
          void C_tx_handle()        //串口C口的發(fā)送函數(shù)
          {    while(p_C_tx_r != p_C_tx_w)
              {    if( *Add_C_LSR & 0x20 )    //判C口線狀態(tài)寄存器
                  {   *Add_C_THR = *(C_tx_buf + p_C_tx_r);                    //發(fā)送
                  p_C_tx_r ++;                                 //發(fā)送緩沖區(qū)指針加1
                  if( p_C_tx_r == C_tx_buf_size )    p_C_tx_r = 0;                    //發(fā)送緩沖區(qū)指針回零
                  }
              }
          }

          結(jié)語
          在筆者開發(fā)的光纖陀螺捷聯(lián)式慣性導(dǎo)航系統(tǒng)中,通過使用ST16C554D擴(kuò)展了4路串口,電路簡(jiǎn)單,傳輸速率高,延時(shí)小,并且極大地減輕了主控計(jì)算機(jī)TMS320VC33的負(fù)擔(dān)。本設(shè)計(jì),在通訊中各通道長(zhǎng)期工作正常,完全達(dá)到了預(yù)期目的。

          參考文獻(xiàn):
          1.  ST16C554D data manual. EXAR Corporation
          2.    TMS320VC33 Digital Signal Processor. Texas Instruments.2002

          圖1 多路通訊原理框圖

          數(shù)字通信相關(guān)文章:數(shù)字通信原理


          通信相關(guān)文章:通信原理




          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();