男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
培訓信息
贊助商
54x系列DSP與計算機并口通信的設計方案
54x系列DSP與計算機并口通信的設計方案
 更新時間:2008-8-16 21:07:51  點擊數:24
【字體: 字體顏色

由于DSP最小的存儲單位是字(16位),因此對于HPI-8,每個的傳遞必須要有2個傳遞周期才能完成。HBLL信號用于區分傳遞的字節是當前字的第一字節還是第二字節。通過設置HPIC寄存器的BOB位,可以決定第一字節是這個字的高字節還是低字節。

通過HPI實現程序下載屬于''5410程序加載的五種途徑之一。在需要與主機連接的應用設計中,采用HPI程序加載方式可以使電路設計簡化,省去外部并行或串行的ROM或FLASH程序存儲器。

3 增強型HPI-8與主機并口的連接

''5410具有C54x系列的大部分特點,它包括3個多通道緩沖串口(McBSP)六通道DMA、8位增強型主機接口HPI-8、增強型外部并行接口(XIO2)、16K字的片內ROM、56K字的片內RAM等,可以說是一個功能強大的微處理器。

在實現DSP與計算機主機的并口通信時,將主機并口的工作模式設置在擴展功能(ECP)模式下,在通信速率要求不高的場合,可以將其設置為PS/2模式。PS/2模式是在SPP基礎上擴展的雙向傳輸模式,以字節為單位讀/寫數據。

    在一些DSP與主機并口通信的設計中,采用了CPLD來產生接口時序,這種方式除了加大電路成本外,還給設計增加了復雜度。事實上,利用幾個簡單的邏輯門就可以實現DSP與主機的并口通信。

對于DB25的主機并口線,Data0~Data7作為雙作為HDS1控制信號,AudoFd、SelechIn分別作為HCNTL0/1信號。Init作為HR/W控制信號。HBIL信號由Strobe信號觸發J-K觸發器翻轉?紤]到HPI的程序加載功能,利用J-K觸發器將SelectIn和AutoFd信號邏輯組合得到對DSP的RESET復位控制。另外,''5410的I/O口線為3.3V CMOS電壓,而并口則通常為5 V TTL電壓。因此,為達到電平匹配,在兩級之間增加了電壓轉換的緩沖器SN74LVC245。具體電路設計如圖5所示。

HCNTL0/1的狀態變化規則如圖4所示?梢钥闯,只有當HCNTL1為1,HCNTL0由0變1時,才會觸發復位狀態的翻轉。所以,當需要從寄存器HPIA切換到非增HPID時,為避免觸發復位狀態翻轉,HCNTL1/HCNTL0應以10-00-01-10的方式進行轉換。

4 程序設計

4.1 主機程序

主機程序主要完成HPI寄存器的選擇、時序的構建和數據讀/寫等。限于篇幅,此處只列舉主機讀DSP片內RAM存儲區的時序構建及其與DSP間的通信握手。其中,p_DATA、p_STATUS、p_CONTROL分別代表LPT1的數據寄存器、狀態寄存器和控制寄存器。ECP擴展控制寄存器ECR的bit7~5設置為''001''。HPI的HPIC寄存器BOB位設置為''0''(第一字節為高字節)。

/*讀/寫HPI寄存器,讀/寫的''字''存放在*data和*(data+),

r_w為0時代表寫,為1時代表讀。*/

void HPIregRW(char*reg,BYTE*data,BYTEr_w)

{

BYTE test;

BYTE CRW=0x00 (r_w<<5);

int i_HBIL=0;

/*切換選擇HPIC、HPIA、HPID_I、HPID_n寄存器之一*/

if(strcmp(reg,"HPIC"==0)

{

ChangeCONTROL(0x0b CRW);

//ChangeCONTROL(BYTE bValue)

    }

else if(strcmp(reg,"HPIA"= =0)

ChangeCONTROL(0x03 CRW);

else if(strcmp(reg,"HPID_I"= =0)//采用自增地址主機寫

ChangeCONTROL(0x09 CRW);

else if(strcmp(reg,"HPID_n"= =0) //主機寫

ChangeCONTROL(0x01 CRW);

else

{

printf("Wrong register for HPI write.";

exit(-1);

}

outp(p_CONTROL,CONTROL);

if((_inp(p_STATUS)&0x08)!=0) //如果HBIL!=0

{

ChangeCONTROL(0,0); //重載函數

//ChangCONTROL(BYTE bit,BYTE bValue)

_outp(p_CONTROL,CONTROL); //HDS1=0

ChangeCONTROL(0,1);

_outp(p_CONTROL,CONTROL); //HDS1=1

}

/*開始時序的準備*/

while((_inp(p_STATUS)&0x08)!=0); //等待HBIL=0

//(lst byte)

if(r_w)//讀

{

//在HPIR/W的上升沿對數據線采樣(第一字節)

ChangeCONTROL(2,1);

-outp(p_CONTROL,CONTROL);

ChangeCONTROL(0,0);

_outp(p_CONTROL,CONTROL);//HDS1:1->0, //采樣HCNTL0/1,HR/W,HBIL

while(_inp(p_STATUS)&0x10= =0); //若HDRY=0,//等待;HDRY=1,繼續

ChangeCONTROL(0,1);

outp(pCONTROL,CONTROL);//HDS1:0->1; //鎖存第1字節,然后HBIL=1

*(data++)=_inp(p_DATA);

while((_inp(p_STATUS)& 0x08)= =0); //等待HBIL//=1(2nd byte)

ChangeCONTROL(2,0);

_outp(p_CONTROL,CONTROL);

//在HPIR/W的上升沿對數據線采樣(第二字節)

ChangeCONTROL(2,1);

_outp(p_CONTROL,CONTROL);

ChangeCONT^ROL(0,0);

_outp(p_CONTROL,CONTROL);//HDS1:1->0,

//采樣HCNTL0/1,HR/W,HBIL

while(_inp(p_STATUS)&0x10)= =0);//若HDRY=0//等待,HDRY=1繼續

ChangeCONTROL(0,1);

_outp(p_CONTROL,CONTROL);//HDS1:0->1; //鎖存第2字節,然后HBIL=0

*(data- -=_inp(p_DATA);

while((_inp(p_STATUS)&0x08)!=0); //等待HBIL=0

(lst byte)

ChangeCONTROL(2,0);

_outp(p_CONTROL,CONTROL);

}

else//寫{(略)}

}

void main(void)

{

/*HPI初始化*/…

/*等待DSP給主機發中斷HINT(查詢方式)后,從DSP讀數*/

WriteHPIreg("HPIC",0x0808); //清HINT中斷

/*讀取DSP片內RAM區數據*/

for(i=0;i<data_length;i++)//data_length:讀取數據的長度

{

HPIA=resultAddr++;//resultAdd:要讀取的RAM數//據區起始地址

WriteHPIreg("HPIA",HPIA);

while((_inp(p_STATUS)&0x40)!=0);//等待DSP發//送HINT有效信號(握手信號)

//調用讀RAM區數據的函數,并寫入創建的文件data.dat

WriteHPIreg("HPIC",0x0808); //清HINT中斷

WriteHPIreg("HPIC",0x0404); //主機發送DSINT有//效給DSP(握手信號)

}

WriteHPIreg("HPIC",0x0808); //清NINT中斷

}

試驗證明,主機并口的讀取速度遠低于DSP的執行速度,因此,程序子函數中的一些等待查詢指令可替略。在主函數main()中,如果讀取的DSP數據是靜態的,不需實時提供,則這樣的指令也可以省略。

4.2 DSP的握手程序

在實際情況中,需要傳遞的數據大都由DSP實時處理得到。一邊處理一邊傳輸可以大大提高系統的整體效率,而且由于HPI工作的特點,傳輸幾乎可以不占用DSP的時間。唯一需要DSP干預的是數據準備好后通知主機接收(通過HINT中斷)。這項任務可以放大DSP的DSPINT中斷服務程序中進行其程序簡要如下:

.mmregs

.include "vectors.h"

dataarea .usect "COMMS",100h,1;所需傳遞的數據塊區間

HOSTACK.macro

hack ldm hpic,a ;累加器A載入HPIC值

and #08h,a ;屏蔽HINT的其他位

bc hack,aneq ;判斷HINT的狀態,直到HINT

;位為0(即主機清HINT標志)

.endm

.text

start:stm #00a0h,pmst;設置IPTR寄存器

stm #0000h,st0 ;設置ST0、ST1寄存器

stm #2800h,stl

stm #0010,tcr ;關閉計時器

stm #0ffffh,ifr ;清除所有的中斷標志位

stm #0300h,imr ;使能DSPINT中斷

stm #280h,sp ;初始化堆棧指針SP為280h

HOSTACK ;檢查主機是否清HINT標志

stm #0ah,hpic ;置HINT位,向主機發送

;HINT有效信號,告知第一個數已準備就緒

rsbx intm ;開啟中斷

wait: b wait ;主程序(此處為死循環)

hpi: stm #0ah,hpic ;當主機取完數后置DSPINT

;位,進入DSPINT中斷服務程序

rete ;DSP向主機發送NINT握手

;信號,通知下一個數已準備好

.end

  • 上一篇: CAN總線分布式系統適配卡和控制單元設計
  • 下一篇: 基于“Jupiter”GPS接收機的應用設計
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發消息66821730(技術支持)點擊這里給我發消息66821730(廣告投放) 點擊這里給我發消息41031197(編輯) 點擊這里給我發消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業自行提供,該企業負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 呼伦贝尔市| 安岳县| 平武县| 扎赉特旗| 石狮市| 同心县| 香格里拉县| 南京市| 聂拉木县| 肥西县| 天峨县| 繁峙县| 馆陶县| 本溪市| 石河子市| 长泰县| 施甸县| 宜良县| 青铜峡市| 邢台县| 南岸区| 建湖县| 包头市| 健康| 甘孜县| 温州市| 昭通市| 英吉沙县| 济南市| 高要市| 泾阳县| 深水埗区| 彰化县| 喀什市| 长兴县| 大关县| 忻州市| 霞浦县| 清远市| 佛学| 墨江|