通过ARM HT9032C 实现智能来电显
2022-08-10

  0 引言

  目前我国电话网交换机传送主叫识别信息CID(Calling Identity Delivery) 有两种方式,较常用的是FSK(频移键控) 方式,另一种是DTMF(双音多频) 方式。通过掌握相应的协议标准和数据格式,可通过ARM HT9032C 实现解调FSK 格式的来电信息,通过E2PROM 存储器存储来电信息,并利用液晶显示,同时控制ISD1402 语音芯片播放来电号码。以SPI 串行接口智能显示键盘控制芯片ZLG7289A 为核心设计的键盘电路实现查阅、删除来电信息。

  1 系统硬件设计

  1.1 系统总体设计

  整个系统由5 部分组成,分别是: (1) FSK 信号解调; (2) 来电号码语音播报; (3) 显示来电; (4) 存储来电信息; (5) 按键控制部分。具体如图1 所示。

 

图1 系统组成框图

  1.2 系统各组成部分设计

  (1) FSK 信号解调。

  CID 芯片HT9032C 解调器是台湾HOLTEK 公司生产的双列直插、低功耗的接收物理层主叫识别信息的CMOS FSK 解调芯片,它能满足Bell 202 和CCITT V.23 标准,实现1200 波特率FSK数据传输标准,且能检测铃流和载波,电话线经过接口电路接到HT9032C 的TIP,RING,RDET1 和RDET2脚,当有振铃信号来时,HT9032C 的RDET 脚触发下降沿。在第一次和第二次振铃之间HT9032C 把逻辑“1” (1200 ± 12) Hz、逻辑“0” (2200 ± 22) Hz、传输速率为1200 bit /s 的FSK 信号解调成串行异步二进制数据。当检测到有效载波信号,CDET 触发下降沿。在DOUT 脚输出包括信道占用信号、标志信号和主叫识别信号的所有信号; 在DOUTC 脚只输出主叫识别信号。

  HT9032C 与ARM9 的具体硬件连线如图2 所示。

 

图2 CID 芯片HT9032C 与ARM9 的硬件连线

  HT9032C 的RDET 引脚接 的外部中断0,当有振铃信号时,RDET 脚触发外部中断0 服务程序。

  HT9032C 的CDET 引脚接MCU 的外部中断1,当检测到有效解调后的主叫识别信号,CDET 脚触发外部中断1 程序。HT9032C 的DOUTC 引脚接MCU 的串行中断。当检测到振铃和有效载波信号,便打开串口中断,接收解调的FSK 信号,得到来电信息。

  (2) 来电号码语音播报。

  采用录放一体化的高保真单片固态语音集成电路ISD1420 实现自动语音播放来电号码。其内部有128K 的E2PROM 用于存放语音信息,并可分成160段,每段信息为0.125 s,总共可存储20 s 的信息。语音分段的信息是由ISD1420 的地址线A0 ~ A7 的值决定的。在录制过程中将可能要播放的语音库按每个0. 5 s 的单位进行录制,每个汉字或数字的语音信息对应到一个地址。在检测到来电号码后,依次给定A0 ~A7 的值就能构成一句话,播放来电号码。

  (3) 显示来电。

  液晶显示模块LCD 用来显示主叫号码、日期、时间等信息。LCD 接收到来电信息后即依次取出各个信息并进行显示。

  (4) 存储来电信息。

  采用允许三总线工作的串行外设接口(SPI) 芯片X25045 作为存储器。此芯片把看门狗定时器、电压监控和E2PROM 集成在单个封装内,降低了系统成本并减少了对空间的要求; 其看门狗功能提供了对的保护,通过编程监控系统,当系统发生故障时自动以RESET 信号作出响应; X25045 的存贮器部分是CMOS 的4096 bit(512 × 8) 串行E2PROM.

 

  (5) 按键控制部分。

  采用ZLG7289A 控制3 个按键: “DEL”、上“UP”、下“DOWN”分别用于删除、查阅主叫信息。

  2 主叫识别信息的两种数据格式

  终端交换机向该被叫用户传送主叫识别信息数据传送时序如图3 所示。

 

图3 主叫识别信息数据传送时序

  符号时间值:

  A-0.5 ~ 1.5 s 第一次振铃结束与数据传送开始之间的时间间隔。

  B + C-2.9 s 传送数据的时间包括信道占用信号Channel Seizure Signal 和标志信号Mark Signal.

  D-0.2 s 数据传送结束与第二次振铃开始之间的时间隔。

  E-1 s 铃流。

  B + C + D-3.1 s 各时段可根据具体情况定。

  信道占用信号和标志信号的目的是提示电话终端准备接收数据,校验字是用作差错检查。信道占用信号是由一组300 个连续的“0”和“1”交替的位组成,其第一个比特为“0”,最后一个比特为“1”。在通话状态下,信道占用信号不发送。标志信号是由180 个(在挂机状态下) 或80 个(在通话状态下) 标志位(逻辑“1”) 组成,标志位由0 ~ 10 个逻辑“1”组成。

  每个数据字之前先行一位“0”作为起始位,在最后加一位“1”作为结束位,每个数据字的最低位先发送。这样,实际每个字占10 bit,即1PXXXXXXX0 (P为奇偶校验位) 。数据传送时,信道占用信号发送后接收标志信号。主叫识别数据格式有两种: 单数据消息格式(SDMF) 和复合数据消息格式(MDMF) 。

  (1) 单数据消息格式(SDMF)。

  单数据消息格式由消息头和消息体组成,这种格式的结构简单,可容纳的信息内容较少,如: 呼叫序号、呼叫建立日期和时间及主叫号码。消息头由消息类型和消息长度组成,它们均为8 bit.消息类型的值用来识别消息的特征,消息长度指明后面所跟的消息字的长度。消息体包括交换机需传给终端用户的消息,消息体可容纳1255 个8 bit 的消息字,每个字用8 bit 带校验位的7 位编码字符集表示。其消息格式如图4 所示。

 

图4 单数据消息格式组成图

  (2) 复合数据消息格式(MDMF)。

  这种格式的结构比较复杂,可传送的信息包括除单数据格式内容外还有主叫用户的姓名等。复合数据消息格式也是由消息头和消息体组成,不同的是,复合数据的消息体由一个或多个小的参数消息组成,参数消息也具有参数头和参数体。参数头包括参数类型和参数长度,它们均为8 bit,参数类型值用来识别后续参数字,参数长度指明参数体中参数字的数目。复合数据消息格式允许不同特征产生的不同消息在同一个帧中传送。在此不再详述。

  3 系统软件流程设计

  系统软件由四部分组成,分别为主程序,中断0 程序,中断1 程序和串口中断程序。

  主程序及各程序功能介绍如下。

  (1) 主程序开始初始化系统各功能芯片,设置串行通信的波特率,从E2PROM 中读存储的来电信息,并显示最后一条信息; 然后开中断0 循环等待振铃信号。程序流程图如图5 所示。

 

图5 主程序流程图

 

  (2) 外部中断0 服务程序。

  当有振铃信号来时,便触发外部中断0 服务程序。

  若判断为第一次振铃,则开外部中断1,判断是否有有效解调FSK 信号。

  (3) 外部中断1 服务程序。

  当判断有有效信号来时,便触发外部中断0 服务程序。若判断为第一次振铃,则打开串口中断,准备接收解调为串行异步二进制数据的来电信息。

  (4) 串口中断程序。

  在串口服务程序中不断记录缓冲器SUBF 中的数据,存储并显示当前信息。

  4 实验数据分析

  串口输出的字符串为: 0x80 0x18 0x32 0x00 0x310x31 0x30 0x38 0x33 0x30 0x31 0x30 0x33 0x34 0x300x31 0x35 0x32 0x31 0x36 0x37 0x36 0x30 0x31 0x360x37 0xEF经过分析,0x80 表示此消息数据为复合数据消息格式,0x18 表示数据长度,后面则表示时间为2011 年08 月30 日10 时34 分,来电号码为01521760167,校验字为0xEF.所有数据和(包括校验位) 按256 的模求和为00,证明收到的数据完全正确。

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 报名中:IIC Shenzhen - 2022国际集成电路展览会暨研讨会


  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
  • CFS任务的负载均衡

    负载均衡的系列文章共分为三篇,第一篇为框架篇,描述负载均衡的相关原理、场景和框架。本篇作为该系列文章第二篇,主要通过对任务放置场景(task placement)的均衡分布进行分析,以便加深读者对内核调度器实现任务均衡分布的理解。 本文基于linux-5.4.24分

    昨天
  • Multi-queue 架构分析

    Linux上传统的块设备层(Block Layer)和IO调度器(如cfq)主要是针对HDD(hard disk drivers)设计的。我们知道,HDD设备的随机IO性能很差,吞吐量大约是几百IOPS(IOs per second),延迟在毫秒级,所以当时IO性能的瓶颈在硬件,而不是内核。但是,随着高速

    昨天
  • ARMv8 异常处理简介

    内核稳定性问题复杂多样,最常见的莫过于“kernel panic”,意为“内核恐慌,不知所措”。这种情况下系统自然无法正常运转,只能自我结束生命,留下死亡信息。诸如: “Unable to handle kernel XXX at virtual address XXX” “undefined instruction XXX”

    昨天
  • 新型 IO 调度器 BFQ 简介

    Linux io调度器有很多种,大多数调度器都经受住了各种市场环境的长时间验证,稳定性、性能得到各种用户的认可,但新的调度器依然展露头角,在4.12内核中出现了一个新的bfq调度器,这个调度器将取代曾经的辉煌的cfq调度器。社区对待大的改动都是很谨慎的,为什

    昨天
  • CFS任务的负载均衡(框架篇)

    我们描述负载均衡的系列文章一共三篇,第一篇是框架部分,即本文,主要描述了负载均衡相关的原理、场景和框架。后面的两篇是对均衡代码的情景分析,通过对load balance、task placement和active upmigration几个典型的负载均衡来呈现其实现细节,稍后发布,敬

    昨天
  • linux IO Block layer 解析

    早期的 Block 框架是单队列(single-queue)架构,适用于“硬件单队列”的存储设备(比如机械磁盘),随着存储器件技术的发展,支持“硬件多队列”的存储器件越来越常见(比如 NVMe SSD),传统的单队列架构也因此被改成了多队列(multi-queue)架构。早在 3.

    昨天
  • eMMC简介

    1 eMMC是什么 eMMC是embedded MultiMediaCard的简称,即嵌入式多媒体卡, 是一种闪存卡的标准,它定义了基于嵌入式多媒体卡的存储系统的物理架构和访问接口及协议,具体由电子设备工程联合委员会JEDEC订立和发布。 它是对 MMC的一个拓展,具有体积小,功耗低,

    昨天
  • 低纹波、高精度电流源设计

    低纹波、高精度电流源是一种重要的仪器设备;广泛应用于电光源、电化学、通信、测量技术、电子仪器等领域。目前,市场上的电流源不具备连续可调功能;并且输出电流范围小、

    昨天
  • Linux 电信基站系统解决方案

      自从1991年Linux第一次面世以来,任何人也不会想到这个不起眼的操作系统现在会应用得如此广泛。无论是从嵌入式领域的智能手机到大型计算服务器都可以找到它的

    前天
  • 单片机振荡电路中如何选择晶体?

    1.单片机晶振的原理晶振一般采用三端式(考毕兹) 交流等效振荡电路;实际的晶振交流等效电路中,其中Cv是用来调节振荡频率,一般用变容二极管加上不同的反偏电压来实

    前天
  • OpenMV image 模块对象(目标识别基础)

    背景介绍: Sugar 在一文中说过:“OpenMV 在图像里做目标识别的过程就是:不停地取出画面里的每一帧图像,在图像里的每一帧画面上找目标的过程。” 本篇就说一说 OpenMV 怎样在一帧画面上识别目标的。 image 模块 上一篇中说到 OpenMV 通过 sensor.snapshot(

    前天
  • 代码里开启喷洒装置, ardupilot 是怎么控制的

    背景介绍: 本文面向植保机飞控开发者,以代码解析的方式解读植保机喷洒装置的控制代码。 不仅说明了功能的开启方法,更重要的是表述了如何从代码里找方法的过程。对于进一步掌握 ardupilot 有帮助。 代码里开启喷洒装置 ardupilot 控制喷洒装置的代码在 AC_S

    前天
下载排行榜
更多
广告