主要内容

本页采用了机器翻译。点击此处可查看英文原文。

数据传输缓冲逻辑

串行通信接口 (SCI) 缓冲逻辑使用 Data Store Memory 块中的全局变量 dataOutput 来管理主机和目标硬件之间的数据传输。使用此方法管理来自超过 FIFO 大小的通信模块的数据,方法是将传入的数据临时存储在缓冲区中,并且仅在缓冲区满时才访问它。有关详细信息,请参阅使用 SCI 模块进行串行通信

本文以目标模型为例,演示了数据传输的缓冲逻辑。要从 MATLAB® 命令行窗口打开 Simulink® 目标模型,请使用以下命令:

open_system('c28xSCIRxDataWithBuffer.slx');
SCI Target Model

缓冲区管理

  • 接收到的数据会存储在缓冲区中,直到缓冲区达到容量上限。

  • 当缓冲区满时,GPIO 引脚会切换状态以指示准备就绪,从而触发外部中断。

  • 中断会启动数据传输并重置 GPIO 信号。

了解 MATLAB 函数 dataBufferImpl 中的缓冲区实现

缓冲区被定义为使用 Data Store Memory 块的全局变量。缓冲区处理逻辑在 MATLAB 脚本中实现,然后使用 MATLAB 函数块在 Simulink 中调用该脚本。该函数将传入的数据存储到缓冲区中,并在缓冲区满时触发信号。

输入

  • dataInput:待缓冲的数据。

输出

  • dataReady:指示缓冲区是否已满的标志。

关键点

  1. Buffer Size:缓冲区大小。

  2. Buffer Initialization:初始化一个持久缓冲区 (cachedDataOutput) 以临时存储传入的数据。

  3. Data Storage:使用全局变量 dataOutputcachedDataOutput 复制已缓冲的数据(数据准备就绪后)。

  4. C Function Integration:在代码生成期间调用外部 C 函数 copyDataIntoBuffer,将输入数据复制到缓冲区中。C 函数用于使用指针高效地处理内存操作。

  5. Buffer Full Signal:cachedDataOutput 缓冲区已满时,将 dataReady 设置为 1,并将缓冲的数据复制到 dataOutput

C 函数:将数据复制到缓冲区

根据缓冲区容量,将输入数据复制到缓冲区中。

输入

  • dataOutput:指向用于存储数据的缓冲区的指针。

  • dataInput:指向传入数据的指针

  • dataInputSize:传入数据的大小。

  • bufferSize:总缓冲容量。

输出

如果缓冲区已满且数据已准备就绪,则返回 1;否则,返回 0。

另请参阅

主题