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.

[参考译文] MSP432P401R:EUSCI_A2在使用SparkFun Venus638FLPx记录仪的UART模式下不工作

Guru**** 2586405 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/617875/msp432p401r-eusci_a2-not-working-in-uart-mode-with-sparkfun-venus638flpx-logger

部件号:MSP432P401R

您好,

利用'uartecho_MSP_EXP432P401R_nortos_CCS'的示例,我能够毫无困难地获得常规UART回波活动。  我现在要做的是配置另一个UART,以便从GPS记录器接收NMEA数据。  我已经尝试登录SparkFun论坛多次,但无论使用什么电子邮件地址,我都无法收到他们的验证电子邮件。  通过查看他们的论坛,我还注意到许多问题从未得到解答,因此我将在这里发布。  除了有关实际GPS芯片本身的文档外,记录仪上没有很多文档(这并不奇怪)。  其余部分与SparkFun布局和原理图有关,因此不是很有用。  

我以前从未接触过GPS设备,但从我可以看出它只是一个UART接口,所以我假定我只需要配置MSP432的UART,等待接收中断发生,然后我应该拥有 数据。  这根本不起作用。  这是我目前使用的代码。  

#include <ti/devices/msp432p4xx/driverlib/driverlib.h>//#include
<ti/drivers/UART.h>
#include <string.h>

const eUSI_UART_Config UART_Config ={

EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK时钟源
78, // BRDIV = 78
2, // UCXBRF = 2
0, // UCXBRS = 0
EUSCI_A_UART_NO_PARity, //不奇偶校验
EUSCI_A_UART_LSB First, // LSB优先
EUSCI_A_UART_ON_STOP_BIT, //一个停止位
EUSCI_A_UART_MODE, // UART模式
EUSCI_A_UART_OST_OWRAMP_BAUDRATE_generation // Oversampling
};

const eUSI_UART_Config GPS_Config ={

EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK时钟源
78, // BRDIV = 78
2, // UCXBRF = 2
0, // UCXBRS = 0
EUSCI_A_UART_NO_PARity, //不奇偶校验
EUSCI_A_UART_LSB First, // LSB优先
EUSCI_A_UART_ON_STOP_BIT, //一个停止位
EUSCI_A_UART_MODE,// UART模式
EUSCI_A_UART_ORTS_Ooversampling_BAUDRATE_generation // Oversampling
};


void uartsend(car *printy)
{
//当有更多字符要发送时循环。
内部索引;
对于(index = 0;index < strlen (printy);index++)
{
//将下一个字符写入UART。
MAP_UART_HESRData(EUSI_A0_base, printy[index]);
}
}



void main(void){

//在UART模式下选择WFP 1.2 和WFP 1.3
MAP_GPIO设置外围模块功能输入引脚(GPIO_PORT_P1,
GPIO _PIN1 | GPIO _PIN2 | GPIO _PIN3,GPIO主要模块功能);
//在UART模式下选择WFP 3.2 和WFP 3.3
MAP_GPIO设置外围模块功能输入引脚(GPIO_PORT_P3,
GPIO _PIN2 | GPIO _PIN3,GPIO主要模块功能);

//将DCO设置为12MHz
MAP_CS_setDCOCenteredFrequency (CS_DCO_Frequency_12);

//配置UART模块
MAP_UART_INITModule (EUSCI_A0_BASE,&UART_Config);
//配置UART模块
MAP_UART_INITModule (EUSCI_A2_BASE,&GPS_Config);

//启用UART模块
MAP_UART_enableModule (EUSCI_A0_BASE);
//启用UART模块
MAP_UART_enableModule (EUSCI_A2_BASE);

//启用中断
MAP_UART_enableInterrupt (EUSCI_A0_BASE,EUSCI_A_UART_receive中断);
MAP_Interrupt_enableInterrupt (INT_EUSCIA0);
// 启用中断
MAP_UART_enableInterrupt (EUSCI_A2_BASE,EUSCI_A_UART_receive中断);
MAP_Interrupt_enableInterrupt (INT_EUSCIA2);
MAP_Interrupt_enableSleepOnIsrExit();

char blah[]="testing123\n\n";
"图尔特"(blah);

//下一行不起作用,只是挂起并等待GPS触发中断
// char temp = UART_receiveData(EUSI_A2_base);
易失性UINT32_t I;

//停止看门狗计时器
WDT_A_HOLD (WDT_A_BASE);

//将WFP 1.0 设置为输出方向
GPIO_setAsOutputPin(.
GPIO端口P1,
GPIO_PIN0
);

同时(1)
{
//切换WFP 1.0 输出
gPIO_ToggleOutputOnPin(.
GPIO端口P1,
			GPIO PIN0
			);

//延迟
对于(i=10万; i>0; i--);
}
}/*

EUSCI A2 UART ISR -应从GPS */
void euscia2_ISR(void)
{
UINT32_t status = MAP_UART_getEnabableInterruptStatus(EUSI_A2_base);

MAP_UART_CLEARInterruptFlag (EUSCI_A2_BASE,状态);

IF (状态和EUSCI_A_UART_receive中断)
{
CHAR Stuff = MAP_UART_receiveData(EUSI_A2_base);
uartsend(stuff);

}
}/*

ESCI A0 UART ISR -将数据回波到PC主机*/
void euscia0_isr (void)
{
UINT32_t status = MAP_UART_getEnabableInterruptStatus(EUSSCI_A0_base);

MAP_UART_CLEARInterruptFlag (EUSCI_A0_BASE,状态);

IF (状态和EUSCI_A_UART_receive中断)
{
MAP_UART_TEHData(EUSI_A0_base, MAP_UART_receiveData(EUSI_A0_base));
}
}

我在euscia2_ISR内设置了一个中断点,但它从未命中,这告诉我配置了错误的东西,或者GPS接收器没有触发中断。  我也尝试从GPS接收器读取数据,但程序挂起(我猜是因为呼叫被阻止),或者我得到了'0'。

如果有人能看看我在这里得到的东西,并告诉我我是否错过了一些很棒的东西。  如果任何人有使用火花趣味复仇记录仪的经验,我可以利用我所能获得的所有帮助。  我看到的所有示例都是Arduino中的,这并不是很有帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否需要向GPS模块发送特定命令? 我会将A0的TX连接到A2的RX,以查看您是否进入ISR并从设置中取出GPS。 您是否有逻辑分析仪或示波器来查看GPS是否输出数据?

    此外,中断名称表明您使用的是旧版本的代码。 您是否正在使用修订版B硅(黑色启动板)?

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

    Chris,

    感谢您的回复。 至于GPS模块的命令,我所看到的所有示例都是从该模块中读出来的。 实际芯片本身接受二进制命令,但我认为我不需要使用它,因为它集成到SparkFun板上。 如果SparkFun能够记录他们的产品,那将是非常好的。 不管谁,我可以尝试一下,但是我使用的是背信道UART作为A0。  

     我使用的是Red板,代码示例来自资源管理器。 实际上,这是一个更大的项目,但我在上面提供的示例代码是为了单独关注此部分。 我还尝试不启用中断,我宁愿不使用它们,而只是命令读取寄存器。 当我这样做的时候,我总是得到0 (零)。 这使我认为我可能必须向GPS发送配置命令,但我不知道这是什么。

    我有一个模拟发现,但现在我正在旅行,没有携带它。 除此之外,在万用表之外,我没有其他工具。