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.

[参考译文] MSP430F5528:如何重置 MSP430上的 SPI 模块

Guru**** 2481885 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1272566/msp430f5528-how-to-reset-the-spi-module-on-the-msp430

器件型号:MSP430F5528

大家好、

我的客户使用 MSP430、通过 DMA1 (RX)、DMA2 (TX)在从模式下发送和接收 SPI、通常情况下运行正常。

然而、当通过移除 STE 信号或中断从器件而发生溢出或时钟丢失时、会尝试恢复基于 STE 信号的复位过程、但移位寄存器似乎未初始化。

假定发送寄存器中剩余的数据将被重复输出。  

SPI 模块为 SCB0。

//******************************************************************************
// yk2023
//This is the PORT1_VECTOR interrupt vector service routine
//
//******************************************************************************
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=PORT1_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(PORT1_VECTOR)))
#endif
void Port_1 (void)
{

    // ISP reset
    USCI_B_SPI_transmitData(USCI_Bx_BASE, TxNull);
    USCI_B_SPI_disable(USCI_Bx_BASE);
    USCI_B_SPI_enable(USCI_Bx_BASE);


    DMA_disableTransfers(DMA_CHANNEL_1);
    //Enable DMA transfers on channel 1
    DMA_enableTransfers(DMA_CHANNEL_1);

    DMA_disableTransfers(DMA_CHANNEL_2);
    //Enable DMA transfers on channel 0
    DMA_enableTransfers(DMA_CHANNEL_2);

    //P1.4 IFG cleared
    GPIO_clearInterrupt(
        GPIO_PORT_P1,
        GPIO_PIN4
        );
}

如有必要、可以提供 SPI 部分的源。  

如果您有任何问题、请告诉我。

提前感谢您。

此致、

肯利

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

    最简单的方法是重置所有寄存器并重新配置它。 要复位寄存器(将它们全部设置为0)、我想您可以参考这本书(USCI_A)和用户指南(USCI_B 寄存器)。