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

时间:2012-10-30来源:网络

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

或用微信扫描左侧二维码

相关文章

查看电脑版