1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      基于ARM S3C2410與TMS320C6416的接口設計

      更新時間: 2007-09-04 17:30:00來源: 粵嵌教育瀏覽量:1234

        摘要:以Samsung公司的ARM9系列的S3C2410和TI公司的TMS320C6416為例,詳細介紹S3C2410芯片外部I/O與C6416芯片HPI口硬件連接技術和基于ARM uClinux的HPI驅動程序開發。設計結果實現了接口數據穩定快速讀寫,此設計方案對其他雙核接口設計開發有很好的指導作用。

        Web技術和多媒體技術的發展成為新一代嵌入式實時監控系統的重要特性。多媒體的JPEG,MPEG2/4等標準視頻數據格式及各種庫函數都使用32位格式和32位的編程軟件,這對32位的嵌入式微處理器的實時性提出更高的要求。ARM+DSP雙核嵌入式系統,以32位ARM為核心CPU,DSP作為協處理器負責視頻采集壓縮,從而減輕ARM核心CPU的負擔,使之更好地發揮網絡傳輸和協調控制的功能,進一步提高系統的實時性和穩定性。
         
        本研究結合實驗室的基于虛擬動態模擬的遠程機器人狀態檢測與智能控制技術的設計方案,主要研究ARM S3C2410處理器與DSP C6416芯片的連接軟硬件設計,并介紹ARM與DSP連接的HPI接口驅動程序的編程實現方法。

        1 系統硬件結構設計
         
        系統整體結構框圖如圖1所示。 

        系統實現在本地通過瀏覽器,視頻終端顯示遠程機器人狀態視頻信息,并通過本地指令控制臺對機器人進行控制。S3C2410實現遠程上位機功能,協調與DSP之間數據交換,并將數據通過網絡發送到本地。此外S3C2410通過CAN總線上ARM7 S3C44B0控制機器人智能節點。

        2 S3C2410與TMS320C6416硬件連接設計

        2.1 ARM外部I/O與HPI硬件連接
         
        S3C2410與TMS320C6416硬件接口如圖2所示,

        S3C2410的兩根地址線ADDR[3:2]接HPI口的HCNTL[1:0],以實現ARM對HPI口3個寄存器的訪問。S3C2410用ADDR4代替讀寫選通信號連接HPI口的HR/W。S3C2410片選信號nGCS1接到HPI片選HCS上,將DSP的HPI接口作為外部物理地址映射到S3C2410相應的內核空間,位于外部I/O接口BANK1地址0x08000000~0x0FFFFFFF上。

        2.2 接口工作原理
         
        S3C2410外部I/O對HPI接口3個寄存器(HPIA,HPIC和HPID)分別實現了ARM與DSP軟件握手與中斷請求,鎖存ARM訪問DSP存儲單元地址,以及數據交換。S3C2410訪問順序,首先是初始化HPIC寄存器和HPIA寄存器。接下來是HPID寄存器數據讀寫。對于HPID讀操作,S3C2410完成對HPIA訪問后,DSP的EDMA自動將數據從HPIA寄存器所指定的地址預取到HPID。HPID有兩個地址,s3C2410對一個地址訪問,HPIA保持不變,訪問其外一個地址時,HPIA地址自動加一。對于寫操作原理類似,S3C2410完成對HPID的寫操作后,EDMA將數據寫到HPIA指定的存儲地址單元里。s3c2410同樣對HPID兩個地址進行訪問,HPIA地址隨新數據的寫入而更新,從而實現s3C2410對HPID的連續寫入。

        3 HPI接口設備驅動程序軟件設計

        3.1 Linux設備驅動程序
         
        Linux設備類型分為3種:字符設備,塊設備和網絡設備。本設計將HPI外設歸類于字符設備。在系統內部,字符設備驅動程序都提供類似文件操作的open,close,read,write,ioctl等函數人口,詳見<linux/fs.h>中的fileoperations數據結構。初始化字符設備時,設備驅動程序向Linux登記,并在字符設備向量表中增加一個device_struct數據結構條目,這個設備的主設備表示符用做這個向量表的索引。HPI設備驅動程序在內核與用戶空間注冊注銷及系統調用過程如圖3所示。

        3.2 HPI設備驅動程序設計

        3.2.1 HPI接口設備數據結構及其文件系統接口定義
         
        HPI接口設備數據結構是自定義的,它完成各個不同系統調用之間的協調工作,因此在設備驅動中是全局數據結構變量。具體定義如下:

        Struct HPI_DEVICE{
        devfs_handle_t devfs; //devfs device
        char isopen; //device status:1=opened,0=closed
        int MajorID;
        kdev_t MinorID;
        U16 DriverType;
        char *HpiBaseBufRead:
        char *HpiBaseBufWrite;
        wait_queue_head_t rd_wait; //read timeouts
        struct semaphore sem; //lock to prevent concurrent reads or writes
        #if defined(DMA_SUPPORT) //DMA
        DMA_CHANNEL_INFO DmaInfo[NUMBER_OF_DMA_CHANNELS];
        Spinlock_t LockDmaChannel;
        #endif
        struct file_operations hpi_fops;
        }

        文件系統接口定義是用戶使用HPI設備的接口,合理定義設備驅動程序在內核中的源碼就能簡化應用程序的設計。

        Static struct file_operations hpi_fops={
        owner:THIS_MODULE,
        open:hpi_open,
        read:hpi_read,
        write:hpi_write,
        ioctl:hpi_ioctl,
        mmap:hpi_mmap,
        release:hpi_release,
        };

        3.2.2 讀取HPI接口數據
         
        HPI設備驅動程序的開發大多數工作都集中在struct file_operations中接口函數的編寫上,這些函數是應用程序通過內核操作硬件設備的人口函數,下面將給出對HPI接口讀數據的關鍵代碼。

        #define HPI_BASEADDR 0x08000000 //BANK 1
        #define bHPI(Nb) _REG1(HPI_BASEADDR+(Nb))
        #define HPIC_WRITE bHPI(0x0)
        #define HPIC_READ bHPI(0x40)
        #define HPIA_WRITE bHPI(0x10)
        #define HPIA_READ bHPI(0x50)
        #deftne HPID_WRITE bHPI(0x20)
        #define HPID_READ bHPI(0x60)
        Static ssize_t hpi_read(struct file *file,char *buf,size_t count,loff_t *oppos)
        {
        Struct HPI_DEVICE *pHpiDevice;
        int i,hpi_size;
        size_t ret;
        down(&(pHpiDevice->sem));
        hpi_size=1024;
        for(i=0;i<hpi_size;i++)
        { HPIC_WRITE =0x00000000: //初始化HPI控制寄存器
        HPIA_WRITE =0x80000000; //初始化HPI地址寄存器,讀取DSP地址為0x80000000的數據
        (__U8 *)(&pHpiDevice->HpiBaseBufRead[i])= HPID_READ;//讀取1K到HpiBaseBufRead緩沖區
        }
        IBUF_SIZE =hpi_size:
        ret=copy_to_user(buf,(__U8 *)(&pHpiDevice->HpiBaseBufRead),IBUF_SIZE) ? -EFAULT:ret;
        up(&(pHpiDevice->sem));
        return IBUF_SIZE;
        }

        4 結束語
         
        隨著DSP對密集復雜數據處理能力的加強,ARM對控制和網絡功能的進一步完善,基于兩者的雙核數據處理系統將在未來應用于更廣泛的科研領域,而雙核之間數據交換的快速性和穩定性也將成為雙核數據處理系統開發的重點。TMS320C6416+S3C2410的軟硬件設計在本實驗室項目上得到初步應用,驗證了理論設計的可行性,實現了接口數據穩定快速讀寫,對以后其他雙核接口設計,尤其是驅動程序的開發有很好的指導作用與參考價值。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲国产欧美在线看片一国产 | 久久久久久免费一区二区三区 | 伊人色综合久久天天 | 中文国产日韩欧美二视频 | 色影院不卡中文一区二区 | 一本到中文字幕在线精品 |