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.

[参考译文] TMS320F280049:关于 TMS320F280049 SPIA MOSI 引脚无输出。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/720155/tms320f280049-about-tms320f280049-spia-mosi-pin-no-output

器件型号:TMS320F280049
主题中讨论的其他器件: C2000WARE

尊敬的:

当我使用 TMS320F280049时、我发现 SPIA 引脚没有输出。 我已经设置 了 SPICLKA 和 SPICLKA 引脚

我找到 GPIO16(SPISIMOA)引脚无信号、GPIO56(SPICLKA) ANGPIO57(SPISTEA)有信号。  我的代码如下所示。 请帮助检查。

空 InitSpiaGpio()

  EALLOW;

  //
  //为所选引脚启用内部上拉
  //
  //用户可以启用或禁用上拉。
  //这将启用指定引脚的上拉电阻。
  //注释掉其他不需要的行。
  //
  GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;//启用 GPIO16上的上拉电阻器(SPISIMOA)
  GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;//启用 GPIO17上的上拉电阻器(SPISOMIA)
  GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0;//启用 GPIO56上的上拉电阻器(SPICLKA)
  GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0;//启用 GPIO57上的上拉电阻器(SPISTEA)

  //
  //仅将所选引脚的限定条件设置为异步
  //
  //这将为所选引脚选择异步(无限定条件)。
  //注释掉其他不需要的行。
  //
  GpioCtrlRegs.GPAQSEL2.bit.GPIO16=3;//异步输入 GPIO16 (SPISIMOA)
  GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3;//异步输入 GPIO17 (SPISOMIA)
  GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3;//异步输入 GPIO56 (SPICLKA) SJD
  GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3;//异步输入 GPIO57 (SPISTEA) SJD

  //
  //使用 GPIO 寄存器配置 SPI-A 引脚
  //
  //这指定哪些可能的 GPIO 引脚将是 SPI 功能
  //引脚。
  //注释掉其他不需要的行。
  //
  GpioCtrlRegs.GPAMUX2.bit.GPIO16=1;//将 GPIO16配置为 SPISIMOA
  GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1;//将 GPIO17配置为 SPISOMIA
  GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1;//将 GPIO56配置为 SPICLKA
  GpioCtrlRegs.GPBMUX2.bit.GPIO57=1;//将 GPIO57配置为 SPISTEA

 

  EDIS;

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

    此代码仅初始化上述引脚的 GPIO 设置。 您是否已正确初始化 SPI 模块以发送数据。 您能否也共享 SPI 初始化代码

    谢谢、此致、
    Veena
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Veena、
    我已按如下所示检查了初始化代码。 但我发现了问题。我想可能是 DAM 集有一些问题。
    传输定义10、因为 pingBuf 和 pongBuf 为11。 并使用 epwm1和 SOCA 来触发 DMA。
    我可以测试 SPICLKA 和 SPISTEA。 没错。 我无法获取 SPI MOSI 信号。
    我尝试将 STEP 设置为0、但也无法实现。 我的代码如下所示。 请帮帮我。 Thx
    空 InitSpiaGpio()

    EALLOW;
    //
    //为所选引脚启用内部上拉
    //
    //用户可以启用或禁用上拉。
    //这将启用指定引脚的上拉电阻。
    //注释掉其他不需要的行。
    //
    GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;//启用 GPIO16上的上拉电阻器(SPISIMOA)
    GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;//启用 GPIO17上的上拉电阻器(SPISOMIA)
    GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0;//启用 GPIO56上的上拉电阻器(SPICLKA)
    GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0;//启用 GPIO57上的上拉电阻器(SPISTEA)
    //
    //仅将所选引脚的限定条件设置为异步
    //
    //这将为所选引脚选择异步(无限定条件)。
    //注释掉其他不需要的行。
    //
    GpioCtrlRegs.GPAQSEL2.bit.GPIO16=3;//异步输入 GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3;//异步输入 GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3;//异步输入 GPIO56 (SPICLKA) SJD
    GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3;//异步输入 GPIO57 (SPISTEA) SJD
    //
    //使用 GPIO 寄存器配置 SPI-A 引脚
    //
    //这指定哪些可能的 GPIO 引脚将是 SPI 功能
    //引脚。
    //注释掉其他不需要的行。
    //
    GpioCtrlRegs.GPAMUX2.bit.GPIO16=1;//将 GPIO16配置为 SPISIMOA
    GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1;//将 GPIO17配置为 SPISOMIA
    GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1;//将 GPIO56配置为 SPICLKA
    GpioCtrlRegs.GPBMUX2.bit.GPIO57=1;//将 GPIO57配置为 SPISTEA

    EDIS;



    void dma_init()

    //
    //初始化 DMA
    //
    DMAInitialize();

    //
    //为 TX 配置 DMACH1
    //
    静态 UINT16 xxx = 0xA5;
    DMACH1AddrConfig (SpiaRegs.SPITXBUF、pingBuf);
    DMACH1BurstConfig (/* burst*/0、1、0); // burst size、src step、dest step,burst:inner loop、大小传输一次
    DMACH1TransferConfig (transfer、0、0);//传输大小、src 阶跃、dest step.transfer:外部循环、定义了在整个收发器中执行的突发数量
    DMACH1ModeConfig (DMA_EPWM1A、PERINT_ENABLE、OneShot_disable、CONT_ENABLE、
    SYNC_DISABLE、SYNC_SRC、OVRFLOW_DISABLE、十六位、
    Chint_end、CHINT_ENABLE);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在您的代码中、我仍然找不到 SPI 初始化代码。 它仅配置 SPI 引脚和 DMA 模块。 我将使用一些基本配置来配置 SPI 模块、并尝试在控制卡上运行。

    同时、您是否了解了 C2000ware 中提供的示例?  C2000 driverlib 提供了一些可用于配置 SPI 模块的基本 API 函数。 有一个示例展示了 SPI 与 DMA 的用法。

    示例可在文件夹中找到 driverlib\f28004x\examples\SPI  

    这将为您提供一个良好的起点。

    此致、

    Veena

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

    EALLOW;
    //
    //为所选引脚启用内部上拉
    //
    //用户可以启用或禁用上拉。
    //这将启用指定引脚的上拉电阻。
    //注释掉其他不需要的行。
    //
    GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;//启用 GPIO16上的上拉电阻器(SPISIMOA)
    GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;//启用 GPIO17上的上拉电阻器(SPISOMIA)
    GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0;//启用 GPIO56上的上拉电阻器(SPICLKA)
    GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0;//启用 GPIO57上的上拉电阻器(SPISTEA)
    //
    //仅将所选引脚的限定条件设置为异步
    //
    //这将为所选引脚选择异步(无限定条件)。
    //注释掉其他不需要的行。
    //
    GpioCtrlRegs.GPAQSEL2.bit.GPIO16=3;//异步输入 GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3;//异步输入 GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3;//异步输入 GPIO56 (SPICLKA) SJD
    GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3;//异步输入 GPIO57 (SPISTEA) SJD
    //
    //使用 GPIO 寄存器配置 SPI-A 引脚
    //
    //这指定哪些可能的 GPIO 引脚将是 SPI 功能
    //引脚。
    //注释掉其他不需要的行。
    //
    GpioCtrlRegs.GPAMUX2.bit.GPIO16=1;//将 GPIO16配置为 SPISIMOA
    GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1;//将 GPIO17配置为 SPISOMIA
    GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1;//将 GPIO56配置为 SPICLKA
    GpioCtrlRegs.GPBMUX2.bit.GPIO57=1;//将 GPIO57配置为 SPISTEA

    EDIS;


    2、SPIA FIFO 配置
    void HAL_SPI_FifoInit()

    //
    //初始化 SPI FIFO 寄存器
    //
    SpiaRegs.SPIFFTX.ALL = 0xE040;
    SpiaRegs.SPIFFRX.ALL = 0x204F;
    SpiaRegs.SPIFFCT.all = 0x0;


    3、SPIA 参数配置
    #define HAL_SPI_LSPCLK 0//LSPCLK = SYSCLK = 100MHz
    #define HAL_SPI_BRR 4//SPICLK=100/5=20MHz
    void HAL_SPI_init ()

    EALLOW;
    ClkCfgRegs.LOSPP.ALL = HAL_SPI_LSPCLK;
    EDIS;
    SpiaRegs.SPICCR.bit.SPISWRESET = 0;
    SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;
    SpiaRegs.SPICCR.bit.SPILBK = 0;
    SpiaRegs.SPICCR.bit.SPICHAR = 15;//16位字符
    SpiaRegs.SPICCR.bit.HS_MODE = 0x1;
    SpiaRegs.SPICTL.bit.SPIINTENA=0;//中断禁用
    SpiaRegs.SPICTL.bit.TALK = 1;//发送使能
    SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;//主设备
    SpiaRegs.SPICTL.bit.CLK_PHASE = 0;//正常相位、取决于 SPICCR.6 (时钟极性)

    SpiaRegs.SPICTL.bit.OVERRUNINTENA=0;//溢出中断禁用
    SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = HAL_SPI_BRR;
    SpiaRegs.SPIPRI.bit.FREE = 1;//设置断点以避免干扰 xmission
    SpiaRegs.SPICCR.bit.SPISWRESET = 1;//准备发送