终于有时间静下心来学习一下5969,刚起步就碰壁。5969的编程方式官方的给的是基于库的操作,真是有不习惯,但是这是现在编程的最流行的一种,能够提高效率,所以就开始一点点看,想从操作的GPIO开始,根据例程,点LED灯一直没有点亮,感觉挺好郁闷,重新查看例程,里面有一句关键的代码: PMM_unlockLPM5(); 然后查看文档,文档中解释,PM5CTL0中的LOCKPM5需要软件复位,不然IO口处于高阻态。正是这个原因,IO操作一直没有成功。
在时间配置时,内部默认是1M的DCO,例程的中配置为8M的DCO。
下面根据是GPIO操作的代码。现在不管用库操作还是直接寄存器操作都可以。
/*******************************************************************************
*
* main.c
*
* Out of Box Demo for the MSP-EXP430FR5969
* Main loop, initialization, and interrupt service routines
*
* June 2014
* E. Chen
*
******************************************************************************/
#include "main.h"
#include "driverlib.h"
uint8_t RXData = 0; // UART Receive byte
int mode = 0; // mode selection variable
int pingHost = 0; // ping request from PC GUI
Calendar calendar; // Calendar used for RTC
#if defined(__IAR_SYSTEMS_ICC__)
#pragma location = 0x9000
__no_init uint16_t dataArray[12289];
#endif
//-----------------------------------------------------------------------------
int _system_pre_init(void)
{
// Stop Watchdog timer
WDT_A_hold(__MSP430_BASEADDRESS_WDT_A__); // Stop WDT
/*==================================*/
/* Choose if segment initialization */
/* should be done or not. */
/* Return: 0 to omit initialization */
/* 1 to run initialization */
/*==================================*/
return 1;
}
/*
* main.c
*/
int main(void) {
// Board initializations
//Init_GPIO();
//Init_Clock();
//Init_UART();
P1DIR |= 0xFF;
P1OUT |= 0x00;
P4DIR |= 0xFF;
P4OUT = 0x00;
PMM_unlockLPM5();
while (1)
{
//GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
P1OUT |= 0x01;
P4OUT |= 0x40;
_delay_cycles(800000);
P1OUT &= 0xFE;
P4OUT &= 0xBF;
//GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
_delay_cycles(800000);
}
}
/*
* GPIO Initialization
*/
void Init_GPIO()
{
// Set all GPIO pins to output low for low power
GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setOutputLowOnPin(GPIO_PORT_PJ, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7|GPIO_PIN8|GPIO_PIN9|GPIO_PIN10|GPIO_PIN11|GPIO_PIN12|GPIO_PIN13|GPIO_PIN14|GPIO_PIN15);
GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P3, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_PJ, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7|GPIO_PIN8|GPIO_PIN9|GPIO_PIN10|GPIO_PIN11|GPIO_PIN12|GPIO_PIN13|GPIO_PIN14|GPIO_PIN15);
PMM_unlockLPM5(); //必须有
}
/*
* Clock System Initialization
*/
void Init_Clock()
{
// Set DCO frequency to 1 MHz
CS_setDCOFreq(CS_DCORSEL_0, CS_DCOFSEL_6);
//Set external clock frequency to 32.768 KHz
CS_setExternalClockSource(32768, 0);
//Set ACLK=LFXT
CS_clockSignalInit(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);
// Set SMCLK = DCO with frequency divider of 1
CS_clockSignalInit(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
// Set MCLK = DCO with frequency divider of 1
CS_clockSignalInit(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
//Start XT1 with no time out
CS_LFXTStart(CS_LFXTDRIVE_0);
}
应用库操作时,要把头文件包含到里面去,这里学习用工程内部相对引用的方法表示方法:
"${PROJECT_LOC}/driverlib/MSP430FR5xx_6xx"