Part Number: MSP432P401R
Tool/software: Code Composer Studio
Hi All,
My goal was to generate an output on Pin P6.7 with a frequency at 500kHz. However, after many attempts of changing some parameters, I can only get a maximum frequency at around 268kHz. How would I go about correcting this?
This is my first time coming back to the MSP432 after a year break so I have gotten rusty; I tried reviewing datasheets and manuals but am still stuck. (And also my first post here)
/*
* MSP432 GPIO - Pin 6.7 with Timer32_0
*
*/
#include <stdint.h> //Exact-width integer types
#include <ti\devices\msp432p4xx\driverlib\driverlib.h> //Driver library
#define DCO_FREQ 48e6 //unit: Hz; DCO nominal frequencies: 1.5, 3, 6, 12, 24, 48 MHz.
#define TIMER0_FREQ 500000 //unit: Hz
//function prototypes
void initDevice(void);
void initTimer(void);
void initGPIO(void);
//global variables
uint32_t clockMCLK;
void main(void)
{
initDevice();
initTimer();
initGPIO();
//Enable interrupts
Interrupt_enableSleepOnIsrExit();
Interrupt_enableMaster();
Timer32_startTimer(TIMER32_0_BASE, false);
while(1)
{
PCM_gotoLPM0();
}
}
void initDevice(void)
{
WDT_A_holdTimer(); //stop Watchdog timer
//Change VCORE to 1 to support a frequency higher than 24MHz.
//See data sheet for Flash wait-state requirement for a given frequency.
PCM_setPowerState(PCM_AM_LDO_VCORE1);
FlashCtl_setWaitState(FLASH_BANK0, 1);
FlashCtl_setWaitState(FLASH_BANK1, 1);
//Enable FPU for DCO Frequency calculation.
FPU_enableModule();
FPU_enableLazyStacking(); // Required to use FPU within ISR.
//Only use DCO nominal frequencies: 1.5, 3, 6, 12, 24, 48MHz.
CS_setDCOFrequency(DCO_FREQ);
//Divider: 1, 2, 4, 8, 16, 32, 64, or 128.
//SMCLK used by UART and ADC14.
CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
CS_initClockSignal(CS_HSMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_8);
CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_16);
clockMCLK = CS_getMCLK();
}
void initTimer(void)
{
Timer32_initModule(TIMER32_0_BASE, TIMER32_PRESCALER_1, TIMER32_32BIT, TIMER32_PERIODIC_MODE);
Timer32_setCount(TIMER32_0_BASE, clockMCLK/TIMER0_FREQ - 1);
Timer32_enableInterrupt(TIMER32_0_BASE);
Interrupt_enableInterrupt(INT_T32_INT1); //Enable Timer32_0 interrupt in the interrupt controller.
}
void initGPIO(void)
{
//Configure P6.7 as output.
GPIO_setAsOutputPin(GPIO_PORT_P6, GPIO_PIN7);
}
//Timer32_0 ISR
void T32_INT1_IRQHandler(void)
{
Timer32_clearInterruptFlag(TIMER32_0_BASE);
GPIO_toggleOutputOnPin(GPIO_PORT_P6, GPIO_PIN7);
}
Any insight would be much appreciated.
Regards,
Jenna
