请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP-EXP430FR5994 主题中讨论的其他部件:MSP430WARE, MSP430FR5994
尊敬的各位:
我刚刚开始使用评估板和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
|->串行时钟输出(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,¶m);
//启用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作为调试。