DSP28335的SCI模块(串行通信接口)

一、原理

二、SCI常用寄存器(SciaRegs、ScibRegs、ScicRegs)

2.1 SCI通信控制寄存器(SCICCR)

Bit

Name

Description

15~8

RESERVED

7

STOPBITS

停止位个数

0:一位停止位

1:两位停止位

6

PARITY

奇偶校验位

0:奇校验

1:偶校验

5

PARITYENA

奇偶校验使能

0:禁止

1:使能

4

LOOPBKENA

自测模式(回送测试)使能

0:禁止

1:使能

3

ADDRIDLE_MODE

多处理器模式控制

0:选择空闲线协议

1:选择地址位协议

2~0

SCICHAR

字符长度控制

000:1位

…………

111:8位

2.2 SCI控制寄存器1(SCICTL1)

Bit

Name

Description

15~7

RESERVED

6

RXERRINTENA

SCI接收错误中断使能

0:屏蔽

1:使能

5

SWRESET

SCI软件复位(低有效)

0:初始化SCICTL2和SCIRXST寄存器各标志位至复位状态

4

RESERVED

3

TXWAKE

SCI发送器唤醒方式选择

0:不唤醒

1:发送模式唤醒,地址位模式或空闲线模式

2

SLEEP

SCI休眠

0:禁止休眠状态

1:启动休眠状态

1

TXENA

SCI发送器使能

0:禁止发送器

1:使能发送器

0

RXENA

SCI接收器使能

0:禁止发送

1:将接收的字符发送到SCIRXEMU和SICRXBUF

2.3 SCI控制寄存器2(SCICTL2)

Bit

Name

Description

15~8

RESERVED

7

TXRDY

发送缓冲寄存器就绪标志

0:发送数据缓冲寄存器已满

1:发送数据缓冲寄存器准备接收下一个字符

6

TXEMPTY

发送器空标志

0:发送缓冲寄存器和发送移位寄存器未发送完

1:发送缓冲寄存器和发送移位寄存器为空

5~2

RESERVED

1

RXBKINTENA

SCI接收中断使能

0:屏蔽

1:使能RXRDY/BRKDT中断

0

TXINTENA

SCI发送中断使能

0:屏蔽

1:使能TXRDY中断

2.4 SCI波特率设置寄存器(BRR = SCIHBAUD:SCILBAUD)

SCI波特率常用选择参数

理想波特率

BRR

2400

1952(0x7A0)

4800

976(0x3D0)

9600

487(0x1E7)

19200

243(0xF3)

38400

121(0x79)

2.5 SCI接收状态寄存器(SCIRXST)

Bit

Name

Description

15~8

RESERVED

7

RXERROR

SCI接收错误标志位

0:错误标志未置位

1:错误标志置位

6

RXRDY

SCI接收就绪标志位

0:没有新数据可读

1:新数据可读

5

BRKDT

SCI间断检测标志位

0:无间断事件

1:有间断事件

4

FE

SCI数据帧格式错误

0:数据帧格式正确

1:数据帧格式错误

3

OE

SCI数据覆盖错误

0:覆盖错误未发生

1:覆盖错误发生

2

PE

SCI奇偶校验错误标志位

0:奇偶校验无错误或无奇偶校验位

1:奇偶校验错误

1

RXWAKE

接收唤醒位

1:表明收到一个唤醒接收功能的信号

0

RESERVED

2.6 SCI接收数据缓冲寄存器(SCIRXBUF)

Bit

Name

Description

15

SCIFFFE

SCI FIFO帧格式错误标志位

0:接收字符7~0位时,无帧格式错误

1:接收字符7~0位时,有帧格式错误

14

SCIFFPE

SCI FIFO奇偶校验错误标志位

0:接收字符7~0位时,无奇偶校验错误

1:接收字符7~0位时,有奇偶校验错误

13~8

RESERVED

7~0

RXDT

接收的字符

2.7 SCI发送数据缓冲寄存器(SCITXBUF)

Bit

Name

Description

15~8

RESERVED

7~0

发送的字符

2.8 SCI优先级控制寄存器(SCIPRI)

Bit

Name

Description

15~5

RESERVED

4~3

FREESOFT

当一个仿真暂停事件发生后,SCI模块的动作

00:暂停情况下立即停止

10:完成当前数据的发送/接收后停止

x1:连续运行,停止命令无效

2~0

RESERVED

2.9 SCI FIFO发送寄存器(SCIFFTX)

Bit

Name

Description

15

SCIRST

SCI复位

0:复位SCI接收与发送通道

1:SCI FIFO继续发送或接收

14

SCIFFENA

SCI FIFO使能位

0:FIFO被屏蔽

1:FIFO使能

13

TXFIFORESET

发送FIFO复位

0:复位FIFO指针指向0并保持复位状态

1:重新使能发送FIFO

12~8

TXFFST

发送FIFO状态

发送FIFO中有几个字节的数据

0x0:0个

………

0x10:16个

7

TXFFINT

发送FIFO中断

0:发送FIFO中断未发生

1:发送FIFO中断发生

6

TXFFINTCLR

发送FIFO中断清除位

0:无影响

1:清除发送中断TXFFINT标志

5

TXFFIENA

发送FIFO中断使能

0:屏蔽

1:使能TXFIFO中断

4~0

TXFFIL

发送FIFO中断级别位

每当FIFO状态位(TXFFST4~0)小于或等于FIFO中断级别位(TXFFIL4~0)时,发送FIFO会产生中断。

2.10 SCI FIFO接收寄存器(SCIFFRX)

Bit

Name

Description

15

RXFFOVF

接收FIFO溢出

0:接收FIFO没有溢出

1:接收FIFO溢出,FIFO收到超过16帧数据,并且收到的第一帧数据已经丢失

14

RXFFOVRCLR

RXFFOVF清除位

0:无影响

1:清除RXFFOVF标志位

13

RXFIFORESET

接收FIFO复位

0:复位FIFO指针指向0并保持复位状态

1:重新使能接收FIFO

12~8

RXFFST

接收FIFO状态

接收FIFO中有几个字节的数据

0x0:0个

………

0x10:16个

7

RXFFINT

接收FIFO中断

0:接收FIFO中断未发生

1:接收FIFO中断发生

6

RXFFINTCLR

接收FIFO中断清除位

0:无影响

1:清除接收中断RXFFINT标志

5

RXFFIENA

接收FIFO中断使能

0:屏蔽

1:使能RXFIFO中断

4~0

RXFFIL4~0

接收FIFO中断级别位。

每当FIFO状态位(RXFFST4~0)大于或等于FIFO中断级别位(RXFFIL4~0)时,接收FIFO会产生中断。

2.11 SCI FIFO控制寄存器(SCIFFCT)

Bit

Name

Description

15

ABD

波特率自动检测位

0:非自动检测

1:自动检测

14

ABDCLR

ABD清除位

0:无影响

1:清除ABD位

13

CDC

CDC校准检测位

0:禁止波特率自动检测的校准

1:允许波特率自动检测的校准

12~8

RESERVED

7~0

FFTXDLY

FIFO发送延时(每个FIFO帧数据从FIFO传送到发送移位寄存器的间隔时间)

延时时间=波特率时钟的整数倍,范围是0~256个波特率时钟。

三、串口配置步骤

#include "uart.h"


void UARTa_Init(Uint32 baud)
{
	unsigned char scihbaud=0;
	unsigned char scilbaud=0;
	Uint16 scibaud=0;

	scibaud=37500000/(8*baud)-1;
	scihbaud=scibaud>>8;
	scilbaud=scibaud&0xff;

	// step1 使能SCI外设时钟
	EALLOW;
	SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;   // SCI-A
	EDIS;

	// step2 SCI初始化GPIO
	InitSciaGpio();

	// step3 SCI工作参数配置,包括数据格式、使能发送接收、波特率、FIFO等

	SciaRegs.SCICCR.all=0x0007; // 1 stop bit, 8 char bits,
							    // No parity,  No loopback
								// async mode, idle-line protocol

	SciaRegs.SCICTL1.all=0x0003; // 启用软件复位
                                 // 使能SCI发送和接收功能
								 // 禁止RX ERR, SLEEP, TXWAKE

	SciaRegs.SCICTL2.all=0x0003; // 使能SCI发送和接收中断

	// 波特率设置
	SciaRegs.SCIHBAUD=scihbaud; // 4800 baud @LSPCLK = 37.5MHz.
	SciaRegs.SCILBAUD=scilbaud;

	SciaRegs.SCICTL1.all=0x0023;  // 从复位状态释放

	// FIFO初始化
	SciaRegs.SCIFFTX.all=0xE040; // 使能发送FIFO
	                             // 清除发送中断TXFFINT标志

	SciaRegs.SCIFFRX.all=0x204F; // 使能接收FIFO
	                             // 清除接收中断RXFFINT标志
	                             // 接收FIFO中断级位为15

	SciaRegs.SCIFFCT.all=0x0; // 禁止波特率自动检测功能
}


// SCI单字节发送函数
void UARTa_SendByte(int a)
{
	while (SciaRegs.SCIFFTX.bit.TXFFST != 0); //查询发送完成标志
	SciaRegs.SCITXBUF=a;
}

// SCI字符串(多字节)发送函数
// 函数参数是一个字符指针类型。
// 函数内当遇到字符串结尾‘\0’自动停止发送。
void UARTa_SendString(char * msg)
{
	int i=0;
	while(msg[i] != '\0')
	{
		UARTa_SendByte(msg[i]);
		i++;
	}
}
-------------------------------------------------------------------------------------------------------
void main()
{

	char *msg;
	Uint16 ReceivedChar=0;

	InitSysCtrl();
	InitPieCtrl();
	IER = 0x0000;
	IFR = 0x0000;
	InitPieVectTable();

	LED_Init();
	TIM0_Init(150,200000);//200ms
	UARTa_Init(4800);

	msg = "Hello World!\r\n";
	UARTa_SendString(msg);
	msg = "You will enter a character, and the DSP will echo it back!\r\n";
	UARTa_SendString(msg);

	while(1)
	{
		msg = "\r\nEnter a character: ";
		UARTa_SendString(msg);

		// SCI接收字节函数
		// 判断接收完成标志
		while(SciaRegs.SCIFFRX.bit.RXFFST !=1);
		// 接收数据
		ReceivedChar = SciaRegs.SCIRXBUF.all;

		// 回显字符
		msg = "  You sent: ";
		UARTa_SendString(msg);
		UARTa_SendByte(ReceivedChar);

		DELAY_US(1000);
	}
}

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DSP28335中,SCI是指串行通信接口(Serial Communication Interface),可以通过SCI实现串口通信。SCI包含了发送(TX)和接收(RX)功能,可以通过配置SCI的GPIO管脚来进行初始化。 首先,要初始化SCI的GPIO管脚。以SCI-A为例,需要将GPIO35和GPIO36配置为SCI功能管脚,并设置为上拉和异步输入模式。以下是示例代码: ```c void InitSciaGpio() { EALLOW; GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0; // 上拉(SCIRXDA) GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0; // 上拉(SCITXDA) GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3; // 异步输入模式 GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1; // 配置为SCI-A引脚 GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1; // 配置位SCI-A引脚 EDIS; } ``` 接下来,可以进行SCI的FIFO初始化。具体的FIFO初始化操作可以在初始化函数中进行。没有提供具体的初始化代码,但你可以根据需要设置FIFO的深度以及其他相关参数。 通过上述的初始化步骤,你可以配置DSP28335SCI接口,从而实现串口通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [DSP28335SCI_FIFO中断字符串接收与回发](https://download.csdn.net/download/qq_50689146/85010423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [TMS320F28335项目开发记录10_28335SCI模块](https://blog.csdn.net/scottly1/article/details/40392033)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [DSP28335SCI模块简介和配置](https://blog.csdn.net/qq_44920122/article/details/129660796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值