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/MSP430FR69891:无法激活 MSP430FR69891 (UCB0或 UCB1)上的 SPI、CLK 和 MOSI 引脚上无输出

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/947799/ccs-msp430fr69891-cannot-activate-spi-on-msp430fr69891-ucb0-or-ucb1-no-output-on-clk-and-mosi-pins

器件型号:MSP430FR69891
主题中讨论的其他器件:MSP430FR5989MSP430FR5969

工具/软件:Code Composer Studio

我的电路采用 MSP430FR5989、需要激活3个 SPI 模块 UCBA1、UCB0、UCB1。 开始使用以下引脚测试 UCB0和 UCB1:UCB0:P1.4、P1.6、P1.7和 UCB1:P3.0、P3.1、P3.2

我测试过的代码如下所示。 当我运行代码时、我检查示波器上的引脚、CLK 引脚上没有 CLK 信号、SIMO 引脚上没有数据(我也检查了其他引脚)
我在 TI 开发板上使用 MCU MSP430FR5969测试了相同的代码。 我只针对相应的引脚(P2.2、P1.6、P1.7)更改此行。 它在开发板上工作正常。 有一次我忘记将 P2.2作为时钟进行更改、但使用 launchpad 上的 MOSI 引脚时仍然工作正常。
GPIO_setPeripheralModuleFunctionInputPin (
      GPIO_PORT_P1、
      GPIO_PIN4 + GPIO_PIN6 + GPIO_PIN7、
      GPIO_secondary 模块功能
  );
我已经检查了 CCS 调试器上的 UCBA1和 CS (时钟系统)寄存器、这两个 MCU 的寄存器是相同的。 我看不到寄存器有什么区别

我已经在引脚 P1.6和 P1.7上将 UCB0测试为 I2C、并且在引脚上没有任何活动的情况下具有相同的结果。

我还测试了 P1.4、P1.6和 P1.7引脚作为 GPIO 输出、并使用一定的延迟对其进行齿形处理。 我可以清楚地看到示波器上的活动。 我确信芯片焊接良好、测量点连接到芯片。
当我将引脚设置为 GPIO 时、它们是可以的、但我无法将它们设置为 SPI 或 I2C。 请帮助解决该问题。

#include 
#include 
//#include "I2CMaster.h"

uint8_t TXData;
uint8_t RXData;


void delayms (int ms){
int i;
while (ms--){
I = 1000;
while (i--);
}
}

int main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

//将 DCO 频率设置为最大 DCO 设置
CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_6);// DCO @8MHz
// CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_3);
//选择 DCO 作为没有分频器的 SMCLK 的时钟源
CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_Clock_divider);
CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_Clock_divider);

GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0);
//GPIO 测试初始
化// GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN4|GPIO_PIN6| GPIO_PIN7);

GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_P1、
GPIO_PIN4 + GPIO_PIN6 + GPIO_PIN7、
GPIO_secondary _module_function
);

PMM_unlockLPM5 ();
//
///初始化主
控 EUSCI_B_SPI_initMasterParam param ={0};
param.selectClockSource = EUSCI_B_SPI_CLOCKSOURCE_SMCLK;
param.clockSourceFrequency = CS_getSMCLK ();
param.desiredSpiClock = EUSCI_B_parm000_parmsb;
= EUSCI_parmsbFirst;parms500bst
param.clockPhase = eUSCI_B_SPI_PHASE_DATA_Changed_ONFIRST_captured_on_next;
param.clockPolarity = eUSCI_B_SPI_CLOCKPOLAR_INACT_HIGH;
param.spiMode = eUSCI_B_SPI_3Pin;

eUSCI_B_SPI_initMaster (USCI_B&bparam_base);param_0
EUSCI_B_SPI_ENABLE (EUSCI_B0_BASE);
EUSCI_B_SPI_clearInterrupt (EUSCI_B0_BASE、
EUSCI_B_SPI_Receive_interrupt);
//启用 USCI_B0 RX 中断
EUSCI_B_SPI_enableInterrupt (EUSCI_B0_BASE、
EUSCI_B_SPI_Receive_interrupt);
__DELAY_CYCLES (200);

TXData = 0x55; //保持 TX 数据

while (1){

while (!EUSCI_B_SPI_getInterruptStatus (EUSCI_B0_BASE、
EUSCI_B_SPI_Transmit 中断);
//向从器件发送数据
EUSCI_B_SPI_transmitData (EUSCI_B0_BASE、TXData);

GPIO_setOutputHighOnPin (GPIO_PORT_P1、GPIO_PIN0);
//GPIO_setOutputHighOnPin (GPIO_PORT_P1、GPIO_PIN4 + GPIO_PIN6 + GPIO_PIN7);
delayM(50岁);
GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN0);
//GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN4 + GPIO_PIN6 + GPIO_PIN7);
delayMs(50);
}

返回0;
}


__attribute__((中断(USCI_B0_vector)) void USCI_B0_ISR (void)
{
开关(__evo_in_range (UCB0IV、USCI_SPI_UCTXIFG))
{
USCI_SPI_UCRXIFG 案例: // UCRXIFG
//USCI_B0 TX 缓冲器准备好了吗?
while (!EUSCI_B_SPI_getInterruptStatus (EUSCI_B0_BASE、
EUSCI_B_SPI_Transmit 中断);

RXData = EUSCI_B_SPI_receiveData (EUSCI_B0_BASE);

//递增数据
// TXData++;

//发送下一个值
// EUSCI_B_SPI_transmitData (EUSCI_B0_BASE、
// TXData
// );

//从机处理信息的传输之间的延迟
_DELAY_CYCLES (40);
中断;
默认值:
中断;
}
} 

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

     Per data sheet (SLAS789D) Table 6-21, the SPI function(s) is P1SEL=01b, which makes this the "primary" alternate function. (Yeah, it always seemed to me that GPIO is the "primary" function of a pin, but that's not how this works.)

    因此、将最后一行替换为:

    > GPIO_PRIMARY_MODULE_FUNCTION

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

    这可以节省生活细节、非常感谢。

    我已经检查了引脚分配、第二行中列出了 SPI 功能、我检查的所有样片都使用了次级参数。 正如您所说的、初级是 GPIO、我从不认为 SPI 是初级。

    现在还可以、非常感谢。

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

    您不应依赖引脚图[例如、图4-1]、因为其中的表示法存在歧义。 请坚持阅读本书背面的表格[例如表6-21]。