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.

[参考译文] MSP-EXP430FR5994:在UCB1上设置SPI通信

Guru**** 2595780 points
Other Parts Discussed in Thread: MSP430FR5994

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/667116/msp-exp430fr5994-setting-up-spi-communication-on-ucb1

部件号:MSP-EXP430FR5994
主题中讨论的其他部件:MSP430WAREMSP430FR5994

尊敬的各位:

我刚刚开始使用评估板和MSP430Ware开发MSP430FR5994 µC。 我想让SPI通信工作来测试它,所以我将一个示波器连接到UCB1接口(WFP 5.2 用于时钟,WFP 5.0 用于MOSI)。 我修改 了eusci_a_spi中的示例代码,改为使用 eusci_b。 然而,我看不到任何东西。 代码如下所示:

#include <MSP430-h>
#include "driverlib.h"


//! 已在MSP430FR5969
//上测试! --------
//! /|\| |//
! || |//
! 主----+->|RST |//
! | |//
! | WFP 2.0 |->数据输出(UCA0SIMO)
//! | |//
! | WFP 2.1 |<-数据输入(UCA0SOMI)
//! | |//
! | WFP 1.5 Tm|->串行时钟输出(UCA0CLK)
//!
//! 本示例使用以下外围设备和I/O信号。 你必须
//! 查看这些内容并根据需要对您自己的主板进行更改:
//! -SPI外围
设备//! - GPIO端口外设(用于SPI引脚)
//! - UCA0SIMO
//! - UCA0SOMI
//! - UCA0CLK
//!
//! 此示例使用以下中断处理程序。 要使用此示例
//! 在您自己的应用程序中,您必须将这些中断处理程序添加到
您的//! 引导程序表。
//! - USI_A0_Vector
//!
//*************************************************************************************************


UINT8_t RXData =0;
uint8_t TXData =0;

void main (void)
{
易失性uint16_t i;

WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器

//将WFP 1.0 设置为输出引脚。
/*

*选择端口1
*将引脚0设置为输出
*/
GPIO_setAsOutputPin(.
GPIO端口P1,
GPIO_PIN0
);
//将WFP 1.0 设置为低输出。
/*

*选择端口1
*将引脚0设置为输出低电平。
*/
GPIO_setOutputLowOnPin (
GPIO端口P1,
GPIO_PIN0
);

//为LFXIN配置引脚
//将PJ.4和PJ.5设置为主模块功能输入。
/*

*选择端口J
*将引脚4,5设置为输入主模块功能(LFXIN)。
*/
GPIO_setAsPeripheralModuleFunctionInputPin (
GPIO端口PJ,
GPIO _PIN4 + GPIO _PIN5,
GPIO主要模块功能
);

//设置XT1的外部频率
cs_setExternalClockSource(3.2768万,0);
//将DCO频率设置为最大DCO设置
CS_setDCOFreq (CS_DCORSEL_0,CS_DCOFSEL_3);
//选择XT1作为无分频器的ACLK的时钟源
CS_initClockSignal (CS_ACLK,CS_LFXTCLK_SELECT,CS_Clock_diver_1);
//在没有超时的情况下启动XT1
cs_turnOnLFXT(CS_LFXT_DRIVE_0);

//配置SPI引脚
//为UCA0CLK配置引脚
//将WFP 1.5 设置为辅助模块功能输入。
/*

*选择端口1
*将引脚5设置为输入辅助模块功能(UCA0CLK)。
*/
GPIO_setAsPeripheralModuleFunctionInputPin (
GPIO端口P1,
GPIO _PIN5,
GPIO辅助模块功能
);
//为UCA0TXD/UCA0SIMO,UCA0RXD/UCA0SOMI配置引脚
//将WFP 2.0 ,WFP 2.1 设置为辅助模块功能输入。
/*

*选择端口2
*将引脚0,1设置为输入辅助模块功能(UCA0TXD/UCA0SIMO,UCA0RXD/UCA0SOMI)。
*/
GPIO_setAsPeripheralModuleFunctionInputPin (
GPIO端口P2,
GPIO _PIN0 + GPIO _PIN1,
GPIO辅助模块功能
);

/*
*禁用GPIO开机默认高阻抗模式以激活
*以前配置的端口设置
*/
pm_unlockLPM5();

//初始化主中继器
EUSCI_B_SPI_initMasterParam参数={0};
param.selectClockSource = EUSCI_B_SPI_CLOCKSOURCE_ACLK;
Param.clockSourceFrequency = CS_getACLK();
param.desiredSpiClock = 50万;
para.msbFirst = EUSCI_B_SPI_MSB_FIRST;
Param.clockPhase = EUSCI_B_SPI_PHASE DATA_Changed_ONFIRST_Captured_on_next;
Param.clockPolarity = EUSCI_B_SPI_CLOCKPOLARITY_INACILY_HIGH;
PARAM.spin模式= EUSCI_B_SPI_3pin;
EUSCI_B_SPI_initMaster(EUSSCI_B1_base,&param);

//启用SPI模块
EUSCI_B_SPI_ENE(EUSI_B1_base);

//清除接收中断标志
EUSCI_B_SPI_clearInterrupt (EUSI_B1_base,
EUSCI_B_SPI_Receive_interrupt
);

//启用USI_A0 RX中断
EUSCI_B_SPI_enableInterrupt (EUSI_B1_base,
EUSCI_B_SPI_Receive_interrupt);

//等待从属设备初始化
__DELAY周期(100);

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

P1DIR |= 0x01; //将WFP 1.0 设置为输出方向,闪烁功能进行调试
P6DIR |= 0x04; //将WFP 6.2 设置为输出方向以进行调试

//USI_A0 TX缓冲器就绪?
而(1){
同时(!EUSI_B_SPI_getInterruptStatus(EUSI_B1_base,
EUSCI_B_SPI_Transmit_Interrupt);

//将数据传输到从属设备
EUSCI_B_SPI_TXData(EUSI_B1_base, TXData);

I = 1万; //软件延迟
我是否--;
while (i !=0);
P1OUT ^= 0x01; //使用excluse-or切换WFP 1.0
P6OUT ^= 0x04; //使用excluse-or
}切换WFP 6.2


__bis_sr_register (LPM0_bits + GIE); // CPU关闭,启用中断
__no_operation(); //保留在LPM0


中}

#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector=USI_A0_vector
__interrupt
#Elif defined(__GNUC__)
__attribute__(interrupt (interrupt (USCI_A0_vector))
#endif
void (ISR){_USI_A0_void (ISR)

开关(__均匀_in_range(UCA0IV,4)){
//矢量2 - RXIFG
案例2:
//USI_A0 TX缓冲器就绪?
同时(!EUSI_A_SPI_getInterruptStatus(EUSI_A0_base,
EUSCI_A_SPI_Transmit_Interrupt);

RXData = EUSI_A_SPI_receiveData (EUSI_A0_base);

//增量数据
TXData++;

//发送下一个值
EUSCI_A_SPI_SpeneData(EUSI_A0_base,
TXData
);

//从属设备处理信息的传输之间的延迟
__DELAY周期(40);

中断;
默认值:break;
}
}

对原始代码的唯一附加修改是我将闪烁添加到LED作为调试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您提出有关MSP430FR5994和SPI的问题。

    查看代码的结尾。 您需要修改EUSCI_A中断处理程序,使其与已实现的EUSCI_B相匹配。