MSP430G2231 LaunchPad初始化:深入解析时钟配置与移植

需积分: 10 0 下载量 91 浏览量 更新于2024-09-13 收藏 801KB PDF 举报
在"LaunchPad系统初始化及时钟配置"这篇文章中,作者David Lee主要探讨了在MSP430G2231 LaunchPad开发平台上的系统初始化和时钟设置。文章针对Windows 7 Ultimate 32位操作系统环境,结合Code Composer Studio v4.2.3和IAR for MSP430 v5.20集成开发环境,为读者提供了针对这款特定微控制器的深入理解。 首先,文章强调了时钟在嵌入式系统中的重要性,它是处理器工作的基本驱动力,没有时钟,处理器就无法正常运行。作者通过比喻,生动地解释了为何处理器需要时钟,这与硬件电路设计紧密相连,就像人体机能依赖于脉搏一样。 接下来,作者详细介绍了MSP430G2231的时钟结构,它包含基础时钟模块(BasicClockModule+),能输出三种时钟源:辅助时钟ACLK(Auxillary Clock)、主系统时钟MCLK(Main System Clock)和子系统时钟。这些时钟源对于系统功能的不同部分具有关键作用,如ACLK用于低功耗模式下的操作,而MCLK和子系统时钟则支持更复杂的系统级任务。 文章的重点在于如何利用Grace工具对MSP430G2231进行时钟配置。Grace是一款可能的开发工具,它生成的初始化代码需要适配到IAR for MSP430中。在使用IAR时,开发者需要确保选择正确的器件型号(MSP430G2231),并配置仿真器为FETDebugger。而在Code Composer Studio中,选择MSP430G2231型号并使用默认的TIMSP430USB1作为仿真器即可。 此外,文章还提到了其他相关帖子,如"手把手教你使用Grace开发LaunchPad"和"大学堂之IO的使用",这些资源可以帮助读者进一步掌握MSP430G2231的开发实践和基础知识。这篇文章为开发人员提供了一个实用的指南,帮助他们理解和配置LaunchPad平台的时钟系统,以便于高效地进行软件开发和调试。

/* DriverLib Includes */ #include <ti/devices/msp432e4/driverlib/driverlib.h> /* Standard Includes */ #include <stdint.h> #include <stdbool.h> uint32_t systemClock; void PWM_init(){ TIMER2->CTL &=~TIMER_CTL_TAEN;//关闭定时器TA,以便进行相关配置 TIMER2->CFG |= TIMER_CFG_16_BIT ;//写入0x4,选择16位定时器 TIMER2->TAMR &=~TIMER_TAMR_TACMR;//清除CMR //按顺序配置为启用PWM模式,周期模式 TIMER2->TAMR |= TIMER_TAMR_TAAMS+TIMER_TAMR_TAMR_PERIOD; TIMER2->CTL &=~ TIMER_CTL_TAPWML;//默认输出状态,置1为反向输出 //输出为2KHZ方波,占空比为66%,因为系统时钟为120兆HZ。具体频率可以参考下面的写法修改。 TIMER2->TAILR =systemClock/2000; TIMER2->TAMATCHR=systemClock/6000; TIMER2->CTL |= TIMER_CTL_TAEN;//打开定时器TA //目前还不会下面三个定义,直接套用官方库函数,其次是底层定义里面没有PCTL中PCMn的相关定义 MAP_GPIOPinConfigure(GPIO_PM0_T2CCP0); MAP_GPIOPinTypeTimer(GPIO_PORTM_BASE, GPIO_PIN_0 ); MAP_TimerEnable(TIMER2_BASE, TIMER_A); } void gpio_init(){ //led_init GPION->DIR|=BIT1+BIT0;//D1,D2 light on GPION->DEN|=BIT1+BIT0; } int main(void) { //修改系统时钟为120兆HZ systemClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000); //和打开GPIO时钟一样,这里打开TIMER2时钟 SYSCTL->RCGCTIMER|=SYSCTL_RCGCTIMER_R2; while((SYSCTL->RCGCTIMER & SYSCTL_RCGCTIMER_R2) == 0){}; SYSCTL->RCGCGPIO |= SYSCTL_RCGCGPIO_R12+SYSCTL_RCGCGPIO_R11; // activate clock for Port M,N while((SYSCTL->RCGCGPIO & (SYSCTL_PRGPIO_R12+SYSCTL_RCGCGPIO_R11)) == 0){}; // wait for preparation of Port M,N PWM_init(); gpio_init(); while(1){ GPION->DATA |=BIT0;//亮一个灯证明系统正常运行 } }

2023-07-09 上传