新闻中心

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总线上的物理连接



评论


相关推荐

技术专区

关闭