久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15456|回復: 3
收起左側

F2812DSP的最小系統設計報告

[復制鏈接]
ID:314510 發表于 2018-4-23 15:26 | 顯示全部樓層 |閱讀模式
摘要:本文主要介紹了基于TI公司生產的TMS320F2812DSP最小系統設計。該最小系統主要包括電源、時鐘、復位、外擴SRAM以及JTAG接口的設計,為實現基本的程序演示,還增加了外部中斷,基本輸入輸出、以及異步串行通信模塊。                                                                                                         


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

  49. void InitGpio(void)                                                      
  50. {                                                            
  51.    EALLOW;                                                        
  52. GpioMuxRegs.GPGMUX.bit.SCITXDB_GPIOG4=1;                            //使能SCIBTX復用功能                  
  53. GpioMuxRegs.GPGMUX.bit.SCIRXDB_GPIOG5=1;                            //使能SCIBRX復用功能               
  54. GpioMuxRegs.GPEMUX.bit.XINT1_XBIO_GPIOE0=1;               //使能XINT1復用功能                                
  55. GpioMuxRegs.GPBDIR.all=0xFFFF;                              //GPIOB設置為輸出模式                  
  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定時器0中斷                 
  64. EDIS;                                                           
  65. }                                                         
  66. void PieIntEnable(void)                                          
  67. {                                                         
  68.    PieCtrlRegs.PIEIER1.bit.INTx7=1;                                                         //CPU定時器0         
  69.    PieCtrlRegs.PIEIER1.bit.INTx4=1;                                                                      //外部中斷1         
  70.    PieCtrlRegs.PIEIER9.bit.INTx3=1;                                                                      // SCIBRX            
  71. }                                                      
  72. 3.2              外部中斷、定時、流水燈測試程序                                 
  73. interrupt void xint1_isr(void)                                
  74. {                                                                       
  75.    scib_send('s');                                                                                                          //發送數據‘s’                                          
  76.    StopCpuTimer0();                                                                                                      //停止定時器                                      
  77.    GpioDataRegs.GPBDAT.all=0;                                                                        //燈滅                             
  78.    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;                  
  79. }

  80. //燈的數目從1到8交替亮滅                                                                     
  81. interrupt void cpu_timer0_isr(void)                                                            
  82. {                                                                    
  83.    Count++;                                                    //計數器加1                             
  84.    GpioDataRegs.GPBDAT.all=Light; //燈亮                  
  85.    Light<<=1;                                                  //亮燈循環左移依次點亮
  86.    Delay_s(100);                                                //延時
  87.    GpioDataRegs.GPBDAT.all=Light&0xffff;                             
  88.    Count%=8;                                                  //循環周期到,計數器清零                                          
  89.    if(Count==0)                                                
  90.    {                                                                 
  91.               Light=0xFFFF;                                             //下一周期循環開始                                 
  92.    }                                                                        
  93.    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;                                          
  94. }  
  95. //延時程序
  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;//禁止波特率校驗                       
  110.               ScibRegs.SCICCR.all=0x0007;//1個停止位,無校驗,禁止自測試,空閑地址模式,字長8位              
  111.               ScibRegs.SCICTL1.all=0x0003; //復位                       
  112.               ScibRegs.SCICTL2.all=0x0003;                           
  113.               ScibRegs.SCIHBAUD=0x0001; //設定波特率                        
  114. ScibRegs.SCILBAUD=0x00E7; //為 9600bps               
  115.     ScibRegs.SCICTL1.all=0x0023; //退出RESET                       
  116. }                                                            
  117. interrupt void scibRxFifoIsr(void)                                 
  118. {                                                         
  119.               recveddata=ScibRegs.SCIRXBUF.all;//從緩沖區接收數據           
  120.               recveddata&=0xFF;  //接收數據高8位清零               
  121.     if(recveddata=='a')   //如果接收到的數據為‘a’                     
  122.     {                                                
  123.                             Light=0xFFFF;                                            
  124.         StartCpuTimer0();                                                                      //開定時器,流水燈工作           
  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);                                          //向發送緩沖區寫數據              
  132.               while(ScibRegs.SCICTL2.bit.TXRDY!=1);//等待發送成功                             
  133. }                                                                     
復制代碼

4   結束語                                             
本文是在學習了DSP及其在控制中的應用課程之后,對F2812最小系統的設計,根據以往的經驗對系統進行了定時、中斷、GPIO以及串行通信的測試,今后會在DSP的學習和設計中不斷努力,不斷總結。

完整的Word格式文檔51黑下載地址:
F2812DSP的最小系統設計.doc (88.11 KB, 下載次數: 109)
回復

使用道具 舉報

ID:704506 發表于 2020-3-8 12:54 | 顯示全部樓層
謝謝鹵煮
回復

使用道具 舉報

ID:718961 發表于 2020-3-30 17:51 | 顯示全部樓層
謝謝鹵煮
回復

使用道具 舉報

ID:783467 發表于 2020-11-1 21:03 | 顯示全部樓層
謝謝樓主對我幫助太大了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区久久久 | 日日夜夜免费精品视频 | 久久久久国产 | 91精品国产综合久久久久久 | 日韩欧美天堂 | 久久国产精品-国产精品 | 精品国产欧美一区二区三区成人 | 99福利视频导航 | 欧美一级淫片007 | 中文字字幕一区二区三区四区五区 | 爱操av | 美女黄频 | 欧美a级成人淫片免费看 | 国产在线观看一区二区 | 成人在线小视频 | 国产目拍亚洲精品99久久精品 | 日日操操| 国产精品精品视频一区二区三区 | 黄色操视频 | 久久另类视频 | 毛片网站在线观看 | 久草网站| 成人午夜视频在线观看 | 久久综合一区 | 日韩三级精品 | 国产精品国产三级国产aⅴ原创 | 久久蜜桃av一区二区天堂 | 国产精品免费在线 | 亚洲自拍一区在线观看 | 成人一区在线观看 | 男女羞羞的网站 | 日韩精品在线播放 | 日韩欧美国产精品 | 91视频.com| 一级欧美黄色片 | 亚洲精品免费在线 | 欧美黄色网络 | 精品欧美一区二区三区免费观看 | 亚洲精品成人在线 | 亚洲成人观看 | 久久久久久看片 |