<button id="6ymue"><menu id="6ymue"></menu></button>
    • <s id="6ymue"></s>
    • 美章網 精品范文 通信管理論文范文

      通信管理論文范文

      前言:我們精心挑選了數篇優質通信管理論文文章,供您閱讀參考。期待這些文章能為您帶來啟發,助您在寫作的道路上更上一層樓。

      通信管理論文

      第1篇

      關鍵詞:VXD實時串口通信

      引言

      在微軟的視窗操作系統中,系統內核掌管所有的應用程序,通過獨特的任務調度算法實現CPU的分時多任務處理方式。多任務處理對大多數用戶可能是件好事,但是對那些想把實時通信建立在Windows操作系統上的特殊用戶來說,操作界面的圖形化并不比MS-DOS的單任務更具吸引力。在視窗操作系統里可以進行實時通信和控制碼?答案是:VXD技術可以幫我們在獲取友好的人機界面的同時還擁有很強的實時性。

      1VXD技術解析

      VXD技術可追溯到Windows3.1,它的引入就是要讓操作系統實現多工以及硬件資源的共享。為了支持多個MS-DOS任務同時執行,Windows98讓每個MS-DOS應用程序在各自的虛擬機(VM)上運行,各自互不相干;而所有的Widnows應用程序卻都在一個虛擬機上運行。圖1所示的結構框圖很好地說明了Windows98的整體架構。

      圖1中,由眾多的VXD組成系統級代碼處于最底層。其中,處于中心地位的是一名為VMM32的VXD,它負責協調和管理所有的VXDs。其它VXDs則通過消息機制(這個消息機制由VMM32.VXD來維護)彼此聯系。由所有VXDs開放出的服務接口(API)組成了一個服務網,它們彼此通過合作的方式,提供Windows98的系統底層驅動服務。

      從以上Windows98系統架構可以看出,要想在視窗平臺下獲取很強的實時性,僅靠提升應用程序線程優先級的方法是不夠的。因為Win32應用程序代碼屬于Ring3級,而VXD代碼則屬于Ring0級;采用VXD撰寫的實時通信程序可以完全不受代碼限制,可以直接對硬件進行操作。VXD的這個特點正是實時通信建立所必須的。

      設計實時通信的VXD前,先解釋以下幾個問題:

      ①VMM32使用VPICD.VXD虛擬化每個硬件和軟件中斷。VMM32為每個虛擬機(VM)維護一個IDT結構,當中斷發生時,CPU先保護中斷現場,然后經由當前VM的IDT把這個中斷引導至相應的中斷處理程式。

      中斷的虛擬化,使我們有機會給每個中斷提供新的中斷處理函數,并可以讓多個硬件共享同一個中斷號。VPICD.VXD為我們提供這些服務。

      ②VMM有兩個調度器,用以在多個線程和VMs之間實現搶占式多工。主調度器負責選定下一個將被執行的線程。這個選擇可以是一個,也可以是多個。然后,主調度器把選擇結果送給所謂的時間片調度器,并由后者完成各個應用程序間的時間片分配。調度器也時應用程序經由呼叫Win32線程優先調整API(如SetThreadPriority和SetPriorityClass等)做出回應。當中斷發生時,VMM32自動提升中斷處理函數所在VM之優先級,保證中斷處理函數能及時被執行。

      ③VXD和Win32應用程序可直接通信。Win32應用程序可通過一個系統API(DevicelOControl(…))來呼叫位于底層的VXD為其服務。在呼叫VXD前,首先必須調用CreatFile(…)這個API加載該VXD(如果該VXD是一個靜態VXD,則不用加載)。所有的呼叫動作其實都通過VMM32完成。VXD也可以通過消息方式和位于上層的Win32應用程序通信。She11.VXD為所有希望以消息機制和Win32應用程序通信的VXD提供了這一服務。

      以上是編寫一個串口通信驅動需要的系統層面知識。對于Windows底層的了解。

      2用VXD實現一個實時串口通信驅動

      接下來用VXD技術實現一個實時串行通信的驅動。這個VXD是一個動態(Dynamic)VXD,當它的服務被呼叫時,VMM32會動態加載這個VXD。作者采用的工具是C+98DDK。當然也可以使用其它的工具,如MASM6.11(或更高版本)、VtoolsD。用C搭配DDK完成VXD構建的好處是,可以使用C語言完成絕大部分的程序,程序比較容易閱讀和維護。

      用C來實現一個VXD驅動,需要準備如下條件:一個.ASM的匯編語言接口文件(在其中定義VXD要處理的系統消息和輸出API),一個.C的函數實現文件(在其中完成自己函數實體),一個.DEF的定義文件(在其中定義VXD中各個段的別名并匯成一個DDB)和一個.MAK檔(用來編譯并連接生成VXD,可有可無)。在這里,僅給出用C實現的函數檔。至于其它的文件,可以從本文所列的參考書目或其它文獻中找到相關文檔的說明。

      這個串口通信驅動程序的功能是:實時送出一個Byte的數據,實時接收一個Byte的數據。作為演示之用,并沒有加入其它代碼。該VXD驅動主要由如下3個系統消息(由VMM32來維護和管理)處理函數組成,其代碼如下:

      (1)OnSysDynamicDeviceInit()函數

      BOOLOnSysDynamicDeviceInit()

      {//OnSysDynamicDeviceInit

      irqhandle=VPICD_Virtualize_IRQ((DWORD)(&irq4));

      if(irqhandle==0){

      returnFALSE;

      }

      returnTRUE;//OnSysDynamicDeviceInit

      }

      該函數用來完成VXD初始化所做的工作。在本例中,由于實時監視串口中斷的需要,要給COM1的中斷安裝一個自定義的斷服務函數。98DDK已經提供了這個函數的C語言版,其原型是HIRQstaticVPICD_Virtualize_IRQ(PVIDpvid),在vpicd.h中。該函數需要一個指針作為參數(指向名為VPICD_IRQ_Descriptor的結構體),函數傳回一個指向該虛擬IRQ的句柄(該句柄在后來的VPICD服務中需要提供)。VPICD_IRQ_Descriptor結構體的組成為:

      typedefstructVPICD_IRQ_Descriptor{

      USHORTVID_IRQ_Number;//IRQ號(0~15)

      USHORTVID_Options;//標志位選項

      ULONGVID_Hw_Int_Proc;//硬件中斷服務程序的地址

      ULONGVID_Virt_Int_Proc;//虛擬中斷服務程序

      ULONGVID_Mask_Change_Proc//MaskChange調用例程

      ULONGVID_IRET_Proc;//IRET調用例程

      ULONGVID_IRET_Time_Out;//在Vm的進程優先級提升之前的最大等待時間

      ULONGVID_Hw_Int_Ref;//硬件中斷服務程序的數據存放地址

      }VID;

      其中只用到三位。在本例中需要聲明一個名為irq4的全局變量為VID結構,并付給如下初值:VIDirq4={4,0,hwproc,0,0,0,0,500,0},表示將要虛擬化IRQ4,改變其中斷處理函數為voidhwproc(void),該函數的原型如下:

      voidhwproc(void){

      _asm{

      movdx,0x3f8

      inal,dx

      movbyteptr[readin],al

      clc

      }

      return;

      }

      在這個中斷處理中,僅僅從COM1的數據寄存器(地址為3F8h)中讀取接收到的數值,并把該數值存放在一個類型為BYTE、名為readin的內存中。

      (2)OnSysDynamicDeviceExit()函數

      BOOLOnSysDynamicDeviceExit()

      {

      VPICD_Force_Default_Behavior(irqhandle);

      //解除IRQ4虛擬化

      returnTRUE;

      }//OnSysDynamicDeviceExit

      該數提供了用于善后處理VXD在卸載時需要完成的事件。在本例中,和VXD初始化對應,需要解除對COM1的中斷IRQ4的虛擬化。作者也是用98DDK在vpicd.h中提供的外包函數voidstatic_inlineVPICD_Force_Default_Behavior(HIRQhirp)。該函數唯一需要的參數便是使用VPICD_Virtualize_IRQ函數傳回的IRQ句柄。

      (3)OnDeviceIoControl()函數

      DWORDOnDeviceIoControl(PDIOCPARAMETERSp){

      Switch(p->dwIoControlCode)

      {

      case1://端口寫功能

      if(!p->lpvOutBuffer||p->cbOutBuffer<1)

      {//輸出緩存的有效性檢查

      returnERROR_INVALID_PARAMETER;

      }

      if(serial_out((DWORD)(p->lpvInBuffer)))

      {//數據發送

      *(BYTE*)(p->lpvOutBuffer)=*(BYTE*)(p->lpvInBuffer);

      }

      else{

      *(BYTE*)(p->lpvOutBuffer)=0;

      }

      open_int();//打開com1中斷

      return0;

      case2://端口讀功能

      if(*(BYTE*)reading==0x00)

      {//數據讀入

      *(BYTE*)(p->lpvOutBuffer)=0x00;

      return0;

      }

      *(BTYE*)(p->lpvOutBuffer)=*(BYTE*)(readin);

      return0;

      }

      return0;

      }

      return0;

      }

      OnDeviceIoControl函數用來處理Win32應用程序對VXD的呼叫。Win32應用程序的呼叫會讓VMM32送給該VXD一個系統信息,并傳遞進一個DIOCPARAMETERS結構的指針。該結構里包含Win32應用程序呼叫時傳遞進來的各個參數。這個結構的組成如下:

      TypedefstunctDIOCParams{

      DWORDInternall;//指向客戶寄存器的指針

      DWORDVMHande;//該VM的句柄

      DWORDInternal2;//指向DDB結構的指針

      DWORDdwIoConrolCode;//DeviceIoControl例程中呼叫的控制碼

      DWODlpvInBuffer;//DeviceIoControl例程呼叫所傳遞進來的輸入緩沖區地址

      DWORDcbInBuffer;//輸入緩沖區的大小

      DWORDlpvOutBuffer;//DeviceIoControl例程呼叫所傳遞進來的輸出緩沖區地址

      DWORDcbOutBuffer;//輸出緩沖區的大小

      DWORDlpcbBytesReturned;//拷貝到輸出緩沖區中的字節數(可以為NULL)

      DWORDlpOverlapped;//DeviceIoControl例程呼叫所傳遞進來的重疊I/O塊結構

      DWORDhDevice;//Ring3層呼叫應用程序句柄

      DWORDtagProcess;//例程標簽

      }

      DIOPARAMETERS;

      其中,dwIoControlCode指明了Win32應用程序需要VXD提供的哪一項服務。在本例中采用一個switch-case語句作為服務入口,如下所示。其中服務1為讓串口送出一個字節,服務2為讀取一個已經由串口接收的字節。函數open_int()是用來初始化串口以便接收字節數據;函數BOOLserial_out(DWORDpBuffer)是讓串口發出一個字節。它們的函數體分別如下:

      BOOLserial_out(DWORDpBuffer){

      if(pBuffer==NULL){

      returnFALSE;

      }

      _asm{

      pushfd

      cli

      pusheax

      pushedx

      movdx,0x3fb;設置COM1的波特率

      moval,0x83

      outdx,al

      movdx,0x3f8

      moval,12

      outdx,al

      movdx,0x3f9

      moval,0

      outdx,al

      movdx,0x3fb;設置COM1的線控項

      moval,3

      outdx,al

      movdx,0x3f9;CMM1關中斷

      moval,0

      outdx,al

      movdx,0x3fa;關閉com1的FIFO功能

      moval,0

      outdx,al

      movdx,0x3f8;字節發送

      moval,byteptr[pBuffer]

      outdx,al

      popedx

      popeax

      popfd

      sti

      }

      returnTRUE;

      }

      serial_out這個函數體的實現是用匯編語言實現的。因為涉及到很多的端口提供以及CPU的標志(flag)和壓棧操作,因此考慮到用匯編語言編寫會簡化代碼。因為此串口傳輸中,用到了關閉中斷的指令(cli),所以,當寫操作所要求完成的任務很多時,此關中斷指令會讓程序的實時性很好地體現出來,但cli指令有效時間過長會導致系統問題,所以還是要謹慎使用。

      Voidopen_int(void){

      _asm{

      movdx,0x3f9;COM1開中斷

      moval,0x05

      outdx,al

      }

      return;

      }

      open_int函數用來把PC串口的中斷設備按照需要設立起來。函數體很簡單,僅改變了地址為3F9h的內容,意為設置Rxdataready和Linestatus中斷位,以便讓CPU可以及時在COM1的中斷服務程序里讀取串口接收到的字節。

      以上涉及到串口輸入和輸出的函數體實現代碼中,用到了PC16550UART的資料。

      至此,一個可用于實時串口通信的VXD驅動程序已經完成。由于篇幅所限,不能將其它必要的文檔一同提出來討論。

      3Win32客戶測試程序

      有了上述VXD驅動程序,還需要搭配一個Win32客戶程序來進行測試。在網絡補充版中,給出一個筆者在VC6下編制的一個控制臺應用程序片斷,以供參考。

      現在編制VXD驅動還沒有一個集成開發環境(IDE)。本文的驅動程序是用VC6.0自帶的編譯器編譯的。由于要編譯匯編文檔,所以還需要把一個MASM匯編器(要求6.0以上版本)及其相關文檔拷貝到VC6.0的vc98\u30446目錄下。

      第2篇

      關鍵詞:NRZHDB3單片機E1收發芯片DS2153Q

      常用的NRZ碼不適合在高速長距離數據通信的信道中傳輸,因而選用了另外一種編碼—HDB3碼。HDB3碼是串行數據傳輸的一種重要編碼方式。和最常用的NRZ碼相比,HDB3具有很多優點,例如:消除了NRZ碼的直流成分,具有時鐘恢復更好的抗干擾性能,這使它更適合于長距離信道傳輸。

      E1信號選用HDB3編碼方式,速率2.048Mbps,可以在特性阻抗120Ω的RJ45平衡雙絞線上傳輸1.5km,能夠滿足大多數情況下數據的高速長距離傳輸。在數據速率小于2.048Mbps的高速速率時,可以通過插入額外數據比特提高數據數率。E1收發芯片DS2153Q完全符合E1信號標準,而且具備微控制器接口,大大提高了該芯片的可用性。

      E1有成幀、成復幀與不成幀三種方式。在成幀的E1中,第0時隙用于傳輸幀同步數據,其余31個時隙可以用于傳輸有效數據;在成復幀的E1中,除了第0時時隙外,第16時隙是用于傳輸信令的,只有第1~15,第17~31共30個時隙可用于傳輸有效數據;而在不成幀的E1中,所有32個時隙都可用于傳輸有效數據。本文提出的NRZHDB3碼制轉換器的E1工作在不成幀方式,也就是說E1的32個時隙均用于傳輸有效數據。

      1E1收發芯片DS2153Q簡述

      DS2153Q是Dallas公司的T1/E1收發芯片,符合最新的E1線路標準,包括ITUG.703、G.704、G.706、G.823、I.431、ETSI300011、300233、TBR12和TBR13等,該芯片能完成NRZ和HDB3碼間的相互轉換,碼率可達2.048Mb/s,而且在片內集成了接收NRZ碼的數據時將恢復電路,更有利于后級接收電路。片內D/A能夠實現G.703標準的輸出波形,適用于75Ω和120Ω特性阻抗的雙絞線,并且具有完善的數據流狀態監測功能,可以實時指示數據流的傳輸狀況。

      DS2153Q的微控制器接口使其可以很容易與單片機等MCU接口連接。其內部的71個8位寄存器使用戶可以通過MCU對DS2135Q進行功能配置和狀態監測這些寄存器主要有接收控制寄存器、發送控制寄存器通用控制寄存器、中斷屏蔽寄存器和工作狀態寄存器圖1為DS2135Q的內部結構圖。

      2碼制轉換器電路設計

      NRZ-DB3碼制轉換器為NRZ碼到HDB3碼和HDB3碼到NRZ碼的轉換,設計選用專用E1收到芯片DS2153Q和單片機AT89C51實現該碼制的轉換功能。該碼制轉換器把輸入的NRZ轉換為HDB3碼輸出,同時接收E1線路上的數據轉換成HRZ碼,并恢復出數據時鐘,供后級數據接收單元使用。

      AT89C51為Atmel公司的8位單片機,負責控制通信芯片DS2153Q的工作模式和狀態監,使其完成NRZ碼到HDB3碼和HDB3碼到HRZ碼的轉換。同時,該單片機的電路還包括μP監控電路IMP813L,用于提高碼制轉換器工作的抗干擾能力和可靠性。

      圖2是該碼制轉換器的結構框圖。

      DS2153Q的并行數據/地址線與單片機的P0口相連;片選信號選用單片機的P2.0;單片機的讀寫信號與DS2153Q的讀寫信號相連;同時,DS2153的兩個中斷申請線與單片機的INT0和INT1相連。這樣DS2153Q可以通過中斷的方式及時通知單片機自身的工作狀態。AT89C51與DS2153Q的電路連接圖如圖3所示,通過以上的硬連接,實現單片機對DS2153Q的控制和狀態監控。

      圖3AT89C51與DS2153Q電路連接圖

      該碼制轉換器選用IMP813L作為μP監控電路,實現可靠上電復位和看門狗控制。DS2153Q的時鐘信號是通過對單片機時鐘信號的二分頻來實現的。單片機選用16.384MHz的時鐘信號,使用74HC74二分頻后,得到8.192MHz的頻率信號作為DS2153Q輸入時鐘。

      在DS2153Q的電路設計中,為了使其工作在不成幀方式,發送的數據全部從TSER引腳輸入,需要將引腳TLINK和TSER短接。發光二極管用于轉換器的工作指示,可以直觀判斷當前數據轉換是否正常。

      該碼制轉換器使用特性阻抗120Ω的RJ45平衡雙絞線進行數據傳輸,DS2153Q收發電路如圖4所示,傳輸變壓器輸入輸出匝數比為1:1.36。

      3單片機控制程序設計

      轉換器單片機控制程序包括兩部分:DS2153Q的功能配置和DS2153Q工作狀態監控。DS2153Q的功能配置實現HDB3碼的正常動作;DS2153Q工作狀態監控用來實時獲得當前轉換器是否工作正常,并及時上報和指示。

      3.1DS2153Q功能配置

      轉換器上電后,首先由μP監控電路進行有效復位,保證單片機的正常初始化,一單片機即進入通信芯片DS2153Q的配置過程。

      ①初始化測試寄存器,向相應測試寄存器寫0即寫。

      ②進行接收控制存器(RCR)的配置,包括接收幀模式、自動重同步使能、重同步準則和接收動態存儲功能等,使DS2153Q接收單片工作在AutoResync、DisableElasticStore。

      ③進行發送控制存器(TCR)的配置,包括發送幀模式、自動設置故障位和16位引腳的功能選擇等,使DS2153Q發送單元工作在E-bitsnotautomaticallysetinthetransmitdirection,并根據當前轉換模式的不同設置16引腳的功能,0=ReceiveLossofSync(RLOS)、1=LossofTransmitClock(LOTC)。

      ④進行通用控制存器(CCR)的配置,使能DS2153Q、HDB3碼的接收和發送、配置錯誤計數器更新時間、禁止動態存儲發送數據等。

      ⑤初始化中斷屏蔽寄存器,使能接收載波丟失、接收失步中斷、接收數據全0和全1中斷,使能發送時鐘丟失中斷,通過這些中斷使單片機可以及時得知DS2153Q的工作狀態,實現單片機對其的實施監測。

      ⑥初始化傳輸線接口單元,向LIRST數據位寫0,然后寫1,使傳輸線接口進入正常工作模式。

      ⑦初始化傳輸線接口控制寄存器,包括傳輸波形選擇、接收均衡器增益選擇、抗抖動抑器選擇等。

      單片機控制流程如圖5所示。

      下面是DS2153Q的功能配置程序(部分)。

      ;*****************************************************;

      MOVA,02H

      MOVDPTR,#RCR1

      MOVX@DPTR,A;寫寄存器RCR1,使能自動重新同步

      NOP

      MOVA,#04H

      MOVDPTR,#RCR2

      MOVX@DPTR,A;寫寄存器RCR2,禁止彈性存儲功能

      NOP

      MOVA,#41H

      MOVDPTR,#TCR1

      MOVX@DPTR,A;寫寄存器TCR1,TSYNC為輸出方式

      NOP

      MOVA,#0F9H

      MOVDPTR,#TCR2

      MOVX@DPTR,A;寫寄存器TCR2,E數據位禁止自動置位

      NOP

      MOVA,#44H

      MOVDPTR,#CCR1

      MOVX@DPTR,A;寫寄存器CCR1,允許接收和發

      NOP;HDB3碼

      NOVA,#00H

      MOVDPTR,#CCR2

      MOVX@DPTR,A;寫寄存器CCR2,配置錯誤計數寄存器

      NOP

      ;********************************************************

      3.2DS2153Q狀態監控設計

      在完成DS2153Q的寄存器配置后,單片機即進入傳輸狀態監測程序,實時監控DS2153Q的工作正常與否,包括狀態寄存器的讀取和DS2153Q中斷的響應,并從中判斷故障、及時通報。

      (1)發送狀態監控

      DS2153Q的發送狀態監控是通過單片機的INT1來實現的。當狀態寄存器的發送狀態位置1,則DS2153Q產生中斷,片機響應該中斷來讀取當前狀態寄存器的故障位。當讀取完畢后,需要向該狀態寄存器特定狀態位寫1,保證以后的故障可以正確置位。

      下面給出了NRZ發送時鐘丟失故障的狀態監控程序(中斷1處理程序)。

      MOVDPTR,#SR2;讀DS2153Q狀態寄存器2

      NOP

      MOVXA,@DPTR

      ANLA,#04H

      JNZERROR

      SJMPFAVER

      ERROR:SETBERR_SR

      SJMPLOCKE

      FAVER:CLRERR_SR

      LOCKE:JNBERR_SR,WORK;判斷發送數據時鐘丟失與否

      SETBP1.0;故障,工作指示二極管滅

      SJMPEVER

      WORK:CLRP1.0;正常,工作指示二極管亮

      EVER:MOVDPTR,#SR2

      MOVA,#04H

      MOVX@DPTR,A

      RETI

      (2)接收狀態監控

      DS2153Q的接收狀態監控是通過單片機的INT0來實現的。當狀態寄存器的發送狀態位置1,則DS2153Q產生中斷,單片機響應該中斷來讀取當前狀態寄存器的故障位。當讀取完畢后,需要向該狀態寄存器的特定狀態位寫1,保證以后的故障可以正確置位。

      下面給出了HDB3碼接收載波丟失故障的狀態監控程序(中斷0處理程序)。

      MOVDPTR,#SR1;讀DS2153Q狀態寄存器21

      NOP

      MOVXA,@DPTR

      ANLA,#02H

      JNZERROR

      SJMPFAVER

      EPPOR:SETBERR_SR

      SJMPLOCKE

      FAVER:CLRERR_SR

      LOCKE:JNBERR_SR,WORK;判斷接收載波丟失與否

      SETBP1.0;故障,工作指示二極管滅

      SJMPEVER

      WORK:CLRP1.0;正常,工作指示二極管亮

      EVER:MOVDPTR,#SR1

      MOVA,#02H

      MOVX@DPTR,A

      RETI

      第3篇

      關鍵詞:多通道緩沖串行口McBSPTMS320C5402μPD780308SPIDSP

      1引言

      隨著信息技術革命的深入和計算機技術的飛速發展,DSP技術也正以極快的速度被應用到科技和國民經濟的各信領域。在很多工程開發設計中,由于要求實現單片DSP與單片DSP、多片DSP芯片以及及其它處理芯片之間的通信,因此,怎樣更高效、更便捷的實現這些通信,已成為廣大DSP應用者首先要解決的一個問題。

      本文根據筆者在工程應用和調試方面用TI的DSPTMS320C5402與NEC的μPD780308單片機進行通信的經驗,介紹并討論了將TMS320C5402DSP的多通道緩沖串行口McBSP(Multi-channelBufferedSerialPort)配置為SPI模式(即時鐘停止模式),從而實現DSP與其它單片處理器之間的通信設計方法同時給出了實現方法的部分程序代碼。

      2多通道緩沖串行口McBSP

      多通道緩沖串行口McBSP的功能是提供器件內外數據的串行交換。同以前的串口相比,McBSP串口具有相當大的靈活性。表1給出了有關TMS320C5402的McBSP管腳說明。其中串口接收、發送時鐘和同步幀信號既可由外部設備提供,又可由內部時鐘發生器提供,從而大大的提高了通信的靈活性。

      表1TMS320C5402的有關McBSP管腳說明

      管腳說明說明

      DR數據輸入端

      DX數據輸出端

      CLKR接收數據位時鐘

      CLKX發送數據位時鐘

      FSR接收數據幀時鐘

      FSX發送數據幀時鐘

      CLKS外部提供的采樣率發生器時鐘源

      3SPI協議中的McBSP時鐘停止模式

      SPI協議是以主從方式工作的,這種模式通常有一個主設備和一個或多個從設備,其接口包括以下四種信號:

      (1)串行數據輸入(也稱為主進從出,或MISO);

      (2)串行數據輸出(也稱為主出從進,或MOSI);

      (3)串行移位時鐘(也稱為SCK);

      (4)從使能信號(也稱為SS)。

      圖1為設備的SPI接口示意圖。該接口在工作時,主設備通過提供移位時鐘和從使能信號來控制信息的流動。從使能信號是一個可選的高低電平,它可以激活從設備(在沒有時鐘提供的情況下)的串行輸入和輸出。在沒有專門的從使能信號的情況下,主從設備之間的通信則由移位時鐘的有無來決定,在這種連接方式下,從設備必須自始至終保持激活狀態,而且從設備只能是一個,不能為多個。

      TMS320C5402提供的時鐘停止模式可用于SPI協議通信,當McBSP被配置為時鐘停止模式時,發送器和接收器在內部是同步的,即可將發送數據幀時鐘(FSX)用作從使能(即SS),而將發送數據位時鐘(CLKX)用作SPI協議中SCK。由于收數據位時鐘(CLKR)和接收數據幀時鐘(FSR)在內部與FSX和CLKX是相連的,因此,該管腳不能用于SPI模式。

      當McBSP被配置為一個主設備時,傳送輸出信號(BDX)被用作SPI協議的MOSI信號,而接收輸入信號(BDR)則被用作MISO信號。圖2所示為McBSP用作主設備時的SPI接口示意圖。

      同樣地,當McBSP被配置為一個從設備時,BDX被用作MISO信號,BDR則被用作MOSI信號。圖3為McBSP用作從設備的SPI接口示意圖。

      當TMS320C5402的McBSP被用于時鐘停止模式時,寄存器SPCR1的CLKSTP位域和引腳配置寄存器的CLKXP位的配置如表2所列。

      表2時鐘停止模式配置

      CLKSTPCLKXP說明

      0XX不可用時鐘停止模式。時鐘被激活用于非SPI模式

      100時鐘開始于上升沿(無延遲)

      110時鐘開始于上升沿(有延遲)

      101時鐘開始于下降沿(無延遲)

      111時鐘開始于下降沿(有延遲)

      4其它有關寄存器的配置

      為了更好地掌握和了解McBSP作為SPI設備時的有關寄存器配置,現以McBSP作為SPI從設備來介紹有關McBSP的其它有關寄存器的配置,若McBSP做為SPI主設備,則相關配置正好相反。當McBSP作為SPI從設備時,主設備外部產生主時鐘。CLKX引腳和FSX引腳必須被設置為輸入。由于CLKX引腳和CLKR信號在內部相連接,因而傳送和接收回路均由外部主時鐘計時(CLKX)。同時,由于FSX引腳和FSR信號也已在內部連接,因此,CLKR引腳和FSR引腳不再需要外部信號的連接。

      盡管CLKX信號由主設備外部產生且與McBSP同步,但是,McBSP的采樣率發生器仍然必須正確啟動SPI從設備,同時,采樣率發生器還應被設置為最大速率(CPU時鐘速率的一半)。另外,內部采樣率時鐘常被用來同步McBSP邏輯和外部主時鐘以及從使能信號。每次傳送時,McBSP一般在從使能信號的上升沿進行FSX輸入。也就是說,在每次傳送的開始,主設備必須維護使能信號,而在每次傳送完成后,則必須消除從使能信號。在兩次傳送之間,從使能信號不能一直保持為高電平。對正確的SPI從設備而言,McBSP的數據延遲參數必須設置為0,在這種運行模式中,設置值為1或2沒有定義。配置McBSP為從設備所需的寄存器位值如表3所列。

      表3SPI操作模式下的寄存器位值表

      位域值功能描述寄存器

      CLKXM0配置BCLKX引腳為輸入PCR

      CLKSM1由CPU時鐘產生的采樣率時鐘SRGR2

      CLKGDV1為采樣率時鐘選擇2的劃分因素SRGR1

      FSXM0配置BFSX引腳為輸入PCR

      FSGM0對每個包傳送,BFSX信號被激活SRGR2

      FSXP1配置BFSX引腳為活動低電平PCR

      XDATDLY0為SPI從設備運行,必須為0XCR2

      RDATDLY0為SPI從設備運行,必須為0RCR2

      5程序設計

      下面是有關TMS320C5402器件的McBSP各個控制寄存器的配置,該配置程序筆者在實踐中已經過測試,并已成功運用在了某工程設計中。

      VoidMcBSP1_Config(void)

      {

      offlset=0x0000;

      SPCR11=0x1800;;配置串口時鐘停止模式CLKSTP=10

      offlset=0x0001;

      SPCR21=0x0222;

      offlset=0x0005;

      SRGR11=0x00FA;

      offlset=0x0007;

      SRGR21=0xa00F;

      offlset=0x0002;

      RCR11=0x0040;;接收一幀含一字,一字含16位

      offlset=0x0003;

      RCR21=0x0044;接收數據無延遲RDATDLY=00

      offlset=0x0004;

      XCR11=0x0040;;發送一幀含一字,一字含16位

      offlset=0x0005;

      XCR21=0x0044;;發送數據無延遲XDATDLY=00

      offlset=0x000E;

      PCR1=0x000;;發送時鐘由外部時鐘驅動,CLKX為輸入腳CLKX=0,發送時鐘極性CLKXP=0,發送幀同步極性FSXP=1

      offlset=0x0008;

      MCR11=0x0001;

      offlset=0x0009;

      MCR21=0x0001;

      offlset=0x000C;

      XCERA1=0x0003;

      offlset=0x0001;

      SPCR21=0x0262;

      offlset=0x0001;

      SPCR21=0x0263;

      offlset=0x0000;

      SPCR11=0x1801;;接收器有效

      offlset=0x0001;

      SPCR21=0x02e3;;發送器有效

      Return;

      }

      主站蜘蛛池模板: 日本精品视频在线播放| 麻豆国产一区二区在线观看| 100部毛片免费全部播放完整| 精品三级久久久久久久电影聊斋| 成人年无码AV片在线观看| 国产乱人伦AV麻豆网| 久久99九九国产免费看小说| 91大神在线看| 污视频网站在线观看免费| 成人免费观看网站| 啊轻点灬大ji巴太粗小说太男| 中文字幕亚洲综合久久男男| 老阿姨哔哩哔哩b站肉片茄子芒果| 推油少妇久久99久久99久久| 啦啦啦资源在线观看视频| 三色堂明星合成论坛| 精品一区中文字幕| 大美女啪啪污污网站| 亚洲欧美精品成人久久91| 91欧美精品综合在线观看| 欧美成人精品高清在线观看| 在线视频日韩欧美| 亚洲欧美在线视频| Av鲁丝一区鲁丝二区鲁丝三区| 精品无码成人片一区二区| 日本永久免费a∨在线视频| 国产三级久久精品三级| 三个黑人上我一个经过| 男人天堂综合网| 少妇无码太爽了在线播放| 四虎影视久久久免费观看| 久久不见久久见免费影院www日本 久久不见久久见免费影院www日本 | 午夜精品一区二区三区在线观看| √天堂中文官网8在线| 狠狠色综合久久婷婷色天使| 国产精彩对白综合视频| 亚洲精品美女在线观看| 在线观看xxx| 日本动态120秒免费| 又硬又粗又大一区二区三区视频| 中文无码字幕中文有码字幕|