您好!
我在 MSP430FR2422上工作、我不熟悉此电路板。 我目前正在使用 UART,我正在尝试接收来自 UART 外部外设的数据,我想接收数据,但在这里我无法这样做。 我为 UART COM 端口提供输入、该端口应连接到我们正在使用的 UCA0RXD P1.5。 在这里,我们面临的主要问题是,当 ISR 被调用时,例程被执行,并且 dat 不会保存在 UCARXBUF 中。 我附加了代码、我还从资源浏览器中看到了驱动程序和寄存器库示例、但我没有找到任何重要线索。
/*********
#include "driverlib.h"
//#include "Board.h"
#define GPIO_PORT_UCA0TXD GPIO_PORT_P1
#define GPIO_PIN_UCA0TXD GPIO_PIN4
#define GPIO_FUNCITY_UCA0TXD GPIO_PRIMARY_MODULE_FUNCTION
#define GPIO_PORT_UCA0RXD GPIO_PORT_P1
#define GPIO_PIN_UCA0RXD GPIO_PIN5
#define GPIO_FUNCITY_UCA0RXD GPIO_PRIMARY_MODULE_FUNCTION
uint16_t i;
uint8_t RXData = 0、TXData = 0;
char mystr[20]="Hello_World\r\n";
unsigned long int m=0;
uint8_t check = 0;
#include
void main (void)
{
//停止看门狗计时器
WDT_A_HOLD (WDT_A_base);
//set ACLK = REFOCLK、时钟分频器为1
CS_initClockSignal (CS_ACLK、CS_REFOCLK_select、CS_Clock_divider);
//set SMCLK = DCO、分频器为1
CS_initClockSignal (CS_SMCLK、CS_DCOCLKDIV_SELECT、CS_CLOCK _DIVIDER_1);
//set MCLK = DCO、分频器为1
CS_initClockSignal (CS_MCLK、CS_DCOCLKDIV_SELECT、CS_CLOCK _DIVIDER_1);
//配置 UART 引脚
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_UCA0TXD、
GPIO_PIN_UCA0TXD、
GPIO_Function_UCA0TXD
);
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_UCA0RXD、
GPIO_PIN_UCA0RXD、
GPIO_Function_UCA0RXD
);
/*
*禁用 GPIO 上电默认高阻抗模式以激活
*先前配置的端口设置
*
PMM_unlockLPM5 ();
//配置 UART
//SMCLK = 1MHz、波特率= 115200
//UCBRx = 8、UCBRFx = 0、UCBRSx = 0xD6、UCOS16 = 0
EUSCI_A_UART_initParam param ={0};
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockPrescalar = 8;
param.firstModReg = 0;
param.secondModReg = 0xD6;
param.parity = EUSCI_A_UART_NO_parity;
param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
param.numerofStopBits = EUSCI_A_UART_Oe_STOP_BIT;
param.uartMode = EUSCI_A_UART_MODE;
param.oversaming= EUSCI_A_UART_LOW_FREQUENCY BAUDRATE_generation;
if (STATUS_FAIL = EUSCI_A_UART_init (EUSCI_A0_BASE、¶m)){
返回;
}
EUSCI_A_UART_ENABLE (EUSCI_A0_BASE);
EUSCI_A_UART_clearInterrupt (EUSCI_A0_BASE、
EUSCI_A_UART_Transmit 中断);
//启用 USCI_A0 RX 中断
EUSCI_A_UART_enableInterrupt (EUSCI_A0_BASE、
EUSCI_A_UART_Transmit 中断);
//启用全局中断
_enable_interrupt ();
while (1)
{
//增加 TX 数据
//将数据加载到缓冲区中
int f;
for (f=0;mystr[f]!='0';f++)
{
//UCA0TXBUF=mystr[f];
eUSCI_A_UART_transmitData (eUSCI_A0_BASE、mystr[f]);
}
for (m=0;m<10000;m++);
// while (check!= 1);
//check = 0;
}
}
//
//
//这是 USCI_A0中断矢量处理例程。
//
//
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_A0_Vector
_interrupt
#Elif defined (_GNU_)
__attribute__((中断(USCI_A0_Vector))
#endif
空 EUSCI_A0_ISR (空)
{
switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
{
USCI_NONE 案例:中断;
USCI_UART_UCTXIFG 案例:
// RXData=UCA0RXBUF;
RXData = EUSCI_A_UART_receiveData (EUSCI_A0_BASE);
//检查值
//if (!(RXData == TXData))
//{
// while (1);
//}
//check =1;
中断;
USCI_UART_UCRXIFG 案例:中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
}
}