2020/09/28_SCI串口模块实验纪要
1、SCI模块简介
SCI模块包含3部分:RS232、RS485、LIN。
2、通信设置步骤
(1)波特率设置:涉及寄存器SCIBDH/SCIBDL,其中,SCIBDH的最高位IREN位(调制解调使能)需置0,否则不能正常通讯。 IREN=0时,波特率和时钟、寄存器位(12:0)之间的关系如下:
bordrate=SCI_CLK/(16xSBR[12:0]),SCI_CLK为芯片系统总线BUS时钟频率。
受限于时钟频率的设定,通过寄存器设置的值不一定完全等于常见的波特率值,但尽量接近,以保证传输可靠性。
(2)SCICR1控制寄存器1:设置数据格式、停止位、奇偶校验等;SCICR2控制寄存器2设置:发送/接收中断使能、发送/接收模块使能、中止符发送使能。
通常只开启接收中断,发送/接收使能。若要发送数据,采取查询方式。
(3)SCISR1状态寄存器:发送、接收相关的完成、中断、错误标志位。 进入中断或以查询方式操作时,需读取或清除相应的位。
(4)SCIDRH、SCIDRL数据寄存器:发送和接收使用同一个寄存器,默认8位数据的模式下,数据保存在SCIDRL中,9位数据格式的模式下,SCIDRH的最高位保存接收到的第9位数据、次高位保存需发送的第9位数据。
3、实例演示:中断模式接收、查询模式发送(将接收到的数据原样发回)
(1)按照前述,使用SCI0模块,设置好相关的寄存器值,设定串口的相关参数:波特率、数据格式、停止位、奇偶校验。开接收中断,使能发送和接收模块。
CLR SCI0CR2 ; 禁止SCI0模块 ,等后续设置完成后再使能
LDAA SCI0SR1 ;虚拟读,清除相关的标志位
LDAA SCI0DRL ; 虚拟读,清除接收标志位
CLR SCI0SR2
MOVW #$0104,SCI0BD ;设置波特率为 9600左右
CLR SCI0CR1 ;设置数据格式、停止位、奇偶校验
BCLR SCI0SR2,$80 ;使用普通寄存器设置 SR1, SCIBD
MOVB #$2C,SCI0CR2 ;使能接收中断,使能发送和接收模块
(2)编写中断处理(如果使能 了发送中断,也在这儿处理,共用一个中断向量)
MOVB #$0C,SCI0CR2 ; 进入中断后,第一步先关接收中断,以防多次中断。(注意发送和接收模块使能不能关) 中断模块的常见操作模式。
LDAA SCI0SR1 ;读SCI0SR1寄存器和SCI0DRL数据, 以清除接收满标志位
LDAB SCI0DRL
BRCLR SCI0SR1,mSCI0SR1_TDRE,* ;查询模式,检查发送缓冲器是否空
tx: LDAA SCI0SR1
STAB SCI0DRL ; 将接收到的数据发回
BRCLR SCI0SR1,mSCI0SR1_TC,* ;检查发送完成标志位
MOVB #$2C,SCI0CR2 ; 开接收中断