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.

[参考译文] MSP430FR6989:MSP430FR6989的背信道

Guru**** 2585275 points
Other Parts Discussed in Thread: MSP430FR6989, MSP-EXP430FR6989

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/617722/msp430fr6989-backchannel-of-msp430fr6989

部件号:MSP430FR6989
主题中讨论的其他部件: MSP-EXP430FR6989

尊敬的各位:  

我正在使用MSP430FR6989 EVM与PC进行通信。

i使用2.0 和2.1 for TXD和RXD。 和UART_A0中断(用于背面通道)。

中断运行良好(发送数据时LED切换)。 但PC无法接收数据。  

我猜反向通道设置不正确。 也许销钉不正确。 是否有人有经验。 请帮我解决这个问题。

以下是代码:

#include "driverlib.h"
#include "stdio.h"

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

void main (void)
{
//停止看门狗
WDT_A_HOLD (WDT_A_BASE);

// LFXT设置
//将PJ.4和PJ.5设置为主模块功能输入。
/*

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

//将DCO频率设置为1 MHz
CS_setDCOFreq (CS_DCORSEL_0,CS_DCOFSEL_0);
//将外部时钟频率设置为32.768 KHz
cs_setExternalClockSource(3.2768万,0);
//设置ACLK=LFXT
CS_initClockSignal (CS_ACLK,CS_LFXTCLK_SELECT,CS_Clock_diver_1);
//设置SMCLK = DCO,频分器为1
cs_initClockSignal (CS_SMCLK,CS_DCOCLK_SELECT,CS_Clock_diver_1);
//设置MCLK = DCO,分频器为1
CS_initClockSignal (CS_MCLK,CS_DCOCLK_SELECT,CS_Clock_diver_1);
//在没有超时的情况下启动XT1
cs_turnOnLFXT(CS_LFXT_DRIVE_0);

//配置UART引脚
//将WFP 2.0 和WFP 2.1 设置为辅助模块功能输入。
/*

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

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

//配置UART
EUSCI_A_UART_initParam ={0};
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_ACLK;
Param.clockPrescalar = 3;
Param.firstModReg = 0;
param.secondModReg = 92;
Param.parity = EUSCI_A_UART_NO_PARity;
Param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
StopBits的Param.number= EUSCI_A_UART_ONE_STOP_BIT;
Param.uartMode = EUSCI_A_UART_MODE;
Param.oversampling = EUSCI_A_UART_LOW频率_BAUDRATE_RELEA;

IF (STATUS_FAIL == EUSCI_A_UART_INIT (EUSCI_A0_BASE,&param))
{
返回;
}

EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);

EUSCI_A_UART_clearInterrupt (EUSI_A0_base,
EUSCI_A_UART_Transmit_Interrupt);
EUSCI_A_UART_clearInterrupt (EUSI_A0_base,
EUSCI_A_UART_receive中断);

//启用USI_A0 RX中断
EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE,
EUSCI_A_UART_receive中断);//启用中断
EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE,
EUSCI_A_UART_Transmit_Interrupt);

__enable_interrupit();

同时(1)
{
TXData = TXData + 1; //递增TX数据
//将数据加载到缓冲区
printf ("%u\n",TXData);
EUSCI_A_UART_HSDRData(EUSI_A0_BASE,
TXData);
printf ("%u\n",UCA0TXBUF);
GPIO _setAsOutputPin (GPIO端口P1,GPIO _PIN0);
while (检查!= 1)
{
;}

检查= 0;
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(5000);
//__bis_sr_register(LPM3_bits + GIE);
}
}//**************************************************************************************************************


////
这是USI_A0中断向量服务例程。
////************************************************************************************************

#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_ICC__)
#pragma vector=USI_A0_vector
__interrupt
#Elif defined(__Gnuinu_)
__attribute__((interrupt (USI_A0_vector))
#endif
void USI_A0_ISR(void)
{
Switch(__偶 数_in_range(UCA0IV,USI_UART_UCTXCPTIFG))
{
案例USI_NONE:
中断;
案例USI_UART_UCRXIFG:
RXData = EUSCI_A_UART_receiveData (EUSCI_A0_BASE);
IF (!(RXData == TXData)) //检查值
{
同时(1)
{
;}

}
检查= 1;
中断;
案例USI_UART_UCTXIFG:
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
检查=1;
//__BIC_SR_REGISTER_ON_EXIT (LPM3_bits);
中断;
案例USI_UART_UCSTIFG:中断;
案例USI_UART_UCTXCPTIFG:中断;
}
}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Wendan,

    您是否正在使用MSP-EXP430FR6989? 如果是这样,则该板上的反向通道UART使用了WFP 3.4 USCI_A1 (3.5 eUSI_A1),您的代码需要相应地修改。 否则,您需要进一步说明硬件设置。

    此致,
    Ryan