AVR单片机的串口转FSK的通信模块设计
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收/发以及线路状态检测等子程序组成。ATmega48芯片采用模拟口线的方式对CMX865寄存器进行读/写操作,其中对CMX865芯片寄存器读操作程序为:
FSK收/发、DTMF收/发子程序均以CMX865寄存器读/写操作函数为基础,通过设置CMX865寄存器的值,确定其工作模式。FSK数据发送、接收都可以通过CMX865芯片的IRQ中断口线引起ATmega48芯片中断,因此FSK数据收/发都通过中断实现。芯片程序采用10 ms定时器循环检测线路状态。
结语
本文利用ATmega48芯片和CMX865芯片为硬件架构设计了串口转FSK通信模块。由于ATmega48芯片与ATmega88芯片除了Flash、EEPROM、SR AM容量差异外,性能完全相同。通信模块可以不更改硬件电路,仅配置相应AVR芯片,对软件稍作调整,能够满足通信业务对通信数据量增加的需求,节约模块二次开发的成本。目前本通信模块已在一款新型的电子交易终端上使用,并与中兴、精伦等电子交易平台进行信息交互,运行效果良好。
- 什么是module 以及如何写一个module(转)(04-23)
- 在Linux 2.6内核下编译可以加载的内核模块(04-23)
- 用DSP56F805 PWM模块输出高频正弦波(05-25)
- DSP与PC机的无线交换调制模块设计(09-17)
- 基于TMS320F28334的伺服系统模块设计(02-25)
- Linux安全模块(LSM)简介(06-12)