设计应用技术
字为0x80。每个数据字之前先发一位“0”表示起始位,数据字结束后发一位“1”表示停止位,这样每个数据字实际发送10位bit。FSK消息类型定义如表2所示。
表1 FSK来电显示消息帧格式
单帧数据格式复帧数据格式
信号占用信号信号占用信号
标志信号标志信号
消息类型消息类型
标志位(0~10)标志位(0~10)
消息长度消息长度
标志位(0~10)标志位(0~10)
消息字参数长度
更多消息字标志位(0~10)标志位(0~10)参数字
校验字更多的参数字
—更多的参数消息
—标志位(0~10)
—更多的消息
—校验字
表2 FSK消息类型定义
值含义数据消息类型00000100(0x04)主叫号码传送信息单数据格式10000000(0x80)呼叫建立复合数据格式其他备用备用
消息长度中,消息长度字为消息体中所有消息数据的总数目。参数类型中,参数类型值从0x00~0xff 可定义255种不同特征的参数,FSK参数类型定义如表3所示[4]。参数长度为参数体中参数字的数目,用16进制表示,值为0x00~0xff。
表3 FSK参数类型定义
值含义
00000001(0x01)呼叫时间
00000010(0x02)主叫号码
00000100(0x04)无主叫号码
00000111(0x07)主叫姓名
00001000(0x08)无主叫姓名
其他备用
2 系统总体设计方案
2.1 总体方案
系统总体设计方案如图1所示。该系统设计方案采用GD32为核心控制处理器,通过一定的软件算法产生
所需的正弦波数据,将正弦波数据通过直接内存访问(Direct Memory Access,DMA)方式同数字模拟转换器(Digital to Analog Converter,DAC)相关联,同时利用定时器按照约定的时间去触发DAC完成数字信号到模似信号的转换。该约定的时间实质上就是正弦波的频率,只需改变定时器的定时时间,就可以得到FSK来电显示中所需要的1200 Hz载波信号和2200 Hz的载波信号,即图1中的载波1和载波2,同时用定时器在基带码元的控制下,就可以调制载波信号为一连串的FSK来电显示所需的模拟信号,即图1中的2FSK,把这个调制出来的模拟信号直接送往电话线路,相应的电话机上就可以显示出FSK来电显示的主叫号码、呼叫时间、呼叫日期等相关信息内容。
生成正弦
波数据
DMA DAC
存储触发
传输
取数据
定时器定时器
基带控制
载波1
载波22FSK电话线路
图1 系统设计框图
2.2 波形数据产生
正弦波数据的产生,使用正弦函数生成正弦波数据表存放于数组Sine12bit[128]中,采样点数为128位,采样点数越大,经DAC模块转换后输出的正弦波波形也就越逼真。在实际调试中,本设计分别使用64位和128位采样点数试验,均能满足设计需要,实测下来,128位采样点数的波形要明显优于64位采样点数的波形,正弦波数据产生代码为
B=PARAMETER.Integrated_Parameters.SineWave_ GAIN;
A=(4096*B)/330;
for (i = 0; i < 128; i++)
{
Sine12bit[i] = A+A*sin(2*3.1415926f*i/128);
}
其中,参数B用来控制正弦波峰峰值,可通过个人计算机(Personal Computer,PC)管理系统实时调整配置,因本设计方案中DAC模块为12位精度,处理器工作电压为直流3.3 V,所以参于计算变量A 的数值里有4096和330(12位精度最大值为212=4 096)。在正弦波数据生成时,利用乘变量A和加变量A,解决输出正弦波因DAC模块无法输出达到0而导致的正弦波信号失真问题,同时可以防止峰峰值超过最大精度,正弦波数据整体抬升和最大精度控制从根本上解决了信号失真问题。
2.3 DMA模块
直接内存存取(Direct Memory Access,DMA)模块的作用就是不经过中央处理单元(Central Processing Unit,CPU)就可以直接同内存数据进行交换,无须处理器干预,数据通过DMA可快速交互,可较大地节约处理器资源,提高处理器的工作效率。本设
· 11 ·
Cortex-M 3 核心
Flash 接口控制器
复位和时钟 控制(RCC )
桥2
桥1
ADC 1ADC 2USART 13Pl 1TIM 1GPIOA GPIOB
DAC
PWR
BKP
CAN 1
CAN 2
I 2C 2
I 2C 1
UART 5
UART 4
姓名代码转换器百度
USART 3
USART 2
GPIOC GPIOD GPIOE EXTI AFIO
SPI 3/I 2S SPI 2/I 2S IWDG WWDG RTC TIM 7TIM 6TIM 5TIM 4TIM 3TIM 2APB 1
APB 2
Flash
SRAM
线矩阵
ICode
D M A
D M A
通道1通道2
通道7
DCode 系统
DMA
通道1通道2
通道7
DMA 1
DMA 2
仲裁器
仲裁器
AHB 从设备DMA 请求
DMA 请求
AHB 从设备
以太网 MAC USB OTG FS
图2 DMA 功能框图
· 13 ·
据信息为
const u 8 FskTxdNumber [20]={0x 04,0x 12,0x 31,0x 30,0x 31,0x 37,0x 31,0x 35,0x 33,0x 31,0x 39,
0x 38,0x 37,0x 36,0x 35,0x 34,0x 33,0x 32,0x 31,0x 30};
其中数组首位字节0x 04表示单帧数据格式,第二字节0x 12转成十进制为18,表示后续数据长度为18个字节,紧随其后的8个字节表示月日时分,再后面10个字节表示号码9876543210。FSK 来电显示发送软件流程如图6所示。
软件周期性判断是否有FSK 来电显示需要发送,若有,则进入发送信道占用状态机,处理信道占用信号的发送,即发送0x 55信号。到达信号占用发送时间,继续发送标志信号,即一连串“1”。到达标志信号时间后,则发送消息数据,消息数据来自数组FskTxdNumber [20],消息数据发送完成之后,接着发送检验和,检验和为消息所有数据相加后取反再加1,即补码。发完校验后,发送结束,等待下一次发送[5]。发送软件部分源代码为
void  Fsk_TxdFrame_Process(void){//发送FSK 来显--核心代码 if(FSK_SEND_FLAG) {
if(FSK_TXD_STATUS==0)
{//发送信道占用-约)        Fsk_Txd_55_Process();      }
sWTR IGx TIM 2_TRGO TIM 4_TRGO TIM 5_TRGO TIM 6_TRGO TIM 7_TRGO TIM 8 TRGO(1)
DMA 请求
TENx
MAMPx [3:0]位 WAVENx [1:0]位
DAC_OUTx
V DDA V SSA V REF+
TSELx [2:0]位
DHRx
触发选择x
DORx
数字至模拟 转换器x
控制逻辑
LFSRx
trianglex
12位
12位
12位
DMAENx
DAC 控制寄存器
EXTI_9
图3 DAC 功能框图
初始化处理
833US 时间到
FSK 发送处理
结束
图4 定时器处理框图
载波1(2 200 Hz )
基带信号
控制单元
1载波1载波2载波1
载波2
1
00
载波2(1 200 Hz )
调制后的2FSK 信号,也就是需要的来电显示信号
图5 FSK 来电显示调制框图
初始化处理
有FSK 发送信道占用处理
标志信号处理
消息数据处理
校验和处理
发信道占用(状态机)发标志信号(状态机)发标志数据(状态机)发送校验和(状态机)结束
否否
是图6 FSK 发送软件流程
文章对GD 32实现的FSK 制式的来电显示软发
号设计进行探索,完全通过MCU 中的软件处理的方法来完成了FSK 来电显示软发号的设计与实现。该设计不但能够解决电话中DTMF 来电显示因环境或部分话机来显兼容问题而导致的少号和漏号问题,而且对于节约硬件生产成本、理解FSK 来电显示原理有一定的帮助。本设计稍作修改,将2 200 Hz  Hz 频率更改,则可实现任易频率的2FSK (a )FSK 实测波形
(b )2FSK 波形
(c )话机来显实测结果
图7 FSK 来电显示信号实测波形和话机显示结果