void System_init() { SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ| SYSCTL_OSC_MAIN); SystemClock=SysCtlClockGet(); Key_init(); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); MAP_GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_2); MAP_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,GPIO_PIN_2); ui8Flush_Flag=FLUSH_ON; Template_DriverInit(); GrContextInit(&g_sContext, &g_sTemplate_Driver); GrContextForegroundSet(&g_sContext, ClrWhite); GrContextBackgroundSet(&g_sContext, ClrBlack); GrContextFontSet(&g_sContext, &g_sFontFixed6x8); GrClearDisplay(&g_sContext); GrFlush(&g_sContext); // IntMasterEnable(); }
时间: 2024-04-10 15:32:25 浏览: 184
这段代码是用于初始化系统的函数。首先,它设置了系统时钟,将系统时钟分频为4,使用PLL作为时钟源,并设置了外部晶体振荡器频率为16MHz。然后,它获取并保存了系统时钟的频率。接下来,它初始化了按键,并使能了GPIOB端口。然后,它将GPIOB的第2引脚配置为输出,并将其输出设置为高电平。然后,它设置了一些全局变量的初始值。接着,它初始化了模板驱动和图形上下文,并设置了前景色为白色,背景色为黑色,并选择了一个固定大小的字体。最后,它清除显示,并刷新图形上下文。
相关问题
void System_init() { SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ| SYSCTL_OSC_MAIN); SystemClock=SysCtlClockGet(); Key_init(); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); MAP_GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_2); MAP_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,GPIO_PIN_2); ui8Flush_Flag=FLUSH_ON; Template_DriverInit(); GrContextInit(&g_sContext, &g_sTemplate_Driver); GrContextForegroundSet(&g_sContext, ClrWhite); GrContextBackgroundSet(&g_sContext, ClrBlack); GrContextFontSet(&g_sContext, &g_sFontFixed6x8); GrClearDisplay(&g_sContext); GrFlush(&g_sContext); // IntMasterEnable(); }
这段代码是用于初始化系统的函数。首先,它调用`SysCtlClockSet()`函数设置系统时钟,将系统时钟分频为4,使用PLL作为时钟源,并设置外部晶体振荡器频率为16MHz,使用主时钟源。然后,它调用`SysCtlClockGet()`函数获取系统时钟的频率并将其保存到`SystemClock`变量中。接下来,它调用`Key_init()`函数初始化按键功能。然后,它调用`MAP_SysCtlPeripheralEnable()`函数使能GPIOB端口,并调用`MAP_GPIOPinTypeGPIOOutput()`函数将GPIOB的第2引脚配置为输出模式。接着,它调用`MAP_GPIOPinWrite()`函数将GPIOB的第2引脚输出设置为高电平。
接下来,它将`ui8Flush_Flag`变量设置为`FLUSH_ON`。然后,它调用`Template_DriverInit()`函数进行模板驱动的初始化。接着,它调用`GrContextInit()`函数初始化图形上下文,并将其与模板驱动关联起来。然后,它调用`GrContextForegroundSet()`函数设置图形上下文的前景色为白色,调用`GrContextBackgroundSet()`函数设置图形上下文的背景色为黑色。接下来,它调用`GrContextFontSet()`函数设置图形上下文的字体为固定大小的6x8字体。然后,它调用`GrClearDisplay()`函数清除显示,并调用`GrFlush()`函数刷新图形上下文。
最后,注释掉了`IntMasterEnable()`函数的调用。这个函数可能是用来使能中断的,但在这段代码中被注释掉了。
/* 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;//亮一个灯证明系统正常运行 } }
您的代码看起来是在使用TI的MSP432E4 LaunchPad开发板上配置和控制PWM输出和GPIO。有以下几点需要注意:
1. 代码中的`PWM_init()`函数用于初始化定时器2(TIMER2)为PWM模式,并设置频率为2kHz,占空比为66%。
2. `gpio_init()`函数用于初始化GPIO(General Purpose Input/Output)端口N,将D1和D2引脚设置为输出模式,并打开相应的数字使能(DEN)。
3. `main()`函数中通过调用`SysCtlClockFreqSet()`函数将系统时钟频率设置为120MHz,并打开TIMER2和GPIO端口M和N的时钟。
4. 在进入无限循环后,将D2引脚置高,以示系统正常运行。
请问您有什么关于这段代码的疑问吗?
阅读全文