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.

[参考译文] LAUNCHXL2-RM57L:同时将 SPI 和 GPIO 引脚(SPI1 (SIMO、SOMI、CLK、SCS[0])用作从器件、并将 spiscs[1]、spiscs[2]、spiscs[3]、spiscs[4]、spiscs[5]、sp1en 用作 Gio 引脚。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/569990/launchxl2-rm57l-using-spi-and-gpio-pins-simultaneously-spi1-simo-somi-clk-scs-0-as-slave-and-spiscs-1-spiscs-2-spiscs-3-spiscs-4-spiscs-5-spi1en-as-gio-pins

器件型号:LAUNCHXL2-RM57L
主题中讨论的其他器件:HALCOGEN

我尝试同时使用 SPI1端口的某些引脚作为 SPI 和 GPIO。

我通过 halcogen 生成了代码。 以下是我的代码。

//为 GIO 和 SPI 配置

/* SPI1将所有引脚设置为功能*/
spiREG1->PC0 =(uint32)((uint32) 1U <<0U)/* SCS[0]*/
|(UINT32)((UINT32) 0U << 1U)/* SCS[1]*/|(UINT32)((UINT32) 0U <<2U)/* SCS[2]*/|(UINT32)(UINT32)*(UINT32)|UINT32 (UINT32) /* SIMO[0]*/|(UINT32)((UINT32) 1U <<11U)/* SOMI[0]*/|(UINT32)((UINT32) 0U <<17U)/* SIMO[1]*/|(UINT32)((UINT32) 0U <<25U);/*[SOMI 1]

//将 GIO 配置为输出引脚

/**- SPI1端口方向*/
UINT32)(UINT32)(UINT32) 1U <<0U)/* SCS[0]*/ (UINT32)((UINT32) 1U <<1U)/* SCS[1]*/|(UINT32)(UINT32) 1U <<2U)/* 1U [2]/|(UINT32)* UINT32 (UINT32
|(uint32)((uint32) 1U << 5U)/* scs[5]*/|(uint32)((uint32) 1U << 8U)/* ENA */|(uint32)((uint32) 1U << 9U)/* CLK */|(uint32)(uint32)*(u/uint32)/u.1u/u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u./uint32 (u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.1u.

但我不确定如何使用以下函数对配置为输出的位进行编程?(我想将 SCS[1]=1、SCS[2]=1、SCS[3]=1、 ENA=0、SOMI[1]=1;我该怎么做?

gioSetBit (spiPORT1,0,1);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Kalyan、
    您可以使用 gioSetDirection() API 来更改端口的方向。 例如、如果您要将 SCS[5:0]设置为 GIO 输出、您将写入 gioSetDirection (spiPORT1、0x3F);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我可以使用 SPIPC4 REG 来设置位、谢谢。
    我还有一个问题

    我可以将 RM57lx 作为从站操作的最大 SPI 时钟频率是多少?
    当我将波特率设置为10MHz 时、实际波特率会发生变化。

    如果我将 SPI1SCS[1]配置为输入、如何为其启用中断?(如何在 SPI 端口上启用 GIO 中断)

    我可以将 GIO 端口 A 配置为下降沿或上升沿、但无法找到如何配置 SPI 端口1 (GIO)中断
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    根据数据表、从模式可在高达25MHz 的频率下工作。
    2、实际波特率取决于到 SPI 模块的源时钟(VCLK)。 当您指定10MHz 时、如果 VCLK=75MHz、HalcogGen 中的实际波特率可能会显示9.375MHz 为最接近的波特率。
    您可以在 GIO 模式下使用 SPI 引脚进行中断。 不支持此功能。 如果您需要 GIO 中断功能引脚、则需要查看 GIO 模块、其中两个端口都具有中断功能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢
    我正在尝试使用 rm57l8 SPI 1端口作为从器件。
    当(数据在 Rx 缓冲器中接收或当 Rx 过载 RXINT、RXOVRNINT)时、我想生成中断

    当 SPI 中断(RXINT、RXOVRNINT)发生时、我正在尝试查找要调用的处理程序的函数寄存器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Kalyan、

     我不清楚您要调用的函数是什么。 您是否无法为 RXINT 和 RXOVRNINT 生成中断?

     首先、您需要确保启用 RXINT 和 OVRINIT 中断。 在 HalCoGen 中、你可以像下面那样启用它们。

    中断有两个级别:高级和低级别。 默认情况下、SPI 中断映射到高级、如上述配置所示。 您还需要在 VIM 通道12中启用 MibSPI1高级中断、如下所示。  

    一旦从机接收到数据、甚至数据被覆盖(溢出错误)、它就会生成中断。  

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

    我执行了这些步骤、但仍然有一些原因、 当我的主器件发送数据时、我无法看到中断。

    我想做一件事、以确保 CPU 知道如何在中断 发生时触发此函数(mibspi1HighLevelInterrupt)。

    我需要声明 main.c 程序中的某些位置?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否为 CPU 启用了中断? 如果在0x18放置一个断点并且如果 CPU 从未停止、那么很有可能 IRQ 中断未被启用。 此外、检查 SPI 模块中的 RXINT 和 OVRINIT 标志是否被置位。

    在 main 中、您可以调用_enable_IRQ_interrupt_()/_enable_interrupt_()来启用中断。


    ;------------------------------------------------------------------
    ;启用中断- CPU IRQ

    .def _enable_IRQ_interrupt_
    asmfunc

    _enable_IRQ_interrupt_

    我是 CPSIE
    BX LR

    endasmfunc
    ;------------------------------------------------------------------
    ;启用中断- CPU IRQ 和 FIQ

    .def _enable_interrupt_
    asmfunc

    _enable_interrupt_

    cpsie if
    BX LR

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

    我无法使中断正常工作

    我将 spi3用作主器件、将 SPI2用作从器件。

    这是我在 main 中使用的代码。

    我已附加我的整个项目。

    我找不到任何使用 rm57lx 的 SPI 示例代码

    int main (空)

    /*用户代码开始(3)*/

    spiDAT1_t 数据通信 fig1_t;

    dataconfig1_t.CS_hold=false;

    dataconfig1_t.WDEL=true;

    dataconfig1_t.DFSEL=SPI_FMT_1;

    dataconfig1_t.CSNR=0xFE;

    /*通过 CPSR 启用 CPU 中断*/

    //_enable_IRQ ();

      /**使 SPI 退出复位*/

      spiREG1->GCR0 = 1U;

      /**使 GIO 模块脱离复位状态*/

      gioREG->GCR0   = 1U;

      gioInit();

      spiInit();e2e.ti.com/.../2555.SPI1_5F00_SLAVE.7z

      _enable_IRQ_interrupt_();

      TransmitData (spiREG3、&dataconfig1_t、BUFFERSTOWRITE、g_TransmitBuf);

    /*用户代码结束*/

      返回0;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否可以发送 halcogen .dll 和.hcg 文件? 我喜欢看一下。

    下面是我为另一个器件找到的示例、但它应作为您的指南。

    /*用户代码开始(2)*/
    UINT16 TX_Data_Master[16]={0x01、0x02、0x03、0x04、0x05、 0x06、0x07、0x08、0x09、0x0A、 0x0B、0x0C、0x0D、0x0E、0x0F、 0x10};
    UINT16 RX_Data_Master[16]={0};
    uint16 dute=0;
    /*用户代码结束*/

    void main (void)

    /*用户代码开始(3)*/
    uint32计数器=0;
    spiDAT1_t 数据通信 fig1_t;

    dataconfig1_t.CS_hold = false;
    dataconfig1_t.WDEL = true;
    dataconfig1_t.DFSEL = SPI_FMT_0;
    dataconfig1_t.CSNR = 0xFE;


    /*通过 CPSR 启用 CPU 中断*/
    _enable_IRQ ();
    printf ("IRQ 中断现已启用\n");
    spiInit();
    printf ("SPI2现在已初始化\n");
    spiEnableLoopback (spiREG2、Analog、LBK);
    printf ("SPI 设置为环回模式(模拟)\n"\});
    /*通过中断模式启动 SPI2发送和接收*/
    SendspiAndGetData (spiREG2、&dataconfig1_t、16、TX_Data_Master、RX_Data_Master);
    printf ("TX_Data_Master 已发出、应在 RX_Data_Master\n"\}中接收);
    while (done = 0)

    COUNTER++;

    printf ("缓冲区已成功发送\n"\n);
    while (1);
    /*用户代码结束*/


    在 notification.c 中有以下代码。


    /*用户代码开始(8)*/
    extern uint16完成;
    /*用户代码结束*/

    #pragma weak (spiNotification)
    void spiNotification (spiBASE-t * SPI、UINT32标志)

    /*在用户代码开始和用户代码结束之间输入用户代码。 *
    /*用户代码开始(31)*/
    /*用户代码结束*/


    /*用户代码开始(32)*/
    /*用户代码结束*/
    #pragma weak (spiEndNotification)
    void EndspiNotification (spiBASE-t * SPI)

    /*在用户代码开始和用户代码结束之间输入用户代码。 *
    /*用户代码开始(33)*/
    DONE = 1;
    /*用户代码结束*/
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../2664.SPI1_5F00_SLAVE.7zI未使用环回模式。

    我在外部将 spi3 (主器件)连接到 SPI2 (从器件)

    这 是我的 halcogen 项目

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

    查看 SPI3的 halcogen 设置、我看不到您启用 TXINT 中断。 在 VIM 中、您也没有在通道37或38中启用 MibSPI3。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用 spi3作为主设备,并使用轮询方法发送数据。我可以在示波器上看到 spi3 (数据、时钟和 CS),它们是正确的。
    但作为从机的 SPI2不接收此数据。
    我用电线将 spi3连接到 SPI2。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    您能否为我提供使用 rm57lx 的 SPI 从设备的示例代码?

    我在网上找不到任何东西。

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

    你(们)好

     以下是一个您可以参考的简单示例。 它设置 SPI1和 SPI3进行通信。

    e2e.ti.com/.../6518.LC4357_5F00_SPI1_5F00_SPI3_5F00_No_5F00_DMA.zip