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/TMS320F28335:使用 SPI 模块的 TFT-LCD 控制

Guru**** 2522770 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/614083/ccs-tms320f28335-tft-lcd-control-using-spi-module

器件型号:TMS320F28335

工具/软件:Code Composer Studio

大家好、我尝试使用硬件 SPI 来控制 TFT-LCD。 在使用软件 SPI 时、LCD 可能会出现故障。

我的代码中唯一的区别是、如果#define USE_hardware_SPI、WriteData 函数将使用 SPI 模块或使用软件 SPI。

这里是我的 SPI 配置代码、实际上我参考了示例代码:

void SPI_Init (void){
   InitSpiaGpio();
   SpiaRegs.SPIFFTX.All=0xE040;
   SpiaRegs.SPIFFRX.All=0x204f;
   SpiaRegs.SPIFFCT.All=0x0;             //delay=0
   SpiaRegs.SPICCR.all =0x0007;                //复位打开、上升沿、8位字符位
   SpiaRegs.SPICTL.ALL =0x0006;                //启用主控模式、正常相位、
                                                   //启用 TALK、禁用 SPI int。
   SpiaRegs.SPIBRR = 0x007F;
   SpiaRegs.SPICCR.all =0x0087;                //从复位中撤回 SPI
   SpiaRegs.SPIPRI.bit.FREE = 1;               //设置断点以避免干扰 xmission

void SPI_WriteData_Hardware (无符号字符数据){
   uint16 temp、clear;
   temp=数据;
   SpiaRegs.SPITXBUF=(temp<8);
   while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}
   CLEAR_SpiaRegs.SPIRXBUF;

问题是、当我构建项目时、CCS 将发出警告:

设置了变量"Clear (清除)"、但从未使用过。

实际上、当我逐步运行它时、程序可以运行函数 SPI_WriteData_Hardware 中的最后一步。 但 LCD 仍然无法显示。 我认为 SPI 可能是问题所在。

请帮帮我。 非常感谢。

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    现在我找到了一些新东西。
    如果我没有分步运行程序(并且没有断点)一段时间、并且将其挂起、 然后、当我逐步复位并运行它时(当它开始初始化 LCD 时有一个断点、在这里它暂停并且我逐步运行接下来的几个 WriteData 函数)、再说一次、将永远不会使用变量"clear"并且程序将始终循环。

    PS:主要功能发布如下

    #include "DSP28x_Project.h"
    #include "tft.h"
    #include "font.h"
    #include "spi.h"

    void main (void){
    InitSysCtrl();
    Dint;
    InitPieCtrl();
    IER = 0x0000;
    IFR=0x0000;
    InitPieVectTable();
    TFT_Init();
    TFT_CLEAR (黑色);
    while (1){
    TFT_drawstring_16 (0、30、白色、黑色、"V");

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

    可以安全地忽略有关变量"清除"的警告。 编译器不知道您只是使用它来执行 RX 缓冲区的虚拟读取、并且 SpiaRegs 具有易失性、因此您不必担心该线路会得到优化。

    我看到您共享的代码没有任何问题。 由于您一次只发送一个字节、因此使用 FIFO 并不是真正必要的、但我认为它也没有任何问题。

    您如何配置要用作 SPI 引脚的引脚? 问题可能出在这里。

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

    感谢你的答复。

    在配置 SPI 时、需要小心使用 FIFO。 )

    InitSpia()将 GPIO16设置为19作为 SPI,我的 TFT 的2个引脚必须连接到 SPI。 它们是:
    SDA 和 SCL (RST、RS、CS 等其他引脚已连接到其他 GPIO 以满足其电气电平要求)

    GPIO16 (SPISIMOA)->SDA
    GPIO17 (SPISOMIA)->GND (因为我认为不必发回任何数据)
    GPIO18 (SPISCKA)->SCL
    GPIO19 (SPISTEA)被挂起

    我知道 SPISTEA 通常用作芯片选择信号。 但是、由于我不熟悉 SPI、我选择将其挂起)。

    除了我在函数 SPI_Init 中所做的工作外、我是否需要为 SPI 引脚的配置做更多的事情?


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

    那么您在 TFT_Init()中调用 InitSpia()吗?

    我不明白你说 SPISTEA 被"暂停"是什么意思。 您是将 CS 连接到 GPIO、还是在发送数据时将其置为有效、还是将其绑定到常数值?

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

    是的,我在 TFT_Init()中调用 InitSpia()。

    其他引脚连接到配置为通用输出的 GPIO 引脚。 例如、RST 连接了 GPIO15、如果我需要复位 TFT、我会写入命令" GpioDataRegs.GPASET.bit.GPIO15=1"。

    感谢您的耐心!

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

    您好、Sherry、

    CS 呢? 何时切换 CS?

    谢谢、

    惠特尼

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

    CS 连接到始终处于低电平的 GPIO。

    谢谢、

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

    雪利、

    我认为这种情况并不正确。 您的 LCD 数据表对 CS 有何看法?如何断言? 您是否尝试将其连接到 SPISTEA?

    谢谢、
    惠特尼