新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 基于IP核的PSTN短消息終端SoC軟硬件協同設計

        基于IP核的PSTN短消息終端SoC軟硬件協同設計

        作者: 時間:2010-11-25 來源:網絡 收藏

          SoC中的FSK/DTMF調制解調器、擴展頁面尋址以及線路狀態控制等,都作為片內外設連接在DW8051_core所特有的SFR內部總線上。8 KB的片上RAM和片外512 KB的Flash存儲器AM29LV040都連接在DW8051_core的MEM總線上,如圖1所示。

        按此在新窗口瀏覽圖片
        圖1 經過擴展的DW8051_core SFR總線以及SoC系統結構

        3.2 外設在SFR總線上的地址映射

          DW8051_core通過SFR地址總線sfr_addr[0:7],SFR讀信號sfr_rd,SFR寫信號sfr_wr,SFR數據輸出總線sfr_data_out[0:7],數據輸入總線sfr_data_in[0:7]來訪問映射到SFR總線上的片上外設。每一個外設都通過SFR地址映射成SFR總線上的一個寄存器,如圖2所示。

          對這些擴展SFR寄存器的訪問和對普通寄存器的訪問在形式上并沒有區別。當應用程序使用Keil的C51編譯器時,修改reg51.h文件可以讓編譯器確認用戶所擴展的SFR寄存器。對擴展SFR外設地址的分配可以根據設計需要而不同,但是只能使用DW8051_core沒有保留和占用的地址,否則會發生沖突。在reg51.h文件中添加以下語句讓編譯器確認擴展的寄存器:

          sfr SEND_MODEM_DATA = 0xf1;/* 擴展,發送Modem數據,只寫 */
        sfr READ_FSK_DECODE = 0xf1;/* 擴展,讀FSK解調數據,只讀 */
        sfr READ_DTMF_DECODE = 0xf2;/* 擴展,讀DTMF解調數據,只讀 */
        sfr MODEM_STATUS = 0xf3;/* 擴展,Modem狀態,只讀 */
        sfr MODEM_CTRL = 0xf2;/* 擴展,Modem控制,只寫 */
        sfr KEYPAD_VALUE = 0xf4;/* 擴展,讀鍵盤值,只讀 */
        sfr FLASH_PAGE = 0xf5; /* 擴展,頁面尋址,只寫 */
        sfr _DATA = 0xf6; /* 擴展,數據,讀寫 */
        sfr LCD_CTRL = 0xf7; /* 擴展,LCD控制,只寫 */
        sfr CIRCUIT_STATUS = 0xff; /* 擴展,線路狀態,只讀 */
        sfr CIRCUIT_CTRL = 0xff; /* 擴展,線路控制,只寫 */

          為了節約SFR總線地址資源,一些擴展的SFR寄存器在硬件上設計為只能寫、不可讀,另外一些被設計為只能讀、不可寫。這樣,二者可以復用同一個SFR總線地址,比如MODEM_CTRL和READ_DTMF_DECODE寄存器;但是這樣在需要先將那些“只寫”寄存器的內容讀出,運算后再進行寫回操作的時候就很不方便。這里采用了鏡像變量的方法,為每一個“只寫”寄存器建立一個全局變量,每次寫寄存器操作后,都對這個全局變量進行同樣的寫操作,時刻保持變量值和寄存器的內容一致,在需要讀出的時候就使用此全局變量。MODEM_CTRL寄存器的bit0控制Modem是DTMF還是FSK模式。下面以對這一位的操作為例說明。

          建立它的鏡像全局變量:

          unsigned char xdata modem_ctrl_mirror;

          定義控制位:

          #define MODEM_B0_MODE0x01// 1-DTMF, 0-FSK

        按此在新窗口瀏覽圖片
        圖2 片上外設在SFR總線上的物理連接



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 银川市| 大庆市| 清徐县| 洛隆县| 微山县| 蓬安县| 达拉特旗| 田阳县| 吉木萨尔县| 白水县| 清河县| 曲周县| 寿阳县| 邢台市| 民勤县| 巴楚县| 彝良县| 柏乡县| 读书| 油尖旺区| 嵩明县| 双峰县| 屯留县| 道孚县| 乌拉特中旗| 盐城市| 志丹县| 绥芬河市| 罗平县| 延吉市| 双桥区| 瑞金市| 安岳县| 手机| 封丘县| 昭平县| 若尔盖县| 当雄县| 文水县| 晋城| 三河市|