请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP432P401R 主题中讨论的其他部件:MSPWARE
您好,我对MSP432的时钟频率有一个疑问。
我使用TM4C129 UC已有一段时间...为我设置时钟频率很简单,只需使用以下命令:
ui32SysClock = MAP_SysClockFreqSet(((sysctl_XTal_25MHz|) sysctl_OSC | sysctl_use_pll | sysctl_CFG_VCO_480),1.2亿);
现在我已经转至msp432,在下一个代码中,我不知道UC工作时钟频率,我只能看到I2C工作时钟频率为3 MHz:
/* DriverLib定义*/
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>/*
标准定义*/
#include <stdint.h>
#include <stdbool.h>
#include <string.h>/*
I2C从属地址*/
#define slaver_address 0x68
#define NUM_OF_REC_Bytes 15
/* Variables */
const uint8_t TXData[2]={0x6b,0x00};
static uint8_t RXData[NUM_OF_REC_Bytes];
static volatile UINT32_t xferIndex;
static volatile stopSent;
/* I2C Master Configuration Parameter */
const eConfig
{ I2cConfig = I2I2_I2_I2I2_Config
EUSCI_B_I2C_CLOCKSOURCE_SMCLK, // SMCLK时钟源
300万, // SMCLK = 3MHz
EUSCI_B_I2C_SET_DATA_RATE_400KBPS, //所需的I2C时钟为100kHz
0, //无字节计数器阈值
EUSCI_B_I2C_NO_AUTO_STOP //无自动停止
};
int main(void){
/*禁用监视程序*/
MAP_WDT_A_HoldTimer();
/*
cs_setDCOCenteredFrequency (CS_DCO_Frequency_48);
cs_setReference振 荡器频率(CS_REFO_128KHZ);
cs_initClockSignal (CS_MCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_1);
cs_initClockSignal (CS_SMCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_1);
PCM_setPowerState(PCM_AM_LH_VCORE0);
*/
MAP_GPIO_setAsPeripheralModuleFunctionInputPin (GPIO端口P1,GPIO_PIN6 + GPIO_PIN7,GPIO主要模块功能);
stopSent =假;
memset (RXData,0x00,NUM_OF_REC_Bytes);
/*在100kHz的频率下将I2C主设备初始化到SMCLK,没有自动停止*/
MAP_I2C_INITMaster (EUSCI_B0_BASE,&i2cConfig);
/*指定从属地址*/
MAP_I2C_setSlaveAddress (EUSCI_B0_BASE,SLAVE_ADDRESS);
/*启用I2C模块以启动操作*/
MAP_I2C_enableModule (EUSCI_B0_BASE);
MAP_Interrupt_enableInterrupt (INT_EUSCIB0);
MAP_Interrupt_enableSleepOnIsrExit();
I2C_masterSendMultiByteStart (EUSI_B0_BASE,TXData[0]);
同时(MAP_I2C_MASTOISStopSent (EUSCI_B0_BASE));
I2C_masterSendMultiByteFinish (EUSI_B0_BASE,TXData[1]);
同时(MAP_I2C_MASTOISStopSent (EUSCI_B0_BASE));
同时(1)
{
同时(MAP_I2C_MASTOISStopSent (EUSCI_B0_BASE));
interrup_enableSleepOnIsrExit();
I2C_masterSendMultiByteStart (EUSI_B0_BASE,0x3B);
xferIndex = 0;
MAP_I2C_masterReceiveStart (EUSCI_B0_BASE);
MAP_I2C_enableInterrupt (EUSCI_B0_BBASE,EUSCI_B_I2C_receive _INTERRUPT0);
MAP_PCM_GotoLPM0InterruptSafe ();
}
}/***************************************************************************************
* eUSCIB0 ISR。 此
ISR内发生重复的启动和发送/接收操作*。
***************** /
void EUSCIB0_IRQHandler (void)
{
UINT_FAST16_t状态;
状态= MAP_I2C_getEnabledInterruptStatus (EUSCI_B0_BASE);
MAP_I2C_clearInterruptFlag (EUSCI_B0_BASE,STATUS);
/*将字节接收到接收缓冲区。 如果我们已收到所有字节,
*发送停止条件*/
IF (状态和EUSCI_B_I2C_Receive_INTERRUPT0)
{
IF (xferIndex == NUM_OF_REC_Bytes -2)
{
MAP_I2C_DisableInterrupt (EUSCI_B0_BASE,EUSCI_B_I2C_Receive_INTERRUPT0);
MAP_I2C_enableInterrupt (EUSCI_B0_BBASE,EUSCI_B_I2C_STOP_INTERRUPT);
I2C_masterReceiveMultiByteStop (EUSCI_B0_BASE);
RXData[xferIndex+]= I2C_masterReceiveMultiByteNext(EUSI_B0_base);
}
否则
{
RXData[xferIndex+]= MAP_I2C_masterReceiveMultiByteNext(EUSI_B0_base);
}
}
否则,如果(状态和EUSCI_B_I2C_STOP_INTERRUPT)
{
MAP_Interrupt_DisableSleepOnIsrExit();
MAP_I2C_DisableInterrupt (EUSCI_B0_BBASE,EUSCI_B_I2C_STOP_INTERRUPT);
}
}
这是 mspware中主从通信代码的修改,在orde中,要与MPU6050通信UC,代码正在处理一些不属于当前问题的问题,我需要知道的是:
此工作中时钟频率的值是多少? 如何将其设置为48 MHz?