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.

[参考译文] TMS320F28P650DK:可以通过 SPI 发送40位吗?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1414152/tms320f28p650dk-is-it-possible-to-send-40-bits-via-spi

器件型号:TMS320F28P650DK

工具与软件:

大家好!

我有一个从设备(MC33772B)、我想通过 SPI 与它进行通信。 这需要一条40位的消息、但不幸的是、我的电路板只能发送16位。

仍然可以通过电路板发送40位吗?或者它不是设计用于此目的吗? 或者我是不是在误会什么东西?

(隔离通信之间有一个 MC33664)






我会非常感谢任何小费。

此致

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

    您好!

    请参阅此主题: LAUNCHXL-F28379D:通过 SPI 从 txt 文件发送24位字- C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛

    此致、

    Aishwarya.

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

    你好:)

    如果我在 sysconf 中将数据宽度设置为16、我可以根据需要插入此命令、从而可以在一个芯片选择中发送16位(此处为64位)的倍数:










    问题是40不是16的倍数。 这就是我在 sysconf 中将数据宽度设置为8的原因。 但是、我无法再执行 SPI_writeDataNonBlocking (SPIB_BASE、0xAA)。 在示波器上看不到任何数据(芯片选择和时钟可见、但不可见数据)。 为了能够发送8位的倍数、我还需要进行哪些更改、才能更频繁地执行命令?


    我的代码:

    #include "driverlib.h"
    #include "device.h"
    #include "board.h"
    
    //
    // Globals
    //
    volatile uint16_t receiveData;
    volatile uint16_t slaveReady = 0;
    volatile uint16_t masterReady = 0;
    volatile uint16_t counter = 1;
    
    //
    // Function Prototypes
    //
    __interrupt void spibTxFIFOISR(void);
    __interrupt void spiaRxFIFOISR(void);
    
    //
    // Main
    //
    void main(void)
    {
        uint16_t i;
    
        //
        // Initialize device clock and peripherals
        //
        Device_init();
    
        //
        // Disable pin locks and enable internal pullups.
        //
        Device_initGPIO();
    
        //
        // Initialize PIE and clear PIE registers. Disables CPU interrupts.
        //
        Interrupt_initModule();
    
        //
        // Initialize the PIE vector table with pointers to the shell Interrupt
        // Service Routines (ISR).
        //
        Interrupt_initVectorTable();
    
        //
        // Board initialization
        //
        Board_init();
        //
        // Enable Global Interrupt (INTM) and realtime interrupt (DBGM)
        //
        EINT;
        ERTM;
    
        //
        // Loop forever. Suspend or place breakpoints to observe the buffers.
        //
        while (1)
        {
            ;
        }
    }
    
    //
    // SPI B Transmit FIFO ISR
    //
    __interrupt void spibTxFIFOISR(void)
    {
        uint16_t i = 0;
    
        //
        // Send data
        //
    
        while (i < 10000)
        {
            i++;
        }
    
        SPI_writeDataNonBlocking(SPIB_BASE, 0xAA);
        SPI_writeDataNonBlocking(SPIB_BASE, 0xAA);
    
        SPI_writeDataNonBlocking(SPIB_BASE, 0xAA);
        SPI_writeDataNonBlocking(SPIB_BASE, 0xAA);
    
        //
        // Clear interrupt flag and issue ACK
        //
        SPI_clearInterruptStatus(SPIB_BASE, SPI_INT_TXFF);
        Interrupt_clearACKGroup(INT_SPIB_controller_TX_INTERRUPT_ACK_GROUP);
    
    }
    
    //
    // Enabled only for SysConfig functionality
    //
    __interrupt void INT_SPIB_controller_RX_ISR(void)
    {
        //
        // Issue ACK
        //
        Interrupt_clearACKGroup(INT_SPIB_controller_RX_INTERRUPT_ACK_GROUP);
    
    }
    
    //
    // End of file
    //
    



    我会非常感谢任何帮助:)

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

    我知道为什么:



    因此、如果我写入 SPI_writeDataNonBlocking (SPIB_BASE、0xAA)、实际上显示为0x00AA。 这意味着弃用了 AA。 因此我必须写入0xAA00。

    非常感谢。