e4df6957c63787a922c0b511e5835757fbc531fd
[i3-mote/i3-mote.git] / Basic-Test-Package / MSP432 / Test_MSP432_ClockSystem / main.c
1 /*******************************************************************************
2  * MSP432 Clock System - HFXT Startup
3  *
4  * Description:
5  *
6  * HFXTAL:
7  * Starts the 48MHz crystal attached to HFXTIN/HFXTOUT
8  * Sources MCLK from the crystal
9  *
10  * LFXTL:
11  * Starts the 32khz crystal attached to LFXTIN/LFXTOUT
12  * Sources AMCLK from crystal
13  *
14  * Internal DCO:
15  * Starts the DCO
16  * Sources SMCLK from DCO
17  *
18  * Blinks LEDs using SysTick (which is sourced from MCLK).
19  *
20  *
21  *
22  *              MSP432P401
23  *             ------------------
24  *         /|\|                  |
25  *          | |                  |
26  *          --|RST         P8.5  |---> LED
27  *            |                  |
28  *            |      PJ.3 HFXTIN |<--------
29  *            |                  |   < 48Mhz xTal >
30  *            |     PJ.2 HFXTOUT |<--------
31  *            |                  |
32  *            |       PJ.0 LFXIN |<--------
33  *            |                  |   < 32khz xTal >
34  *            |      PJ.1 LFXOUT |<--------
35  *            |                  |
36  *            |             P4.2 |--> ACLK   - 32.768 KHz
37  *            |             P4.3 |--> MCLK   - 12.000 MHz
38  *            |             P4.4 |--> HSMCLK -  6.000 MHz
39  *            |             P7.0 |--> SMCLK
40  *            |                  |
41  *
42  * Author: Timothy Logan
43  * Rev: B.Martinez
44  ******************************************************************************/
45 #include "i3mote.h"
47 /* DriverLib Includes */
48 #include "driverlib.h"
50 /* Standard Includes */
51 #include <stdint.h>
52 #include <stdbool.h>
54 int main(void)
55 {
56     /* Halting the Watchdog */
57     MAP_WDT_A_holdTimer();
58     
59     /* Configuring pins for peripheral/crystal usage*/
60     /* LFXTAL */
61     MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_PJ,
62             GPIO_PIN0 | GPIO_PIN1, GPIO_PRIMARY_MODULE_FUNCTION);
64     /* HFXTL */
65     MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_PJ,
66             GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
68     /* Clocks Output */
69     GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P4,
70                 GPIO_PIN2|GPIO_PIN3|GPIO_PIN4, GPIO_PRIMARY_MODULE_FUNCTION);
71     GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P7,
72             GPIO_PIN0, GPIO_PRIMARY_MODULE_FUNCTION);
74     /* LEDs */
75     MAP_GPIO_setAsOutputPin(HID_PORT,LEDG|LEDR);
76     MAP_GPIO_setOutputHighOnPin(HID_PORT, LEDG|LEDR);
78     /* Setting the external clock frequency. This API is optional */
79     CS_setExternalClockSourceFrequency(32000,12000000);
81     /* Starting HFXT in non-bypass mode without a timeout. Before we start
82      * we have to change VCORE to 1 to support the 48MHz frequency */
83     MAP_PCM_setCoreVoltageLevel(PCM_VCORE1);
84     MAP_FlashCtl_setWaitState(FLASH_BANK0, 2);
85     MAP_FlashCtl_setWaitState(FLASH_BANK1, 2);
86     CS_startHFXT(false);
88     /* Initializing MCLK to HFXT (effectively 48/4 MHz) */
89     MAP_CS_initClockSignal(CS_MCLK, CS_HFXTCLK_SELECT, CS_CLOCK_DIVIDER_4);
91     /* Initializing ACLK to LFXT */
92     CS_startLFXT(false);
93     MAP_CS_initClockSignal(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);
96     /* Initializes Aux. Clocks System with DCO */
97     MAP_CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_48);
98     MAP_CS_initClockSignal(CS_HSMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_8);
99     MAP_CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_8);
101     /*
102      * Configuring SysTick to trigger at 6000000
103      * MCLK is 12MHz so this will make it toggle every 0.5s
104      * */
106     MAP_SysTick_enableModule();
107     MAP_SysTick_setPeriod(6000000);
108     MAP_Interrupt_enableSleepOnIsrExit();
109     MAP_SysTick_enableInterrupt();
110     
111     /* Enabling MASTER interrupts */
112     MAP_Interrupt_enableMaster();   
114     while (1)
115     {
116         MAP_PCM_gotoLPM0();
117     }
120 void SysTick_Handler(void)
122     MAP_GPIO_toggleOutputOnPin(HID_PORT, LEDG|LEDR);