lab 4
外部复位实验
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
void MyDelay(unsigned int count)
{
volatile uint32_t i;
for(i=10000*count; i>0; i--);
return ;
}
int main(void)
{
WDT_A_hold(WDT_A_BASE);
GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);
GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
MyDelay(60);
GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
MyDelay(30);
while(1){
GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
MyDelay(10);
GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
MyDelay(5);
}
}
看门狗复位
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
void MyDelay(unsigned int count)
{
volatile uint32_t i;
for(i=1000*count; i>0; i--);
return ;
}
int main(void)
{
unsigned i=4;
unsigned int count=1;
unsigned int count2 = 0;
MAP_WDT_A_holdTimer();
MAP_CS_setReferenceOscillatorFrequency(CS_REFO_128KHZ);
MAP_CS_initClockSignal(CS_MCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);
MAP_CS_initClockSignal(CS_HSMCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);
MAP_CS_initClockSignal(CS_SMCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_8);
MAP_WDT_A_initWatchdogTimer(WDT_A_CLOCKSOURCE_SMCLK,WDT_A_CLOCKDIVIDER_32K);
GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);
GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);
GPIO_setAsOutputPin(GPIO_PORT_P2,GPIO_PIN1);
GPIO_setOutputLowOnPin(GPIO_PORT_P2,GPIO_PIN1);
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);
while (i--)
{
GPIO_toggleOutputOnPin(GPIO_PORT_P2,GPIO_PIN1);
MyDelay(10);
}
MAP_WDT_A_startTimer();
while(1)
{
if (GPIO_getInputPinValue(GPIO_PORT_P1, GPIO_PIN1)==GPIO_INPUT_PIN_LOW)
{
count += count2;
count2 = count - count2;
}
GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
MAP_WDT_A_clearTimer();
MyDelay(count);
}
}
MCLK时钟配置
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
void MyDelay(unsigned int count)
{
volatile uint32_t i;
for(i=1000*count; i>0; i--);
return ;
}
int main(void)
{
MAP_WDT_A_holdTimer();
MAP_CS_initClockSignal(CS_MCLK, CS_MODOSC_SELECT, CS_CLOCK_DIVIDER_1);
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);
MAP_Interrupt_enableInterrupt(INT_PORT1);
MAP_Interrupt_enableMaster();
GPIO_setAsOutputPin(GPIO_PORT_P2,GPIO_PIN1);
GPIO_setOutputLowOnPin(GPIO_PORT_P2,GPIO_PIN1);
while(1)
{
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN1);
MyDelay(10);
}
}
void PORT1_IRQHandler(void)
{
uint32_t status;
static int count=7;
unsigned int tmp=0;
status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status);
if(status & GPIO_PIN1)
{
switch(count)
{
case 0:
tmp=CS_CLOCK_DIVIDER_1;
break;
case 1:
tmp=CS_CLOCK_DIVIDER_2;
break;
case 2:
tmp=CS_CLOCK_DIVIDER_4;
break;
case 3:
tmp=CS_CLOCK_DIVIDER_8;
break;
case 4:
tmp=CS_CLOCK_DIVIDER_16;
break;
case 5:
tmp=CS_CLOCK_DIVIDER_32;
break;
case 6:
tmp=CS_CLOCK_DIVIDER_64;
break;
case 7:
tmp=CS_CLOCK_DIVIDER_128;
break;
default:
return ;
}
MAP_CS_initClockSignal(CS_MCLK, CS_MODOSC_SELECT, tmp);
count = (count - 2 + 5 + 6) % 6 + 2;
}
}