This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我将学习此微控制器的工作原理、但我在理解如何通过 SPI 正确设置两个 LAUNCHXL-F280049C 之间的通信时遇到问题。
我想使用 FIFO 中断、从主机向从机传输一个包含11个 uint16_t 类型元素的数组。 我的配置和代码如下(我使用的是 SysConfig)。
电路板1 TX ISR (主):
__interrupt void spiTxFIFOISR(){ for(i=0; i< dim; i++){ SPI_writeDataNonBlocking(mySPI0_BASE, data[i]); } counter++; SPI_clearInterruptStatus(mySPI0_BASE, SPI_INT_TXFF); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP6); }
电路板1 SysConfig:
电路板 2 RX ISR (从站):
__interrupt void spiRxFIFOISR(){ for (i = 0; i< dim; i++){ data[i] = SPI_readDataNonBlocking(mySPI0_BASE); } counter++; SPI_clearInterruptStatus(mySPI0_BASE, SPI_INT_RXFF); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP6); }
电路板2 SysConfig:
(请注意、我已经启用并重新映射了 main 的设置部分中的两个中断、这些中断不存在于显示的代码中)
我希望能正确接收我要在从机上发送的数据数组、但我看到的是、同一个数组在每次接收中断迭代时都已损坏。 您能解释一下我做错了什么吗? 我遵循 TI 为 SPI 通信提供的示例、但不明白我的错误在哪里。
左侧是我正在发送的阵列、右侧是我接收的阵列。
提前感谢您 。
此致、
埃多阿尔多
尊敬的 Edoardo:
您是否试用过 C2000ware 示例? 有一个示例使用来自单个 LaunchPad 的2个 SPI 实例。 您能否尝试这样做以确保在 TX 和 RX 中没有问题?
关于您使用2个 LaunchPad 的设置、请确保 SPI 引脚连接正确、都具有公共接地等。
此致、
维纳
尊敬的 Veena:
感谢您的答复。
我尝试了 C2000ware 示例中 SPI 的 ex4、并发现 我遇到的问题是 SysConfig 方面的。 我错误地设置了 FIFO 中断电平、这是因为我之前为接收器和发送器设置了相同的电平(11/16、因为我正在发送一个16元素数组)。 通过将 发送器 FIFO 电平配置为5/16并将接收器 FIFO 电平配置为11/16、我正在正确地接收数据、而数据未被分流。
但我真的不明白为什么。 我知道、中断会在相关 FIFO 包含许多等于该级别定义的元素时触发。 例如、如果 TX FIFO 中断级别为11/16、则在 TX FIFO 中有11个元素时中断本会被调用、根据同样的思路、如果 RX FIFO 中断级别为11/16、 当 RX FIFO 内部有11个元件时、中断会被触发。
您能告诉我在哪里误解了这个概念吗?
提前感谢您。
此致、
埃多阿尔多
在 TX FIFO 侧、TXFFIL= 11、当缓冲区中剩余11个或更少的字时将获得中断。 例如、如果你已经填充缓冲区已满(16个字)、中断在发送5个字后被触发。 5个字之后、TX FIFO 将包含11个字、这会触发中断。
此致、
维纳
尊敬的 Veena:
感谢您的答复。 现在一切都很清楚、我了解它应该如何工作。
此致、
埃多阿尔多