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.

[参考译文] MSP430FR6043:映射到端口 PJ 时 SPI CLK (UCA2)出现问题

Guru**** 2540720 points
Other Parts Discussed in Thread: MSP430FR6043

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/820120/msp430fr6043-issue-with-spi-clk-uca2-when-mapped-to-port-pj

器件型号:MSP430FR6043

在尝试将 MSP430FR6043映射到端口 PJ (引脚 PJ.0-PJ.3)时、我遇到了 MSP430FR6043上的 SPI 功能问题。 PJ.2上的 MOSI 信号工作正常、但时钟根本不会出现在 PJ.0上。 当映射到端口 P5 (P5.0 - P5.3)时、一切都按预期工作。 我通过将 PJ.0设置为数字 IO 并发送一些在示波器上正确记录的脉冲来仔细检查电气连接。 我在三个单独的器件上重复了此测试、结果相同。 我在连接 SPI 器件和 MCU 引脚悬空的情况下尝试了这两种方法。 我认为端口 PJ 上的引脚未进入 JTAG 模式、SYSJTAGPIN 为0、并且在使用 SPW 进行调试以及在 SPW 编程器断开连接且 RESET 引脚始终拉高的情况下依靠电池运行时、器件的行为是相同的。 是否还有其他因素阻止 PJ.0引脚多路复用为 UCA2模块上的 SPI 时钟? 请提供建议。 我非常希望这些引脚能够专门用于该功能、因为我正在使用非常紧凑的 PCB 布局、并且 USS 模块和 LCD 的位置是固定的、这给我留下了很小的回旋空间。

已连接:引脚 P5.2 (有效)和 PJ.0 (无效)的示波器迹线、以及我运行的测试代码。 这些测试在自定义 PCB 上执行、PJ.0引脚悬空(仅连接到示波器探针)、或连接到一个认为为22R 电阻的 SPI 从器件。 调试了 MSP FET、通过 SBW 连接、仅连接 SBWCLK 和 SBWTDO 引脚。 感谢您的任何反馈!

#include "driverlib.h"

uint8_t RXData = 0;
uint8_t TXData = 0;
int i=0;

void main (void){
//停止看门狗计时器
WDT_A_HOLD (WDT_A_base);
PMM_unlockLPM5 ();

//将 DCO 频率设置为最大 DCO 设置
CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_3);
CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider);

//测试输出模式中的 CLK 引脚
GPIO_setAsOutputPin (GPIO_PORT_PJ、BIT0);
GPIO_setAsOutputPin (GPIO_PORT_P5、BIT2);

//3个脉冲
for (i=0;i<6;i++){
GPIO_toggleOutputOnPin (GPIO_PORT_PJ、BIT0);
GPIO_toggleOutputOnPin (GPIO_PORT_P5、BIT2);
__DELAY_CYCLES (1000);
}


//对于端口 PJ (CLK 不工作)
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_PJ、BIT0 | BIT1 | BIT2 | BIT3、GPIO_PRIMARY_MODULE_FUNCTION);

//对于端口 P5 (工作正常)
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P5、BIT0 | BIT1 | BIT2 | BIT3、GPIO_secondary 模块_function);


//初始化主设备
EUSCI_A_SPI_initMasterParam param ={0};
param.selectClockSource = EUSCI_A_SPI_CLOCKSOURCE_SMCLK;
param.clockSourceFrequency = CS_getSMCLK();
param.desiredSpiClock = 50000;
param.msbFirst = EUSCI_A_SPI_MSB_FIRST;
param.clockPhase = EUSCI_A_SPI_PHASE_DATA_Changed_ONFIRST_capted_on_next;
param.clockPolarity = EUSCI_A_SPI_CLOCKPOLARITY_INACT_HIGH;
param.spiMode = EUSCI_A_SPI_3引脚;
EUSCI_A_SPI_initMaster (EUSCI_A2_base、&param);

//启用 SPI 模块
EUSCI_A_SPI_ENABLE (EUSCI_A2_BASE);

EUSCI_A_SPI_clearInterrupt (EUSCI_A2_base、EUSCI_A_SPI_Receive_interrupt);
//启用 USCI_A0 RX 中断
EUSCI_A_SPI_enableInterrupt (EUSCI_A2_base、EUSCI_A_SPI_receive_interrupt);

//等待从器件初始化
_DELAY_CYCLES (100);

TXData = 0x1; //保留 TX 数据

//USCI_A0 TX 缓冲器准备好了吗?
while (!eUSCI_A_SPI_getInterruptStatus (eUSCI_A2_base、eUSCI_A_SPI_Transmit 中断));

//向从器件发送数据
EUSCI_A_SPI_transmitData (EUSCI_A2_base、TXData);

_bis_SR_register (LPM0_bits + GIE); // CPU 关闭,启用中断
__no_operation(); //保持在 LPM0
中}

#pragma vector=USCI_A2_vector
__interrupt
void USCI_A2_ISR (void){
开关(__evo_in_range (UCA2IV、USCI_SPI_UCTXIFG))
{
USCI_SPI_UCRXIFG 案例: // UCRXIFG
//USCI_A0 TX 缓冲器准备好了吗?
while (!eUSCI_A_SPI_getInterruptStatus (eUSCI_A2_base、eUSCI_A_SPI_Transmit 中断));

RXData = EUSCI_A_SPI_receiveData (EUSCI_A2_base);

//递增数据
TXData++;

//发送下一个值
EUSCI_A_SPI_transmitData (EUSCI_A2_base、TXData);

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

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

    尊敬的 Marek:

    我将对此进行研究、并将在下周初提供更新。

    谢谢、

    Mitch

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

    尊敬的 Marek:

    您能否给我发送原理图的图片? PJ.0上是否有无源器件?

    谢谢、

    Mitch

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

    你(们)好、米奇

    我将 PJ.0连接到 SPI Lora 模块(RF95)、SPI 时钟输入、认为是一个串联的22Ω Ω 电阻器。    不存在其他无源器件、但是、当引脚悬空且未连接任何器件时、我会得到相同的行为-在我测试的3个器件中、2个没有安装 Lora 模块或22Ω Ω 电阻器、引脚的行为方式相同。 电子方面、该引脚确实可以正常工作(不会对其他信号短路、也不会与其自身的良好连接)、因为它在配置为 GPIO 时工作正常。

    我已经连接了电路板的相关部分、并将 PJ.0高亮显示。  

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

    尊敬的 Marek:

    我在 FR6043 EVM 上的末端运行了一些测试、我看到了与您相同的东西-正在输出 MOSI 数据、但看不到时钟信号。  

    当我明确地将 PJ.0设置为输出时、我将显示 SPI 时钟信号。  

    尝试添加:

    PJDIR |= BIT0;

    在您的软件中的第29行之后。

    我认为这与该引脚与 JTAG 功能复用有关。

    请告诉我这是否解决了问题。

    谢谢!

    Mitch