使用 SCI 模块进行串行通信
本示例展示了如何使用 SCI 模块在目标硬件和主机之间建立串行通信,以支持 C2000™ Microcontroller Blockset。
简介
通过这个示例,您将:
使用目标硬件上的 SCI Transmit 和 Receive 模块以及主机上的 Instrumentation Control Toolbox™ Serial Transmit 和 Receive 模块,建立目标硬件与主机之间的通信。
使用目标硬件上的 SCI Transmit 和 Receive 模块以及主机上的 MATLAB® 脚本,建立目标硬件与主机之间的通信。
使用轮询和中断方法接收目标硬件上的数据。
当发送速率比接收速率快时,使用帧大小来传输数据。
串行通信数据超过 FIFO 长度。
您还可以使用模型 c28x_sci_comm_interrupt_TopModel.slx 来执行模型参考工作流。有关更多信息,请参阅Model Reference Support for C2000 Processors。
前提条件
完成以下教程:
与目标硬件建立串行通信。C2000™ 处理器有多种不同的控制卡版本可供选择。在某些控制卡中,SCI_A 模块引脚直接连接到 USB 扩展坞,而其他控制卡则在控制卡上有一个用于 RS-232 通信的 MAX32xx 芯片。
所需硬件
任何 Texas Instruments C2000 板
使用主机上的串口发送和 Receive 模块实现主机与目标硬件之间的串口通信
在此任务中,您可以使用主机上的 Simulink® 模型将计数器数据从主机传输到目标硬件。当目标硬件通过轮询接收到数据时,它会将相同的数据传输回主机。主机随后显示已发送和已接收的信号。
目标模型
1.打开目标模型 c28x_sci_comm.slx。

2.示例模型配置为适用于 TI Piccolo F28069M Launchpad。要选择不同的目标硬件,请在 Simulink® 编辑器中浏览至配置参数 > 硬件实现 > 硬件板。
3.导航至硬件实现 > 目标硬件资源 > SCI_A,并将波特率设置为 115200。

4.该模型配置为在采样时间为 0.001 s 时接收不带报头和终止符的数据,并发送相同的数据。
5.下图显示了目标模型的 SCI 模块配置。双击模块即可打开模块参数配置。如果要在其他硬件板上运行此示例,请确保指定的参数值相同。

需要考虑的事项
配置 SCI Receive 模块时,必须考虑以下事项。在本例中,c28x_sci_comm.slx 模型配置为等待直到收到数据,并设置阻塞模式的超时时间。
阻塞模式 - 选择等待直到收到数据参数,并将超时设置为
inf。在这种模式下,如果 FIFO 中没有数据可供读取,则该模块将无限期地等待,直到有数据可供读取。阻塞模式带超时 - 选择等待直到收到数据参数,并将超时设置为
any finite value greater than 0。在此模式下,如果 FIFO 中没有数据可供读取,则该模块会检查 FIFO 状态,直到达到超时值。如果在规定时间内 FIFO 中没有数据可供读取,则 SCI Receive 模块将其状态输出为超时。非阻塞模式 - 不要选择等待直到收到数据参数。在此模式下,如果 FIFO 中存在数据,SCI Receive 模块将读取数据;否则,该模块将输出其状态为数据不可用。
为了接收长度超过 FIFO 长度的数据,可以使用阻塞模式或带超时的阻塞模式。这样可以确保在读取完 FIFO 中的整个数据后,还有额外的时间来获取 FIFO 中的剩余数据。
在启用或未启用超时的阻塞模式下,由于需要等待读取数据,可能会遇到任务超时的情况。
6.在“硬件”选项卡中点击构建、部署和启动或按 Ctrl+B 构建并下载可执行文件。

运行主机模型
1.打开主机 c2000_host_serial_comm.slx 模型。

2.要查看计算机上可用的 COM 端口列表,请选择开始 > 控制面板 > 设备管理器 > 端口 (COM & LPT)。
注意:图中所示的 COM 端口仅用于说明目的,您的计算机上的端口可能有所不同。选择适用于您计算机的 COM 端口。

3.配置设备以启用主机串行设置、主机串行发送和主机串行接收模块。请确保在 Host Serial Setup 模块中将波特率设置为 115200。

4.将停止时间设置为 Inf,然后点击运行下拉菜单,并启用仿真步速,以确保与目标进行实时通信。

5.点击运行
6.比较从目标硬件接收的串行数据和从主机发送的串行数据。

使用主机上的 MATLAB 脚本在主机和目标硬件之间进行串行通信
在本任务中,您将使用主机上的 MATLAB® 脚本,将 uint8 数据从主机传输到目标硬件。当目标硬件在中断中接收到数据时,它会将相同的数据传输回主机。然后主机在 MATLAB 命令行窗口中显示接收到的数据。
目标模型
1.打开目标模型 c28x_sci_comm_interrupt.slx。

2.示例模型配置为适用于 TI Piccolo F28069M Launchpad。要选择不同的目标硬件,请在 Simulink® 编辑器中浏览至配置参数 > 硬件实现 > 硬件板。
3.导航至硬件实现>目标硬件资源>SCI_A,并确保将波特率设置为 115200。

4.目标硬件通过中断接收数据。SCIA_RX 用于接收中断级别 1。
5.以下是目标模型的 SCI 模块配置。双击模块即可打开模块参数配置。请按照任务 1 中的注意事项部分进行操作。如果要在其他硬件板上运行此示例,请确保指定的参数值相同。在本例中,c28x_sci_comm_interrupt.slx 模型配置为等待直到收到数据,并设置阻塞模式超时。

6.接收到新数据后,会触发中断,目标硬件会将接收到的数据发送出去。
7.在“硬件”选项卡中点击构建、部署和启动或按 Ctrl+B 构建并下载可执行文件。
使用 MATLAB 脚本在主机上运行
1.要使用 MATLAB 脚本在主机上运行模型,请使用 COM 端口作为输入参量,并使用波特率作为可选输入参量。如果没有提供波特率,则默认使用 115200 波特率。
2.要查看计算机上可用的 COM 端口列表,请选择开始 > 控制面板 > 设备管理器 > 端口 (COM & LPT)。

3.在 MATLAB 命令提示符下运行以下命令。请提供您电脑的 COM 端口号。例如,
c2000HostSCICommunication('COM7', 115200);
4.根据提示提供 uint8 数据作为输入。
5.请注意,在 MATLAB® 命令行窗口中接收到相同的数据。

使用帧大小传输数据
在此任务中,您可以使用主机上的 Simulink® 模型,将大小超过一定值的帧从主机传输到目标硬件。然后主机以较慢的速度显示传输的信号。
目标模型
1.打开目标模型 c28xsciframetx.slx。

2.示例模型配置为适用于 TI Delfino F28379D Launchpad。要选择不同的目标硬件,请在 Simulink® 编辑器中浏览至配置参数 > 硬件实现 > 硬件板。
3.导航至硬件实现>目标硬件资源>SCI_A,并确保将波特率设置为 5e6。

4.该模型配置为在采样时间为 0.03s 时接收带有报头和终止符的数据,并且数据以 ADC 中断确定的速率(即 5e-6)进行传输。
5.以下是目标模型的 SCI 模块配置。双击模块即可打开模块参数配置。如果要在其他硬件板上运行此示例,请确保指定的参数值相同。

您将以 ADC 中断确定的速率传输帧大小大于 1 的数据。输入到 DAC 的数据由 ADC 读取,然后通过 SCI 发送模块发送出去。转换完成后,ADC 会发送中断。ADC 转换的开始由 ePWM1 触发。主机模型以较慢的速率 (0.03sec) 接收传输的数据。
6.在“硬件”选项卡中点击构建、部署和启动或按 Ctrl+B 构建并下载可执行文件。
在主机模型上运行
1.打开主机 c28xsciframehostmodel.slx 模型。

2.要查看计算机上可用的 COM 端口列表,请选择开始 > 控制面板 > 设备管理器 > 端口 (COM & LPT)。

3.配置设备以启用主机串行设置和主机串行接收模块。请确保在 Host Serial Setup 模块中将波特率设置为 5.625e6。

4.点击运行。观察示波器上接收到的数据。
串行通信数据超过 FIFO 长度
利用目标设备上的缓冲区来管理超过 FIFO 容量的数据大小,从而促进主机和目标设备之间的数据传输。有关缓冲区实现的更多信息,请参阅 Buffer Logic for Data Transmission。
目标模型
1.打开目标模型 c28xSCIRxDataWithBuffer.slx。

2 示例模型配置为 TI F280013x 控制卡。要选择不同的目标硬件,请在 Simulink® 中浏览至配置参数 > 硬件实现 > 硬件板。
3.导航至硬件实现 > 目标硬件资源 > SCI_A,并将波特率设置为 115200。
4.选择与缓冲区大小一致的 FIFO 级别,并确保缓冲区和 FIFO 大小都是 FIFO 级别的倍数。在本例中,接收 FIFO 中断级别设置为 8。

以下解释详细说明了 FIFO 级别 8 的确定方法。
FIFO 级别优化
为了优化数据传输并防止数据丢失,将 FIFO 级别配置为处理器 FIFO 大小和缓冲区大小的完美倍数。此外,将 FIFO 级别设置为仅处理其容量的 50%,以避免溢出并确保可靠的数据处理。
假设您想使用 TI F280013x 硬件板传输 100 个 uint32 数据元素,FIFO 大小为 16 字节。
100 个 uint32 数据元素,对应于 400 字节。如果将 FIFO 级别配置为 2 个 uint32 元素,则对应于 8 个字节。对于 8 个 uint32 元素的 FIFO 级别,FIFO 利用率为 50%,确保不会丢失数据。这种配置效果很好,因为 400 字节的缓冲区大小是 FIFO 级别的倍数。
假设您要处理字节数为奇数的数据。
例如,如果缓冲区大小为 93 字节,则 93 的唯一有效倍数是 1。在这种情况下,将 FIFO 级别设置为 1,并将 SCI 接收模块配置为在 ISR 中读取长度为 1 的 uint8 数据。接收 100 个 uint32 数据元素,对应于 400 字节。
5.分配 GPIO 引脚:将 INPUT4 引脚设置为 0(例如,使用 GPIO 0)。

6.下图显示了目标模型配置。双击模块即可打开模块参数配置。如果要在其他硬件板上运行此示例,请确保指定的参数值相同。
SCI Receive 模块
SCI Receive 模块设置为一次接收两个 uint32 值。

通过硬件映射实现 SCI 中断和外部中断
在硬件选项卡中点击硬件映射,然后配置 SCI 接收中断和外部中断。

Data Store Memory 模块
在 Data Store Memory 模块中,将数据类型设置为 uint32,将维度设置为 100。

需要进行更新以处理与默认值不同的数据
在示例中执行这些更新,即可获得不同的数据类型和缓冲区大小。
使用新值更新 SCI Receive 模块的数据类型和数据长度。
计算触发中断服务例程 (ISR) 的适当先进先出 (FIFO) 水平并设置该值。导航至配置参数> 硬件实现> 目标硬件资源> SCI_A,并设置接收 FIFO 中断级别。
更新 MATLAB 函数
dataBufferImpl中的bufferSize。使用匹配的数据类型和缓冲区大小更新数据存储内存模块
dataOutput。
7.在硬件选项卡中点击构建、部署和启动或按 Ctrl+B 构建并下载可执行文件。
运行主机模型
1.打开主机 c28xSCIRxDataWithBufferHostModel.slx 模型。

2.选择适用于您计算机的 COM 端口。要查看计算机上可用的 COM 端口列表,请选择开始 > 控制面板 > 设备管理器 > 端口 (COM & LPT)。
3.配置设备以启用主机串行设置、主机串行发送和主机串行接收模块。请确保在 Host Serial Setup 模块中将波特率设置为 115200。
4.将停止时间设置为 Inf,然后点击运行下拉菜单,并启用仿真步速,以确保与目标进行实时通信。

5.点击运行。
6.比较从目标硬件接收的串行数据和从主机发送的串行数据。

需要考虑的事项
确保数据处理速度快于串行数据接收速度,以防止数据丢失。
考虑实施完整的握手机制来控制数据接收并使其与处理速度保持一致。有关更多信息,请参阅Interface LCD Booster Pack with Texas Instruments C2000 Processors。
其他可以尝试的操作
在目标上运行 c28x_sci_comm_interrupt.slx 时,使用 Simulink® 主机模型 c2000_host_serial_comm.slx 发送和接收计数器数据。
在目标上运行 c28x_sci_comm.slx 时,使用 c2000HostSCICommunication MATLAB 脚本发送和接收 uint8 数据。