新聞中心

        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總線上的物理連接



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 定边县| 小金县| 易门县| 赤峰市| 高邮市| 剑河县| 娄底市| 博乐市| 舒城县| 峡江县| 工布江达县| 门源| 灌南县| 七台河市| 漳平市| 东山县| 长岭县| 仙游县| 尚志市| 烟台市| 白山市| 霞浦县| 隆林| 贵港市| 嵊州市| 杂多县| 乌苏市| 遂川县| 若羌县| 宜州市| 高邑县| 宁都县| 个旧市| 乐平市| 呈贡县| 华亭县| 泉州市| 公安县| 蓝山县| 城口县| 盐边县|