本帖最后由 oxygenzz 于 2019-4-18 15:32 编辑
MCC是Microchip的图型化芯片配置工具和代码生成器,十足的开发利器。 但其实它也是一个很好的学习利器。图形化界面可以与数据手册进行对照,避免了单纯阅读数据手册的枯燥,可加快理解芯片工作原理。并且可进一步研读MCC生成的代码,从寄存器级别了解芯片的配置。并且可以从中理解MCC的代码架构设计。这一架构是Microchip固件专家精心设计的,符合自家硬件和编译器的特性,且易用,高效,精简,非常适用于资源受限MCU的开发。
因此对于初学者,或有一定使用经验想要继续深入的开发者,MCC都是一个非常好的学习工具。MCC可以免费下载使用。不论你手里没有硬件板,都可以开始学习了。
下面举个简单例子,让大家感受一下这样学习的直观便利。。 下面是的PIC18F18446 的MCC时钟配置界面。时钟选择下拉框里面列出了可选的6种时钟。
它们与下图中,数据手册的时钟模块框图中的6种时钟一一对应,并且他们的选用控制通道一目了然。其中也能看到控制多路选择的控制位名称,例如COSC<2:0>控制时钟选通通道,CDIV<3:0>控制分频比率。系统时钟和外设时钟同源,但在不同休眠模式下,可以分别控制。
MCC与数据手册互相印证,数据手册提供了最详细的信息。
在MCC生成代码后,可在工程中,查看这些MCC生成的代码。定位到时钟初始化代码。 代码里是直接寄存器赋值,并带有清楚明确的注释。代码中通过操作OSCCON1 和OSCFRQ将时钟切换为内部4MHz。 void OSCILLATOR_Initialize(void) { // NOSC HFINTOSC; NDIV 1; OSCCON1 = 0x60; // CSWHOLD may proceed; SOSCPWR Low power; OSCCON3 = 0x00; // MFOEN disabled; LFOEN disabled; ADOEN disabled; SOSCEN disabled;EXTOEN disabled; HFOEN disabled; OSCEN = 0x00; // HFFRQ 4_MHz; OSCFRQ = 0x02; // HFTUN 0; OSCTUNE = 0x00;
} 再去对照数据手册,了解每一位/位域的具体含义。
代码中与时钟配置相关还有芯片配置位,它们设定了芯片上电或复位后的起始时钟状态。代码在device_config.c中。 // CONFIG1 #pragma config FEXTOSC = OFF // External Oscillator mode selectionbits->Oscillator not enabled #pragma config RSTOSC = HFINT1 // Power-up default value for COSCbits->HFINTOSC (1MHz) #pragma config CLKOUTEN = OFF // Clock Out Enable bit->CLKOUT functionis disabled; i/o or oscillator function on OSC2 #pragma config CSWEN = ON // Clock Switch Enable bit->Writing toNOSC and NDIV is allowed #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enablebit->FSCM timer enabled
再到数据手册了解具体含义。原来复位后初始使用内部时钟(HFINTOSC 1MHz),配置位FEXTOSC设为b100 (外部振荡器未使能),RSTOSC设为b110 (HFINTOSC1MHz)。
至此,时钟的配置情况可以总结为: 1. 复位后,MCU运行在内部1MHz。
2. 执行时钟初始化函数后,系统时钟切换为内部4MHz。
|