主题中讨论的其他部件:Energia
我正在按照说明校准传感器的2个时钟。 我一直坚持使用I2C从传感器的FIFO数据寄存器轮询数据的步骤,时间正好为3秒。 我知道这样做的最佳方式是使用MSP432的计时器之一,但我没有足够的经验来实现这一点。 如有任何建议,我们将不胜感激!
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.
我正在按照说明校准传感器的2个时钟。 我一直坚持使用I2C从传感器的FIFO数据寄存器轮询数据的步骤,时间正好为3秒。 我知道这样做的最佳方式是使用MSP432的计时器之一,但我没有足够的经验来实现这一点。 如有任何建议,我们将不胜感激!
是的,我遇到的问题是我没有使用计时器的经验,所以我不知道如何实施计时器。 下面是我的当前代码。
/* TI版权样板被切断*//***************************************************************************************************************
* MSP432 Systick -闪烁LED程序
*
说明:此程序将使用Systick模块使LED闪烁
*一秒钟。 设置后,应用程序将进入LPM3
*模式,并且仅唤醒以切换GPIO引脚。
*
**此程序无限运行,直到用户手动停止。
*
** MSP432P401
* -----------
* /|\\| |
* || |
* --|RST WFP 1.0 |-->WFP 1.0 LED
* | |
* | |
* | |
* | |
* | |
*
*作者:Timothy Logan
******************************************************************************* /*
DriverLib包括*/
#include "driverlib.h"
/*标准包括*/
#include <stdint.h>
#include <stdbool.h>
int main(void){
/*停止监视程序*/
MAP_WDT_A_HoldTimer();
/*将GPIO配置为输出*/
MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN0);
/*配置Systick在150万时触发(MCLK为3MHz,因此这将产生
*每隔0.5秒切换一次)*/
MAP_Systick_enableModule();
MAP_Systick_setPeriod (150万);
MAP_Interrupt_enableSleepOnIsrExit();
MAP_Systick_enableInterrupe();
/*启用主中断*/
MAP_Interrupt_enableMaster();
同时(1)
{
MAP_PCM_GotoLPM0();
}
}
作废Systick_Handler(void){
MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P1, GPIO_PIN0);
}
如果您使用DriverLib,只需按照Systick的示例操作,并根据时钟和粒度更改频率。
/*******************************************************************************
* MSP432 Systick -闪烁LED程序
*
说明:此程序将使用Systick模块使LED闪烁
*一秒钟。 设置后,应用程序将进入LPM3
*模式,并且仅唤醒以切换GPIO引脚。
*
**此程序无限运行,直到用户手动停止。
*
** MSP432P401
* -----------
* /|\\| |
* || |
* --|RST WFP 1.0 |-->WFP 1.0 LED
* | |
* | |
* | |
* | |
* | |
*
*作者:Timothy Logan
******************************************************************************* /*
DriverLib包括*/
#include "driverlib.h"
/*标准包括*/
#include <stdint.h>
#include <stdbool.h>
volatile UINT32_t Tick;
int main(void){
UINT32_t开始时间;
Int numReads =0;
/*停止监视程序*/
MAP_WDT_A_HoldTimer();
/*将GPIO配置为输出*/
MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN0);
/*配置Systick在3000时触发(MCLK为3MHz,因此这将产生
*每1毫秒切换一次)*/
MAP_Systick_enableModule();
MAP_Systick_setPeriod (3000);
MAP_Systick_enableInterrupe();
/*启用主中断*/
MAP_Interrupt_enableMaster();
StartTime =勾号;
而((Tick - StartTime < 3000)//减法在此处非常重要,因为滚动
{
IF (isMySensorReady()== true)
{
ReadSensor();
numReads++;
}
}
//计算传感器时间
}
void Systick_Handler(void){
tick ++;
}
回复我自己的帖子
您可能希望执行如下操作:
我注意到的其他几件事。 我查找了该部件的数据表,我认为820Hz设置需要0x0C,而不是0x1c发送给它。
您的设备运行速度似乎是12MHz,而不是3MHz。 这意味着MAP_Systick_setPeriod(3000)是0.25 毫秒,而不是示例中的1毫秒。 然后,循环将以0.25ms/Tick或750ms的速度运行到3000Ticks (我想您需要3秒的数据捕获),因此应该需要MAP_Systick_setPeriod(1.2万)。