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/TMS570LS1224:通过 SPI 将 TMS570LS1224 Launchpad 与 microchip dspic33ev256GM106入门套件相连

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/914516/ccs-tms570ls1224-connecting-tms570ls1224-launchpad-with-microchip-dspic33ev256gm106-starter-kit-via-spi

器件型号:TMS570LS1224
主题中讨论的其他器件: HALCOGEN

工具/软件:Code Composer Studio

大家好、我想将 TMS570LS1224 Launchpad 连接为 SPI1主器件、将 microchip dspic33ev256GM106入门套件连接为 SPI 从器件

我在 SPI1全局:我启用了主控模式和内部时钟
在 SPI1数据格式中:我输入100000Hz 波特率
0极性和0相位
在 SPI1端口 I 中、启用了 SIMO、MOSI、CLK、CS[0]和 ENA 作为 SPI 功能
另一个 CS[1-5]作为 GIO
然后生成代码、我遵循 SPI 示例代码

我的第一个问题
1) 1)我在上面所做的是真的吗?
2) 2)我是否需要在代码中包含这些行?

spiDAT1_t 数据通信 fig1_t;
dataconfig1_t.CS_hold = true;
dataconfig1_t.WDEL = true;
dataconfig1_t.DFSEL = SPI_FMT_0;
dataconfig1_t.CSNR = 0xFE;

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

    您好、B.M、

    您的配置良好。 我刚刚检查 了 dspic33ev256GM106数据表、该器件不支持 SPI 使能引脚。 因此、4线制模式适合您:CS、CLK、SIMO、SOMI

    如果您使用 HALCOGen 生成的 SPI API、则需要定义和使用数据通信1_t

     dspic33ev256GM106器件是否支持 CSHOLD 功能? CSHOLD 表示芯片选择在两次传输之间保持有效。

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

    从微芯片数据表中可以看出、MCU 有两位  

    1) CKE:SPIx 时钟边沿选择位

    1 =从有效时钟状态转换为空闲时钟状态时、串行输出数据发生变化  

    0 =从空闲时钟状态转换为活动时钟状态时、串行输出数据发生变化

    2) CKP:时钟极性选择位

    1 =时钟的空闲状态为高电平;活动状态为低电平

    0 =时钟的空闲状态为低电平;活动状态为高电平

    那么、您认为如何配置 Hercules 以与其兼容。

    我是否需要写入 CSHOLD =false; ?  在 halcogen 配置中,我设置极性0,相0。

    这是我的 HAL 设置  

    看看我的 SPI 主设备代码吧

    /*用户代码结束*/
    
    *包含文件*/
    
    #include "sys_common.h"
    
    /*用户代码开始(1)*/
    #include "spi.h"
    /*用户代码结束*/
    
    *用户代码开始(2)*/
    uint16 TX_Data_Master[16]={0x01、0x02、0x03、0x04、0x05、0x05、 0x06、0x07、0x08、0x09、0x0A、 0x0B、0x0C、0x0D、0x0E、0x0F、 0x10 };
    /*用户代码结束*/
    
    int main (void)
    {
    /*用户代码开始(3)*/
    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 ();
    
    /*根据 GUI 配置初始化 SPI 模块
    * SPI1 -主器件(SIMO、SOMI、CLK、CS0)
    * SPI3 -从器件(SIMO、SOMI、CLK、CS0)
    ***/
    spiInit();
    
    
    
    
    
    while (1){
    
    /*通过轮询模式启动 SPI1发送*/
    TransmitData (spiREG1、&dataconfig1_t、16、TX_Data_Master);
    }
    /*用户代码结束*/
    
    返回0;
    }//*
    
    用户代码开始(4)*/*
    用户代码结束*/
    

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

    温和的提醒

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

    您好!

    您为 dsPIC33选择了什么时钟边沿和时钟极性? 如果  dsPIC33要求在两次传输之间取消芯片选择的置位、则需要设置 CSHOLD=false。

     

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

    微芯片也具有该位  

    SMP:SPIx 数据输入采样相位位

    主控模式:1 =在数据输出时间结束时对输入数据进行采样0 =在数据输出时间的中间对输入数据进行采样

    从机模式:当 SPIx 模块在从机模式下使用时、必须将 SMP 位清零。

    时钟边沿= 0。 极性= 0。  并且 SMP = 0。 微芯片中

    相位= 0。 Hercules 中的极性= 0

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

    您的当前设置是否出现问题?

    最好设置 clockedge=1 (下降沿)、请先尝试。

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

    我发送了0xAAAA、0X5555的字阵列(在 halcogen 中设置的16位、相位0和极性0)、波特率为1000kHz

    我在从缓冲 器0x48480x0484中收到。 (16位、SMP 0和极性0、时钟边沿1)

    CS_HOLD (((从器件侧)在 整个16位传输中、从器件选择引脚必须保持有效。)  如果 从器 件不直接使用从器件选择信号本身、那么除了使能外设使用它之外、在传输之间执行什么 SS 也无关紧要。

    /*用户代码结束*/
    
    *包含文件*/
    
    #include "sys_common.h"
    
    /*用户代码开始(1)*/
    #include "spi.h"
    
    /*用户代码结束*/
    *用户代码开始(2)*/
    ///uint16 TX_Data_Master[16]={0x01、0x02、0x03、0x04、0x05、0x05、 0x06、0x07、0x08、0x09、0x0A、 0x0B、0x0C、0x0D、0x0E、0x0F、 0x10};
    uint16 TX_Data_Master[2]={0xAAAA、0x5555};
    //用户代码结束*/
    
    int main (void)
    {
    //用户代码开始(3)*/
    spiDAT1_t 数据通信 fig1_t;
    
    //片选信号在多个连续的数据字传输过程中持续保持有效
    dataconfig1_t.CS_hold = false;
    /*事务后,相应数据格式的 WDELAY 将加载到延迟计数器中。
    在 WDELAY 计数器溢出之前不会执行任何事务。 SPISCS 引脚将被禁用
    至少(WDELAY+2)* VCLK_PERIOD 持续时间。 *
    dataconfig1_t.WDEL = false;
    //选择数据字格式0
    dataconfig1_t.DFSEL = SPI_FMT_0;
    //芯片选择号码。 CSNR 定义了将在数据传输期间激活的芯片选择(在我们的情况下为0)。
    dataconfig1_t.CSNR = 0xFE;
    
    
    /*通过 CPSR 启用 CPU 中断*//
    _enable_IRQ ();
    
    /*根据 GUI 配置初始化 SPI 模块
    * SPI1 -主器件(SIMO、SOMI、CLK、CS0)
    * SPI3 -从器件(SIMO、SOMI、CLK、CS0)
    ***/
    spiInit();
    
    
    while (1)
    
    {
    /*通过轮询模式启动 SPI1发送*/
    TransmitData (spiREG1、&dataconfig1_t、2、TX_Data_Master);
    
    //__delay_cycles (1000);
    }
    /*用户代码结束*/
    
    返回0;
    }//*
    
    用户代码开始(4)*/*
    用户代码结束*/
    

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

     您是否尝试过时钟边沿0? 数据是否在 SPI 数据总线上正确发送?

    对于极性= 0且相位= 0的 TMS570 SPI 时钟模式、数据在 SPICLK 的上升沿输出、输入数据在 SPICLK 的下降沿锁存。 因此、我期望从 SALve 侧的输入数据在 SPICLK 的上升沿锁存。  

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

    它现在的工作原理非常感谢。

    现在、我想让 Hercules 成为正确编写代码的从器件   

    ***************************************
    * GUI 配置
    ***************************************
    * 1)驱动程序选项卡
    *-选择 SPI1
    * 2) VIM 通道0-31
    *-启用 MIBSPI1HIGH 和 MIBSPI1LOW 通道。
    * 3) PINMUX 使能 MIBSPI1
    *-禁用引脚105上的冲突 MIBSPI1SOMI_1
    * 4) SPI1选项卡
    *- SPI1全局子选项卡
    *-取消选中主模式
    *-取消选中"内部时钟"

    *-启用 RXINT (高级)

    5) SPI1数据格式  

     -budrate 1MHz、16位、极性0、相位0、

    6) SPI1端口  

    启用 SIM0、SOMI0、CLK、CS[0]

    #include "sys_common.h"
    
    #include "spi.h"
    
    
    
    uint16 RX_Data_Slave[16]={0};
    
    
    int main (void)
    {
    
    spiDAT1_t 数据通信 fig1_t;
    
    dataconfig1_t.CS_hold = false;
    dataconfig1_t.WDEL = false;
    dataconfig1_t.DFSEL = SPI_FMT_0;
    dataconfig1_t.CSNR = 0xFE;
    
    _enable_IRQ ();
    
    
    spiInit();
    
    
    GetspiData (spiREG1、&dataconfig1_t、4、RX_Data_Slave);
    
    while (1);
    
    
    返回0;
    }
    
    
    
    

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

    您好!

    spiGetData()是在中断模式中使用的正确函数。 需要首先调用此函数、等待时钟和来自主器件的数据。