找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15602|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

F2812DSP的最小系統(tǒng)設(shè)計(jì)報(bào)告

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:314510 發(fā)表于 2018-4-23 15:26 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
摘要:本文主要介紹了基于TI公司生產(chǎn)的TMS320F2812DSP最小系統(tǒng)設(shè)計(jì)。該最小系統(tǒng)主要包括電源、時(shí)鐘、復(fù)位、外擴(kuò)SRAM以及JTAG接口的設(shè)計(jì),為實(shí)現(xiàn)基本的程序演示,還增加了外部中斷,基本輸入輸出、以及異步串行通信模塊。                                                                                                         


1引言
DSP由于運(yùn)算速度快,具有可編程特性及接口靈活的特點(diǎn),使得它在電子產(chǎn)品的研制中,發(fā)揮著越來越大的作用。采用DSP器件來實(shí)現(xiàn)數(shù)字信號處理系統(tǒng)更是成了當(dāng)前的發(fā)展趨勢。如何以最短的開發(fā)周期,開發(fā)出適于自己應(yīng)用的高性能低成本的DSP板,己經(jīng)成為廣大DSP工程技術(shù)人員共同關(guān)心的問題。                                                
DSP最小系統(tǒng)板硬件設(shè)計(jì)是本文的主要任務(wù)。在介紹TMS320F2812基本特點(diǎn)的基礎(chǔ)上,運(yùn)用DSP技術(shù)和硬件電路設(shè)計(jì)知識進(jìn)行了DSP最小系統(tǒng)設(shè)計(jì),包括電源設(shè)計(jì)、復(fù)位電路設(shè)計(jì)、時(shí)鐘電路設(shè)計(jì)、外擴(kuò)存儲器設(shè)計(jì)、JTAG接口設(shè)計(jì)等,為實(shí)現(xiàn)基本的程序演示,還增加了外部中斷,基本輸入輸出、以及異步串行通信模塊。                              
本文使用Altium Designer Summer 09設(shè)計(jì)電路板,繪制電路原理圖,并對最小系統(tǒng)的高速PCB板進(jìn)行了設(shè)計(jì)。                                       
最后,以自行設(shè)計(jì)的高速 DSP板為硬件平臺,使用CCS3.3軟件,編寫測試程序。經(jīng)過多次軟硬件調(diào)試和測試,驗(yàn)證了DSP最小系統(tǒng)板卡能正常運(yùn)行,能滿足基本信號處理的要求。                       
2硬件設(shè)計(jì)                                   
2.1電源設(shè)計(jì)                                    
在F2812中對上電順序有嚴(yán)格的要求,而普通的線性穩(wěn)壓芯片達(dá)不到要求,所以本文采用了專門的電源管理芯片TPS767D318。TPS767D318為雙通道輸出的可控電源轉(zhuǎn)換芯片,可以通過控制使能端從而控制電壓的輸出順序。TPS767D318的具體硬件設(shè)計(jì)如圖1所示,F(xiàn)2812的供電電壓為3.3V和1.8V,上電順序先后為3.3V、1.8V。設(shè)計(jì)的基本思想是,先使能3.3V輸出,然后利用場效應(yīng)管BSS138驅(qū)動1.8V電的使能端,是芯片產(chǎn)生1.8V電壓,從而實(shí)現(xiàn)上電順序的控制。其中的+5V電壓為外部電源提供。
圖1 TPS767D318設(shè)計(jì)原理圖                                                     
2.2時(shí)鐘電路和復(fù)位電路設(shè)計(jì)
時(shí)鐘電路是時(shí)序邏輯電路最基本的組成部分,須要為其提供時(shí)鐘源,F(xiàn)2812才能正常工作,F(xiàn)2812內(nèi)部有倍頻的PLL電路,在此我們使能鎖相環(huán),并且為了提高系統(tǒng)的抗干擾能力,本文使用30M有源晶振為系統(tǒng)提供時(shí)鐘信號,通過PLL倍頻至150MHz,外部有源時(shí)鐘電路如圖2所示。
通常DSP正常工作時(shí)還需要一個復(fù)位電路,本文不采用按鍵復(fù)位,而是采用更高可靠性的復(fù)位芯片IMP809L,當(dāng)外部供電電壓下降至2.7V時(shí),系統(tǒng)就會產(chǎn)生復(fù)位,復(fù)位電路如圖3所示。                           
                              
圖2  時(shí)鐘電路                 圖3  復(fù)位電路                                
2.3外擴(kuò)SRAM設(shè)計(jì)
添加SRAM是為了增加系統(tǒng)的存儲空間,在F2812中內(nèi)部存儲空間很小,許多程序要求有較大的存儲空間,所以應(yīng)在電氣平臺中添加SRAM。F2812中為用戶提供了眾多外部存儲空間,最多可擴(kuò)展1M*16b的存儲空間。                              
SRAM為靜態(tài)隨機(jī)存儲器,一般由存儲矩陣、地址譯碼器和讀寫控制電路組成。本文采用IS61LV12816 SRAM, IS61LV12816有16根數(shù)據(jù)總線和17根地址總線,最大存儲空間為128K*16b。
在F2812Z中,可用的外部存儲空間為Zone0、Zone1、Zone2、Zone6,其中Zone0、Zone1共用一個片選信號線(44腳),Zone2的片選信號是(88腳),Zone6的片選信號是(133腳),本文將Zone2分配給SRAM,在硬件設(shè)計(jì)上,將(88腳)連接到IS61LV12816的片選信號()上,同時(shí)將DSP的讀使能信號線和寫使能信號線分別接到IS61LV12816的讀、寫使能信號線上,實(shí)現(xiàn)對IS61LV12816的讀寫控制。DSP可選配置為微計(jì)算機(jī)模式或者微處理器模式,IS61LV12816設(shè)計(jì)電路如圖4所示。                        
                           
圖4  IS61LV12816設(shè)計(jì)原理圖                                   
2.4JTAG接口電路設(shè)計(jì)                                    
為方便程序的調(diào)試和下載,須要一個JTAG接口,如圖5所示。在程序調(diào)試時(shí),須要配合CCS編譯環(huán)境以及XD510/XD560仿真器配合使用。         
                        
圖5  JTAG接口電路                                 
2.5RS-232(串口)設(shè)計(jì)                                 
串行通信接口(SCI)是一個采用發(fā)送、接收雙線制的異步串行通信接口,即通常所說的UART口,它支持16級的接收發(fā)送FIFO,從而降低了串口通信時(shí)CPU 的開銷。SCI模塊支持CPU和其它使用非歸零制(NRZ)的外圍設(shè)備之間的數(shù)字通信。在不使用FIFO的情況下,SCI接收器和發(fā)送器采用雙級緩沖模式,此時(shí)SCI接收器和發(fā)送器都有獨(dú)立的使能和中斷位,它們可以被設(shè)置成獨(dú)立操作或者同時(shí)進(jìn)行全雙工通信模式。                             
在F2812中有兩路串行通信接口(SCI口),本文將SCIB口設(shè)計(jì)成RS-232口,主要測試與上位機(jī)進(jìn)行通信的功能,電平轉(zhuǎn)換芯片采用美信公司的MAX3232。與上位機(jī)通信的接口采用通用的串口DB9,串口通信電路如圖6所示。                          
                                
圖6  RS-232硬件設(shè)計(jì)電路圖                                                                  
2.6GPIO流水燈設(shè)計(jì)                                            
為測試通用輸入輸出,本文設(shè)計(jì)了流水燈電路,首先是一個燈亮、滅,然后兩個燈亮、滅,如此,燈的數(shù)目依次增加,直到8個燈全部點(diǎn)亮,最終滅燈。如圖7所示。                                            
圖7  流水燈設(shè)計(jì)電路圖                                          
2.7外部中斷設(shè)計(jì)                                            
為測試外部中斷,本文設(shè)計(jì)了按鍵形式的外部中斷源,使用F2812 XINT1中斷引腳,如圖6所示。                                                            
                                      
圖8  外部中斷                                                   
3軟件(測試程序)設(shè)計(jì)  
在程序測試部分本文實(shí)現(xiàn)這樣的功能,將上位機(jī)與F2812通過串口相連,上位機(jī)可以利用串口調(diào)試助手發(fā)送數(shù)據(jù)給F2812,當(dāng)F2812接收到的數(shù)據(jù)為‘a(chǎn)’時(shí),開啟流水燈;每按一次按鍵,F(xiàn)2812向上位機(jī)發(fā)送一個數(shù)據(jù)‘s’,利用串口調(diào)試助手可以看到接收的數(shù)據(jù),并且關(guān)閉流水燈。
3.1系統(tǒng)設(shè)置總程序                                          
  1. /*------------------------------------------------------------**                  
  2. ** 文 件 名:MinSys.c                      **                  
  3. ** 處 理 器:DSP281x                      **              
  4. ** 版本: DSP281x C/C++ Header Files V1.20   **              
  5. ** Boot 配置:boot to Zone2                  **               
  6. ** 功能描述:F2812最小系統(tǒng)測試            **               
  7. ** 修訂日期:2011-06-12                    **                  
  8. ** 備  注:外部中斷、定時(shí)、GPIO、SCI       **               
  9. **------------------------------------------------------------*/      
  10. #include "DSP281x_Device.h"     // DSP281x頭文件                       
  11. #include "DSP281x_Examples.h"   //DSP281x頭文件                           
  12. void InitGpio(void);                                            //初始化GPIO,復(fù)用,方向                     
  13. void IsrAddr(void);                                             //定義中斷服務(wù)程序的入口地址            
  14. void PieIntEnable(void);                                  //使能PIE級中斷               
  15. void scib_init(void);                        //初始化SCIB                     
  16. void scib_send(int a);                        //發(fā)送數(shù)據(jù)                 
  17. interrupt void cpu_timer0_isr(void); // TIMER0中斷                     
  18. interrupt void xint1_isr(void);                 //XINT1中斷                     
  19. interrupt void scibRxFifoIsr(void);  //接收中斷            
  20. Uint16 Count=0;
  21. Uint16 Light=0x00ff;
  22. Uint16 recveddata=0;
  23. void main(void)                                                  
  24. {                                                   
  25. /*初始化系統(tǒng)控制:*/                                      
  26.               InitSysCtrl();                                    //PLL,看門狗,使能外設(shè)時(shí)鐘                       
  27. /* 初始化GPIO: */                                    
  28.               InitGpio();                                     //引腳復(fù)用,方向                        
  29. /* 禁止全局中斷,并初始化PIE向量表: */                    
  30.               DINT;                  //禁止全局中斷                     
  31.               InitPieCtrl();                                             //初始化PIE控制寄存器,默認(rèn)狀態(tài)為禁止PIE中斷,清除中斷標(biāo)志位         
  32.     IER=0x0000;                                   //禁止CPU中斷                     
  33. IFR=0x0000;            //清除中斷標(biāo)志位                  
  34.               InitPieVectTable();                               //初始化PIE向量表指針,并使能PIE                                
  35.     IsrAddr();                                     //定義中斷服務(wù)程序的入口地址                        
  36. /*設(shè)置定時(shí)器*/                                                         
  37. InitCpuTimers();                               //初始化CPU定時(shí)器                        
  38. ConfigCpuTimer(&CpuTimer0, 150, 1000000); //定時(shí)1s
  39. /* 初始化外設(shè)SCIB*/                                             
  40. scib_init();                                                
  41. /*使能中斷*/                                                      
  42.               IER|=M_INT1|M_INT9;    //使能CPU級中斷                           
  43.     PieIntEnable();                                //使能PIE級中斷                    
  44.               EINT;                                       // 使能全局中斷                                       
  45.     ERTM;                                                           // 使能全局實(shí)時(shí)中斷,用于DBGM                             
  46. /* IDLE 循環(huán): */                                                   
  47.    for(;;);                                             
  48. }                                                               

  49. void InitGpio(void)                                                      
  50. {                                                            
  51.    EALLOW;                                                        
  52. GpioMuxRegs.GPGMUX.bit.SCITXDB_GPIOG4=1;                            //使能SCIBTX復(fù)用功能                  
  53. GpioMuxRegs.GPGMUX.bit.SCIRXDB_GPIOG5=1;                            //使能SCIBRX復(fù)用功能               
  54. GpioMuxRegs.GPEMUX.bit.XINT1_XBIO_GPIOE0=1;               //使能XINT1復(fù)用功能                                
  55. GpioMuxRegs.GPBDIR.all=0xFFFF;                              //GPIOB設(shè)置為輸出模式                  
  56.    EDIS;                                                                              
  57. }                                                               
  58. void  IsrAddr(void)                                             
  59. {                                                                       
  60. EALLOW;                                                  
  61. PieVectTable.XINT1=&xint1_isr;                                                                      //外部中斷1                             
  62. PieVectTable.RXBINT=&scibRxFifoIsr;                                                        //SCIB接收中斷                     
  63. PieVectTable.TINT0=&cpu_timer0_isr;                                                        //CPU定時(shí)器0中斷                 
  64. EDIS;                                                           
  65. }                                                         
  66. void PieIntEnable(void)                                          
  67. {                                                         
  68.    PieCtrlRegs.PIEIER1.bit.INTx7=1;                                                         //CPU定時(shí)器0         
  69.    PieCtrlRegs.PIEIER1.bit.INTx4=1;                                                                      //外部中斷1         
  70.    PieCtrlRegs.PIEIER9.bit.INTx3=1;                                                                      // SCIBRX            
  71. }                                                      
  72. 3.2              外部中斷、定時(shí)、流水燈測試程序                                 
  73. interrupt void xint1_isr(void)                                
  74. {                                                                       
  75.    scib_send('s');                                                                                                          //發(fā)送數(shù)據(jù)‘s’                                          
  76.    StopCpuTimer0();                                                                                                      //停止定時(shí)器                                      
  77.    GpioDataRegs.GPBDAT.all=0;                                                                        //燈滅                             
  78.    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;                  
  79. }

  80. //燈的數(shù)目從1到8交替亮滅                                                                     
  81. interrupt void cpu_timer0_isr(void)                                                            
  82. {                                                                    
  83.    Count++;                                                    //計(jì)數(shù)器加1                             
  84.    GpioDataRegs.GPBDAT.all=Light; //燈亮                  
  85.    Light<<=1;                                                  //亮燈循環(huán)左移依次點(diǎn)亮
  86.    Delay_s(100);                                                //延時(shí)
  87.    GpioDataRegs.GPBDAT.all=Light&0xffff;                             
  88.    Count%=8;                                                  //循環(huán)周期到,計(jì)數(shù)器清零                                          
  89.    if(Count==0)                                                
  90.    {                                                                 
  91.               Light=0xFFFF;                                             //下一周期循環(huán)開始                                 
  92.    }                                                                        
  93.    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;                                          
  94. }  
  95. //延時(shí)程序
  96. void Delay_s(int n)
  97. {
  98.               for(int j=0;j<n;j++)
  99.               {
  100.                             for(int k=0;k<10000;k++)
  101.                             ;
  102.               }
  103. }                                                                             
  104. 3.3              異步串行通信測試程序                                    
  105. void scib_init(void)                                                
  106. {                                                                                
  107.                 ScibRegs.SCIFFTX.all=0xE040;//允許接收,使能FIFO,沒有FIFO中斷,清除TXFIFINT                 
  108.               ScibRegs.SCIFFRX.all=0x2021;//使能FIFO接收,清除RXFFIN                              
  109.               ScibRegs.SCIFFCT.all=0x0000;//禁止波特率校驗(yàn)                       
  110.               ScibRegs.SCICCR.all=0x0007;//1個停止位,無校驗(yàn),禁止自測試,空閑地址模式,字長8位              
  111.               ScibRegs.SCICTL1.all=0x0003; //復(fù)位                       
  112.               ScibRegs.SCICTL2.all=0x0003;                           
  113.               ScibRegs.SCIHBAUD=0x0001; //設(shè)定波特率                        
  114. ScibRegs.SCILBAUD=0x00E7; //為 9600bps               
  115.     ScibRegs.SCICTL1.all=0x0023; //退出RESET                       
  116. }                                                            
  117. interrupt void scibRxFifoIsr(void)                                 
  118. {                                                         
  119.               recveddata=ScibRegs.SCIRXBUF.all;//從緩沖區(qū)接收數(shù)據(jù)           
  120.               recveddata&=0xFF;  //接收數(shù)據(jù)高8位清零               
  121.     if(recveddata=='a')   //如果接收到的數(shù)據(jù)為‘a(chǎn)’                     
  122.     {                                                
  123.                             Light=0xFFFF;                                            
  124.         StartCpuTimer0();                                                                      //開定時(shí)器,流水燈工作           
  125.     }                                                      
  126.               ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1;              ScibRegs.SCIFFRX.bit.RXFFINTCLR=1;                    
  127.               PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;                                       
  128. }                                                                 
  129. void scib_send(int a)                                                        
  130. {                                                            
  131.               ScibRegs.SCITXBUF=(a&0xFF);                                          //向發(fā)送緩沖區(qū)寫數(shù)據(jù)              
  132.               while(ScibRegs.SCICTL2.bit.TXRDY!=1);//等待發(fā)送成功                             
  133. }                                                                     
復(fù)制代碼

4   結(jié)束語                                             
本文是在學(xué)習(xí)了DSP及其在控制中的應(yīng)用課程之后,對F2812最小系統(tǒng)的設(shè)計(jì),根據(jù)以往的經(jīng)驗(yàn)對系統(tǒng)進(jìn)行了定時(shí)、中斷、GPIO以及串行通信的測試,今后會在DSP的學(xué)習(xí)和設(shè)計(jì)中不斷努力,不斷總結(jié)。

完整的Word格式文檔51黑下載地址:
F2812DSP的最小系統(tǒng)設(shè)計(jì).doc (88.11 KB, 下載次數(shù): 109)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:704506 發(fā)表于 2020-3-8 12:54 | 只看該作者
謝謝鹵煮
回復(fù)

使用道具 舉報(bào)

板凳
ID:718961 發(fā)表于 2020-3-30 17:51 | 只看該作者
謝謝鹵煮
回復(fù)

使用道具 舉報(bào)

地板
ID:783467 發(fā)表于 2020-11-1 21:03 | 只看該作者
謝謝樓主對我?guī)椭罅?br />
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表