请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号: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,¶m))
{
返回;
}
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:中断;
}
}