PSTN短消息终端SoC系统的软硬件设计

时间:2010-12-06来源:网络
  sfr MODEM_CTRL = 0xf2;/* 扩展,Modem控制,只写 */

  sfr KEYPAD_VALUE = 0xf4;/* 扩展,读键盘值,只读 */

  sfr FLASH_PAGE = 0xf5; /* 扩展,页面寻址,只写 */

  sfr LCD_DATA = 0xf6; /* 扩展,LCD数据,读写 */

  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

  

片上外设在SFR总线上的物理连接

  图2 片上外设在SFR总线上的物理连接

  设置Modem为FSK模式:

  void Modem_SetMode_FSK() {

  MODEM_CTRL = modem_ctrl_mirror (~MODEM_B0_MODE);

  modem_ctrl_mirror = modem_ctrl_mirror (~MODEM_B0_MODE);

  }

  在初始化程序中对这些“只写”寄存器及其镜像全局变量进行赋值。

  void DevicesInit() {

  MODEM_CTRL = MODEM_CTRL_INI;

  modem_ctrl_mirror = MODEM_CTRL_INI;

  }

1 2 3

关键词: 软硬件 设计 系统 SoC 短消息 终端 PSTN

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版