文章目录
前言
实际开发时,经常会遇到这样的情况,例如,做电机控制时需要显示查看ADC采样之后的电机电压、电流、转速等数据。当然可以为系统设计液晶屏来显示,还有一种不错的方法,就是将这些数据通过协议将其上传给计算机,然后通过计算机上的软件来显示和监测。又例如,在某些项目中,需要计算机发送预先设定的指令来控制DSP程序的运行方式。
那么DSP怎样才能和PC之间实现数据的传输呢?
最简单、最经常使用的方法是使用其内部的串行通信接口SCI。
江南目前参与的项目中使用的芯片是28377D,共使用了它的4个SCI串口,可以实现DSP与PC上位机软件、串口软件、液晶屏等的通信,本模块简单实用,建议大家好好学习掌握。
本章主要介绍以下内容: SCI的结构、特点及其工作原理。
15.1 SCI模块的概述
SCI是Serial Communication Interface的简称,即串行通信接口。所谓串行和并行就像是单车道和多车道。
SCI是具有接收和发送两根信号线的异步串口,一般可看做UART(通用异步接收/发送装置)。
F28335的SCI支持与采用NRZ(Non-Return-to-Zero)标准格式的异步外围设备之间进行数据通信。即用正负电平表示二进制值,不使用0电平,高电平表示二进制1,低电平表示二进制0。
例如设置是使用MAX3232芯片,将SCI设计成串口RS232,那么F28335就能够和其他使用RS232接口的设备进行通信。
比如,F28335内部的两个SCI之间,或者F28335的SCI与其他DSP的SCI之间均能实现通信。当然F28335的SCI还可以设计成其他电平形式的串口,例如RS424、RS485等。
F28335内部有3个相同的SCI模块:SCI-A、SCI-B、SCI-C。每个SCI模块都各有一个接收器和发送器,接收器用于实现数据的接收功能,发送器用于实现数据的发送功能。SCI的接收器和发送器都各自有一个16级深度的FIFO队列,它们还都有自己独立使能位和中断位,可以在半双工通信中进行独立操作,或者在全双工通信中同时进行操作。
根据数据的传送方向,串行通信可以分为单工、半双工和全双工3种。
- 单工通信:设备A只能发送,设备B只能接收。
- 半双工通信:设备A和B都能够接收和发送,但是同一时间只能接收或者发送。
- 全双工通信:在任意时刻,设备A和B都能够同时接收和发送。
因为F28335的SCI具有能够独立使能和工作的接收器和发送器,所以其既可以工作在半双工方式,也可以工作在全双工方式。
15.1.1 SCI模块的特点
F28335的3个SCI模块的功能是相同的,只是寄存器的命名有所不同,下面介绍中以SCI-A为例进行讲解。
从上图中可以看到:
- SCI具有2个引脚,发送引脚SCITXD、接收引脚SCIRXD。SCITXD可以实现数据发送,SCIRXD可以实现数据接收。
- 外部晶振通过F28335的PLL模块倍频后产生了CPU的系统时钟SYSCLKOUT,然后SYSCLKOUT经过低速时钟预定标器之后输出低速外设时钟LSPCLK提供给SCI模块。要保证SCI模块的正常运行,系统控制模块必须使能SCI时钟,只有使能了时钟,LSPCLK才能提供给SCI模块,也就是在系统初始化函数中需要将外设时钟控制寄存器PCLKCR0[SCIAENCLK]位置1。即SCI模块采用的时钟信号是LSPCLK,低速时钟。
- SCI模块具有4种错误检测标志,分别是极性错误parity、超时错误overrun、帧错误framing、间断break检测。
- SCI模块具有双缓冲接收和发送功能,接收缓冲寄存器为SCIRXBUF,发送缓冲寄存器为SCITXBUF。独立的发送器和接收器使得SCI既可以工作于半双工模式,也可以工作于全双工模式。
- SCI模块可以产生两个中断:SCIRXINT和SCITXINT,即接收中断和发送中断。
- SCI模块具有独立的发送中断使能位和独立的接受中断使能位。发送和接收可以通过中断方式实现,也可以通过查询方式实现。
- 在多处理器模式下,SCI模块具有两种唤醒方式:空闲线方式和地址位方式。平时在使用SCI时很少使用到多处理器的情况,通常就是在两个处理器之间进行通信,这时SCI通信采用空闲线方式。
- SCIA模块具有13个寄存器,注意SCI寄存器都是8位的。当某个寄存器被访问时,数据位于低8位,高8位为0,因此,如果将数据写入高8位将是无效的。
- SCI具有增强的16级深度的发送/接收FIFO以及自动通信速率检测的功能。