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.

[参考译文] CCS/MSP430F5529:SPI 通信 USCIB0、无传输

Guru**** 2042910 points
Other Parts Discussed in Thread: MSP430F5529
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/682810/ccs-msp430f5529-spi-communication-uscib0-no-transfer

器件型号:MSP430F5529

工具/软件:Code Composer Studio

您好!
我想设置一个从 MSP430F5529到显示屏的 SPI 通信。 我正在使用 libary 来控制显示、但我必须设置 SPI 协议以实现更快的传输。

库有四个函数(用于传输)、按以下顺序调用:

  1. U8X8_MSG_BYTE_INIT
  2. U8X8_MSG_BYTE_START_TRANSFER
  3.  U8X8_MSG_BYTE_SEND 和的任意组合  U8X8_MSG_BYTE_SET_DC
  4. U8X8_MSG_BYTE_END_TRANSFER

U8X8_MSG_BYTE_INIT 用于 SPI 的初始化。  U8X8_MSG_BYTE_SEND 该函数用于数据的传输。  我需要发送 arg_int 字节,因为 arg_ptr 它将指向大小为 arg_int的缓冲区。 芯片选择/从器件选择在 U8X8_MSG_BYTE_START_TRANSFIT 和 U8X8_MSG_BYTE_END_TRANSFERIT 中是韩式的、因此我不必处理它。

我在铭牌中要替换的两条语句:

案例 U8X8_MSG_BYTE_INIT:

P3SEL |= BIT0+BIT1 + BIT2;// P3.0、1、2选项选择 MOSI MISO CLK
UCB0CTL1 |= UCSWRST;//**将状态机置于复位状态**
UCB0CTL0 |= UCMST+UCSYNC+UCMSB;//UCMODE_2;// 3引脚8位 SPI 主器件
// MSB、时钟极性高
UCB0CTL1 |= UCSSEL_2;// SMCLK 时钟 Auswahl
UCB0BR0 = 0x04;//波特率13Mhz /4
UCB0BR1 = 0;//时钟频率由 UCB0BR0 + UCB0BR1 * 256缩放
UCB0CTL0 &=~UCCKPL;//时钟极性
UCB0CTL0 &=~UCCKPH;//时钟相位



UCB0CTL1 &=~UCSWRST;
UCB0IE |= UCRXIE+UCTXIE;//启用 USCI_B0 RX+TX 中断
中断;

和:

uint8_t *数据; 

案例 U8X8_MSG_BYTE_SEND: 数据=(uint8_t *) arg_ptr; while (!(UCB0IFG&UCTXIFG));// USCI_B0 TX 缓冲区准备就绪? while (arg_int >0) { while (!(UCB0IFG&UCTXIFG));// USCI_B0 TX 缓冲区准备就绪? _DELAY_CYCLES (20); P2DIR |= BIT3; P2OUT |= BIT3; UCB0TXBUF =*数据; arg_int--; Data++; } 中断;

我现在在故障排除中遇到了几天的问题。 我已经检查了许多示例和数据表、但我找不到故障/故障、
 如果有一些帮助、我将不胜感激。 谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不确定您描述的症状是什么、但这看起来很可疑:
    > UCB0IE |= UCRXIE+UCTXIE; //启用 USCI_B0 RX+TX 中断
    您的其他代码片段表示您未使用中断、因此您不应启用中断(具体而言:删除此行)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我没有向显示屏传输数据。 好的、我删除了该行。 谢谢。
    引脚2.3上只有一个小 LED。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、这对您的症状有什么影响吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我有一个数据传输到显示器。 谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:MSP430F5529

    工具/软件:Code Composer Studio

    您好!
    我想设置 从 MSP430F5529 到显示屏的快速 SPI 通信。 我正在使用 libary 来控制显示、但我必须设置 SPI 协议以实现更快的传输。

    库有四个函数(用于传输)、按以下顺序调用:

    1. U8X8_MSG_BYTE_INIT
    2. U8X8_MSG_BYTE_START_TRANSFER
    3.  U8X8_MSG_BYTE_SEND 和的任意组合  U8X8_MSG_BYTE_SET_DC
    4. U8X8_MSG_BYTE_END_TRANSFER

    U8X8_MSG_BYTE_INIT 用于 SPI 的初始化。  U8X8_MSG_BYTE_SEND 该函数用于数据的传输。  我需要发送 arg_int 字节,因为 arg_ptr 它将指向大小为 arg_int的缓冲区。 芯片选择/从器件选择在 U8X8_MSG_BYTE_START_TRANSFIT 和 U8X8_MSG_BYTE_END_TRANSFERIT 中是韩式的、因此我不必处理它。

    我必须在模板中替换两个语句:

    案例 U8X8_MSG_BYTE_SEND:
    数据=(uint8_t *) arg_ptr;
    while (arg_int >0)
    {
    while (!(UCB0IFG&UCTXIFG)); // USCI_B0 TX 缓冲器就绪?
    UCB0TXBUF =*数据;
    while (UCB0STAT 和 UCBUSY);
    arg_int--;
    Data++;
    }
    中断; 
    案例 U8X8_MSG_BYTE_INIT:
    P3SEL |= BIT0+BIT1 + BIT2; // P3.0、1、2选项选择 MOSI MISO CLK
    UCB0CTL1 |= UCSWRST; //**将状态机置于重置中**
    UCB0CTL0 |= UCMST+UCMSB+UCSYNC+UCCKPL; // 3引脚、8位 SPI 主器件
    // MSB
    UCB0CTL1 |= UCSSEL_2; // SMCLK 时钟 Auswahl
    UCB0BR0 = 140; //波特率13Mhz
    UCB0BR1 = 0; //时钟频率由 UCB0BR0 + UCB0BR1 * 256缩放
    UCB0CTL0 &=~UCCKPH; //时钟相位
    //UCB0CTL0 &=~UCCKPL;
    //UCB0CTL0 &=~UC7BIT;
    UCB0CTL1 &=~UCSWRST;
    中断; 

    我的问题是、传输仅在 高达 10kHz 的频率下工作正常。 如果我提高频率、它将无法正确传输。 没有中断、是否能够实现更快的 SPI 传输? 谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    10kHz 速度不是很快;我不会期望在该速度下出现故障。 您能否看到错误数据的样子(例如、在示波器上)?

    需要检查的事项:
    1) 1)这是从机(显示屏)中的速度限制吗? 数据表中应该会显示。
    2) 2)您是否相当确定时钟相位和极性设置? 慢速传输可能会"原谅"一些错误配置。 (有时、我会尝试全部四种组合。)
    3) 3)您的导线有多长? 我在长距离导线上看到了传播错误(尽管可以承认、这些导线是以8MHz 运行的10英寸导线)。

    我经常运行多 MHz SPI、因此这不是 USCI 限制。 对于快速时钟、我不建议使用中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    从我的角度来看、传输看起来是正确的。 我是否仍应该上传逻辑分析仪的屏幕截图?

    1) 1)最大速度为~8.3MHz。 (来自显示数据表)

    2) 2)我没有尝试过任何组合:它可以使用

    • KPL = 0;KPH = 1
    • KPL = 1;KPH = 0
    • KPL = 1;KPH = 1

    但是只有10kHz…

    数据表的屏幕截图:

    3) 3)长约15厘米。 因此不会出现问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >如果我提高频率、则表示传输不正确。

    >从我的角度来看,传输看起来是正确的。
    我只是想弄清楚这是一个故障还是一个不够快的问题。 您在其他地方看到的症状是什么?

    另一个需要注意的问题是:我看到了显示数据表、其中规定了某些事务(通常是初始化期间的命令)之后的延迟、以便为器件提供处理这些事务的时间。 我假设这些延迟是由您的库强制执行的、但如果其中一个延迟不正确、则慢速 SPI 会引入隐式延迟(10kHz 时的一个字节为800usec)、该延迟可能是"修复"的内容。 您有库的源吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    加布里埃尔

    请查看以下应用手册。 它将帮助您从 MSP430 SPI 方面调试此问题。 http://www.ti.com/lit/slaa734
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Bruce McKenney47378"]您是否拥有该库的源代码?

    库是开源的: github.com/.../u8g2

    [引用用户="Bruce McKenney47378"]我只是想弄清楚这是一个故障还是一个不够快速的问题。

    在高达10kHz 的时钟频率下、显示屏工作正常、但显示屏能够处理7MHz 的频率、我至少需要500MHz 的频率。

    我已经在 Arduino 之外的微控制器和软件 SPI 中实现了对库的一般使用的延迟。 我已使用  "_delay_cycles ()" 作为延迟。 这可能是问题吗?  

    [引用用户="Bruce McKenney47378"]另一件事需要注意:我看到了显示的数据表、其中规定了某些事务(通常是初始化期间的命令)之后的延迟、以便为器件提供处理这些事务的时间。

    我在数据表 中没有发现任何规定的延迟:www.lcd-module.de/.../uc1611s_v1_0.pdf

    700MHz 和不同的控制器都能正常工作、所以我认为在执行某些命令后不需要延迟。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当您运行得太快时、症状是什么?

    另外:如何处理 U8X8_MSG_BYTE_SET_DC? 是的、我希望它非常简单、但有时它所需的只是一个拼写错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Bruce McKenney47378"]运行过快时出现什么症状?

    它不显示任何内容、尽管存在传输。  

    [引用用户="Bruce McKenney47378">另外:如何处理 U8X8_MSG_BYTE_SET_DC? 是的、我希望它非常简单、但有时它所需的只是一个拼写错误。

    数据/命令行的输出电平已在 GPIO 映射中处理。


    案例 U8X8_MSG_BYTE_SET_DC: u8x8_GPIO_SetDC (u8x8、arg_int); 中断; //在 GPIO 映射 情况下 U8X8_MSG_GPIO_DC:// DC (DATA/CD、A0、寄存器选择)引脚:arg_int 中的输出电平 if (arg_int) { P4OUT |= BIT2; } 其他 { P4OUT &=~BIT2; } 中断;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    在 LCD 上形成信息、应使 UCKPH =0且 UCKPL =1。 此外、您可以使用我之前发布的应用手册中描述的公式来取消 MSP430F5529可连接到 LCD 的最大速度。 我尚未完成计算、但您将无法到达500MHz 附近的任何位置。 不过、500kHz 是可能的。 这个 LCD 似乎需要一条额外的线路来告诉它您是提供命令还是数据、并且它似乎需要保持高电平至少一个 SPI 时钟周期。 我会在您的逻辑分析仪或 o 示波器上再次检查此计时、以确保保持正确的时间量。