新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于ATmega48的串口转FSK通信模块设计

基于ATmega48的串口转FSK通信模块设计

作者:时间:2013-10-15来源:网络收藏


4.1 主程序实现流程

主程序包括:CPU初始化、CMX865初始化、初始化建链、串口通信和FSK通信子程序等。主程序流程如图2所示。初始化建链环节是模块正常工作的基础,通过初始化建链操作,信息终端可以根据线路环境以及平台超时机制对参数进行设置,确保通信的稳定性。通信主流程循环执行3个子功能函数:线路状态处理函数、串口数据解析与处理函数、链路保持函数。线路状态处理函数设计了3种线路状态,即初始状态、空闲状态和摘机状态;正常工作时仅在空闲状态和摘机状态之间切换。其中在空闲状态检测振铃、根据状态位执行摘机、DTMF拨号等操作;在摘机状态根据状态位执行FSK收发、脱线检测、挂机控制等操作。串口数据解析与处理函数包含串口数据按命令集解析、对解析命令进行应答和状态置位处理部分。这样线路状态处理函数和串口数据解析与处理函数通过状态置位标志紧密连接起来。FSK数据采用中断方式直接接收,接收完毕后在摘机状态下直接通过串口发送给信息终端。由于串口发送应用相对单一,为简单处理串口发送采用即时应答处理方式,分散在通信主流程各子功能函数中实现,提高了通信效率。通过链路保持函数判断串口通信是否异常,周期性地向信息终端发送链路保持命令,如果3次重发均未收到终端应答命令,通信模块将自动锁闭线路,重新执行初始化建链操作,实现串口异常的处理。


4.2 对外串口通信协议

模块采用标准串口通信,波特率为19 200 bps,10位异步方式。定义串口通信数据包格式为:0x1E+命令+校验和反码(对命令的校验和反码),其中部分命令以变长方式发送。串口通信主要命令有:模块初始化、链路保持、DTMF接收/发送、FSK接收/发送、振铃、挂机等,命令具体格式和描述此处不加详述。模块初始化上电后由通信模块自动发起,直到正确接收到终端应答初始化命令后,通信模块才建链成功。信息终端初始化应答命令主要提供FSK通信模块参数配置信息。上电后如果FSK模块未收到终端初始化应答信息,则周期性地(每2 s)发送一次初始化建链命令,直到成功为止;模块FSK通信过程中周期性地向终端发送链路保持命令,如果未收到终端应答信息,则断开FSK链接重新开始模块初始化。

4.3 串口通信实现

AVR单片机串口通信往往采用SPI通信方式,通信模块串口通信采用UART0控制/状态寄存器和数据寄存器实现。串口通信子程序主要由串口发送/接收中断子程序、串口接收命令解析子程序和串口组包发送子程序3部分组成。其中串口中断接收程序为:

具体执行串口数据发送时,需要提供发送数据长度、发送起始地址、置UCSROB寄存器值(UCSR0B |=0x28)。串口接收命令解析子程序按照对外串口通信协议解析串口命令,并根据命令描述调用子程序代码执行相应子功能操作。为了通信容错处理,通信模块需对接收串口数据进行校验,如果解析的串口命令格式正确,则向终端发送肯定应答;否则发送否定应答,等待终端重传命令数据。串口组包发送子程序对接收的FSK数据以及线路状态等信息数据,按照串口通信协议组包发送给信息终端。

4.4 FSK通信实现

FSK通信子程序主要由CMX865芯片寄存器操作、FSK收/发、DTMF收/发以及线路状态检测等子程序组成。芯片采用模拟口线的方式对CMX865寄存器进行读/写操作,其中对CMX865芯片寄存器读操作程序为:

FSK收/发、DTMF收/发子程序均以CMX865寄存器读/写操作函数为基础,通过设置CMX865寄存器的值,确定其工作模式。FSK数据发送、接收都可以通过CMX865芯片的IRQ中断口线引起芯片中断,因此FSK数据收/发都通过中断实现。芯片程序采用10 ms定时器循环检测线路状态。

结语

本文利用芯片和CMX865芯片为硬件架构设计了通信模块。由于ATmega48芯片与ATmega88芯片除了Flash、EEPROM、SR AM容量差异外,性能完全相同。通信模块可以不更改硬件电路,仅配置相应AVR芯片,对软件稍作调整,能够满足通信业务对通信数据量增加的需求,节约模块二次开发的成本。目前本通信模块已在一款新型的电子交易终端上使用,并与中兴、精伦等电子交易平台进行信息交互,运行效果良好。

数字通信相关文章:数字通信原理


通信相关文章:通信原理


分频器相关文章:分频器原理

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭