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.

[参考译文] MSP430FR2355 Launchpad SPI

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/801533/msp430fr2355-launchpad-spi

大家好、

能否有人帮助解决 SPI 问题、我正在尝试修改示例并使用它、但它不想工作(提前进行大 tnx!)。

#include "driverlib.h"
#include "Board.h"

uint16_t i;
uint8_t RXData = 0、TXData = 0;
uint8_t check = 0;




// XT1初始化所需的超时
#define CS_XT1_TIMEOUT 50000


// XT2初始化所需的超时**
#define CS_XT2_TIMEOUT 0


//XT1晶振频率
被使用#define CS_XT1_CRYSTICL_FREQUENCY 32768


//可用于存储返回的 STATUS_SUCCESS 或 STATUS_FAIL
uint8_t 返回值= 0;


//可变/可变到
INT32




主时钟值(void)

//停止看门狗计时器
WDT_A_HOLD (WDT_A_base);

//---------------- 外部晶振---


//端口选择 XT1
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_P2、
GPIO_PIN6 + GPIO_PIN7、
GPIO_secondary 模块功能
);


//---------------- 外部晶振---



//------------------ SPI ---

// CS 信号
GPIO_setAsOutputPin (GPIO_PORT_P3、GPIO_PIN6);
//将所有 CS 引脚设置为高电平
GPIO_setOutputHighOnPin (GPIO_PORT_P3、GPIO_PIN6);



GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_P4、
GPIO_PIN4 + GPIO_PIN5 + GPIO_PIN6 + GPIO_PIN7、
GPIO_PRIMARY_MODULE_FUNCTION
);

//------------------ SPI ---




//---------------- 外部晶振---


//初始化正在使用的 XT1和 XT2晶振频率
cs_setExternalClockSource (CS_XT1_crystal_frequency);

//初始化 XT1。 如果初始化成功、则返回 STATUS_SUCCESS
返回值= CS_TurnOnXT1LFWithTimeout (CS_XT1_DRIVE_0、CS_XT1_TIMEOUT);

//选择 XT1作为 ACLK 源
CS_initClockSignal (CS_ACLK、CS_XT1CLK_select、CS_Clock_divider);

//选择 XT1作为 SMCLK 源
CS_initClockSignal (CS_SMCLK、CS_XT1CLK_select、CS_Clock_divider);

//清除所有 OSC 故障标志
CS_clearAllOscFlagsWithTimeout (1000);

//启用振荡器故障中断
SFR_enableInterrupt (SFR_oscillator_FAULT_INTERRUPT);

//---------------- 外部晶振---


/*
*禁用 GPIO 上电默认高阻抗模式以激活
*先前配置的端口设置
*
PMM_unlockLPM5 ();


if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、&UART_param)){
返回;
}

EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);

EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_receive_interrupt);

//启用 USCI_A0 RX 中断
EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_receive_interrupt);


//------------------ SPI ---

//初始化主设备
EUSCI_B_SPI_initMasterParam SPI_param ={0};
spi_param.selectClockSource = EUSCI_B_SPI_CLOCKSOURCE_SMCLK;
SPI_param.clockSourceFrequency = CS_getSMCLK ();
spi_param.desiredSpiClock = 1000;
SPI_param.msbFirst = EUSCI_B_SPI_MSB_FIRST;
SPI_param.clockPhase = EUSCI_B_SPI_PHASE_DATA_Changed_ONFIRST_capted_on_next;
SPI_param.clockPolarity = EUSCI_B_SPI_CLOCKPOLARITY_INACT_HIGH;
SPI_param.spiMode = EUSCI_B_SPI_4PIN_UCxSTE_ACTIVE_HIGH;//EUSCI_B_SPI_3Pin;
EUSCI_B_SPI_initMaster (EUSCI_B0_BASE、&SPI_param);

//启用 SPI 模块
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 (100);

//------------------ SPI ---



//启用全局中断
_enable_interrupt ();
while (1)
{

TXData = 0x55;


//------------------ SPI ------------------
//将所有 CS 引脚置为低电平
GPIO_setOutputLowOnPin (GPIO_PORT_P3、GPIO_PIN6);
//等待从器件初始化
_DELAY_CYCLES (100);

//USCI_B0 TX 缓冲器准备好了吗?
while (!EUSCI_B_SPI_getInterruptStatus (EUSCI_B0_BASE、
EUSCI_B_SPI_Transmit 中断);

//向从器件发送数据
EUSCI_B_SPI_transmitData (EUSCI_B0_BASE、TXData);


//将所有 CS 引脚设置为高电平
GPIO_setOutputHighOnPin (GPIO_PORT_P3、GPIO_PIN6);
//等待从器件初始化
_DELAY_CYCLES (100);
//------------------ SPI ------------------


__delay_cycles (10000);


}
}


#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
#pragma vector=USCI_B0_vector
__interrupt
#elif defined (__GNU__)
__attribute__(interrupt (USCI_B0_vector)))
#endif USCI_B0_vector (
void

开关(__evo_in_range (UCB0IV、USCI_SPI_UCTXIFG))
{
USCI_SPI_UCRXIFG 案例: // UCRXIFG

中断;
默认值:
中断;
}
}


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

    您能否提供一些有关您正在尝试执行的操作以及代码当前运行情况的其他上下文?

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

    JD、您好!

    感谢你的帮助。

    因此、我的最终目标是通过 IOExpander 与 SPI (4线制)进行通信。
    在第一个测试中、我在 CS 线路和时钟线路上连接了示波器、以查看其是否正常工作。
    计划是在 CS 变为低电平时捕获信号并查看时钟的外观、出于某种原因、引脚输出上不会生成任何信号。
    SPI 似乎根本不运行,因为至少时钟应该显示数据是否输出,对吧?

    编辑:

    我在使用  EUSCI_B0_BASE 时似乎犯了错误(我不知道这是不是问题、但会检查并报告) 、我应该已经使用 了 EUSCI_B1_BASE。


    BR、
    Nikola。

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

    很好的收获 这将产生很大的影响。

    测试一下、如果您使它正常工作、请告诉我。

    谢谢、
    JD
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它解决了问题(刚刚将 EUSCI_B0_BASE 重命名为 EUSCI_B1_BASE)。