This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/LAUNCHXL-F2.8069万M:如何将PWM - SymmetricPWM与sci_echoback合并

Guru**** 2587345 points
Other Parts Discussed in Thread: CONTROLSUITE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/655110/ccs-launchxl-f28069m-how-to-merge-pwm---symmetricpwm-with-sci_echoback

部件号:LAUNCHTXL-F2.8069万M
主题中讨论的其他部件:controlSUITE,, LAUNCHXL-F2.8027万

工具/软件:Code Composer Studio

我想把下面的例子合并起来。

C:\ti\controlSUITE\development _kits\F2.8069万 controlSTICK\PWM - SymmetricPWM

C:\ti\controlSUITE\DEVICE_SUPPORT\f2806x\v151\F2806X_Examples_ccsv5\sci_echoback</s>2806

如您所知,这些示例中有许多子文件。

对于对称PWM => F2806x_CodeStartBranch.asm, F2806x_flash_SymmetricPWM.CMD, F2806x_GlobalVariableDefs.c, F2806x_Headers_nonBIOS.cmd, DevInit_F2806x.c

对于sci echoback,这些文件是Extra => F2806x_PIECTRL.c, F2806x_PieVect.c, F2806x_Sci.c, F2806x_sysctrl.c, F2806x_usDelay.asm,  F2806X_DefaultIsr.c, 2.8069万_RAM_lnk.cmd

当我将一个包含这些文件及其包含库的示例添加到另一个示例时,会出现许多错误。 另一个示例是闪存,另一个是RAM。

是否可以合并这些示例? 他们的文件顺序让我感到困惑。 我对LAUNCHTXL-F2.8069万M套件有些陌生。 也许LAUNCXL-F2.8027万对我来说会更容易。

我真正想要的是通过可视工作室接口或至少是超文本传输从我的计算机发送PWM信号的占空比值。 对于从计算机将PWM参数发送到launchxl套件,您建议使用哪种连接?

感谢您的关注。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John,

    您一定可以将这些示例组合在一起! 如果您是嵌入式世界的新用户,甚至是C2000的新用户,我认为 多日研讨会 对您非常有帮助。 它将向您介绍链接器命令文件(*.cmd)以及我们为什么要使用CodeBranchStart.asm。 了解这些内容以及其他一些内容,可以使合并文件变得非常简单。

    研讨会应描述RAM和闪存的示例,以及两者之间的夸点。

    您提到的两款LaunchPad都使用非常相似的编码样式,我认为其中一款不会比另一款更容易。

    因为您使用的是LaunchPad,所以将SCI模块用于终端程序应该会很方便。 您只需通过USB连接到电脑,回声卡示例将说明如何更好地完成此操作。


    此致,
    科迪  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢Cody,多日研讨会让我真正了解了文件类型以及我们为什么需要这些类型。

    实际上,我可以将“C:\ti\controlSUITE\development _kits\F2.8069万 controlSTICK\ADC - ContinuousADC”和“C:\ti\controlSUITE\development _kits\F2.8069万 controlSTICKICK \PWM - SymmetricPWM”完美地组合在一起,因为它们的版本相同(V100),并且它们基于闪存。 我可以使用ADC电压反馈等更改占空比

    但是“C:\ti\controlSUITE\DEVICE_SUPPORT\f2806x\v151\F2806X_Examples_ccsv5\sci_echoback”2806”对我来说是另一个故事。 :)

    我可以使用“C:\ti\controlSUITE\DEVICE_SUPPORT\f2.8066万\V100\F2806X_Examples\sci_echoback”2806”来平衡版本,但该版本无法正常工作。 PC仅发送了字符,但未收到。 另一方面,v151是完美的。

    根据版本, F2806x_common和 F2806x_headers包含库更改,这是另一个错误原因。 V100样本给出了V151包含libs的错误。  

    SCI_echoback的活动模式是调试模式。 我的意思是,调试模式到底是什么? 我的PWM控制程序处于闪存模式,如何激活sci_echoback进行闪存。 也许PWM程序将单独在闪存上工作,在调试上单独工作,但我不知道如何操作。

    当我寻找其他合并样本时,我无法找到f2.8069万的任何样本,但我可以找到F2.8027万的样本。

    我很困惑,很绝望,我想找一个能帮我合并的人。 :D  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    John,

    我不熟悉V100和v150之间的变化,我希望变化很小。

    我看到了几种继续调试的方法。

    1. 调试V100示例不传输的原因,然后合并。
      1. SCI模块非常简单,因此这不应该太困难
    2. 将所需的v150头文件合并到SymmetricPWM示例中。
      1. 这也是可能的,首先将v150文件中的SCI命令合并到SymmetricPWM示例,然后将大量增量构建作为弹出窗口来解决问题。  
    3. 您只需将SCI命令写入SymmetricPWM示例,然后根据需要进行调试。 如果您对UART有一些了解,您应该能够在一两个小时内完成此操作。

    希望它有所帮助,
    科迪  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    John,
    很高兴看到您解决了问题,您是否找到了根本原因? 如果是,请在此处发布,以便在将来帮助其他人!

    此致,
    科迪
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨,Cody,

    首先,感谢您的大力支持。  

    如您所知, PWM - SymmetricPWM的  F2806x_common和 F2806x_headers包含文件为V100。 我已先更新到V151。 然后开始与sci_echoback V151合并。 因为sci_echoback V100工作不正常。

    有一些常见的文件。 F2806x_PieVect.c  给出了有关pievectable的错误,因此我使用了sci_echoback的 F2806x_GlobalVariableDefs.c,关闭了DevInit内部的以下代码,该问题得到了解决。

    /*void PieVectorTableInit(void){
    
    Int16 I;
    pint *Dest =&PieVectorTable.TINT1;
    
    EALLOW;
    对于(i=0;i < 115;i++)
    *DEST++=&ISR_LEGANT;
    EDIS;
    
    //启用PIE矢量表
    PieCtrlRegs.PIECTRL.bit.ENPIE =1;}*/
    

    因为 F2806X_PieVect.C.内部已经有一个 有点不同,但是,嗯... 我稍后会再考虑。

    void InitPieVectorTable(void)
    {
    	Int16	I;
    	UINT32 *Source =(void *)&PieVectorTableInit;
    	UINT32 *Dest =(void *)&PieVectorTable;
    
    	//不要改写前3个32位位置(这些位置
    	是//通过引导变量启动ROM初始化)
    
    	=源+ 3;Dest
    	=
    
    	全部
    	0;ELOW =全部0 i < 125;i++)
    		*Dest++=*Source++;
    	EDIS;
    
    	//启用PIE矢量表
    	PieCtrlRegs.PIECTRL.bit.ENPIE =1;
    
    } 

    目前,这两个示例在同一个文件中单独工作。 因为这些文件的用途相同:对称PWM 的DevInit_F2806x .c

    //===========================================================================================================================================
    //===========================================================================================================================================
    //
    //文件:	SymmetricPWP-DevInit_F2806x.c
    ////
    标题:	F2806x系列的设备初始化
    ////
    版本:1.0	
    ////
    日期:	11月30	日VSC
    //===========================================================================================================================================================================================
    //===========================================================================================================================================
    
    #include "PeripheralHeaderIncludes.h"
    
    //要从RAM运行的函数需要分配给
    //另一个部分。 然后,将使用
    链接程序cmd文件将此部分映射到加载和//运行地址。
    #pragma code_section (InitFlash,"ramfuncs");
    #define Device_cal (void (*)(void)) 0x3D7C80
    
    void DeviceInit(void);
    void PieCntInit(void);
    //void PieVectorTableInit(void);
    void WDogDisable;
    void PLLset(UINT16);
    void isR_illegal (void);//------------------
    
    
    //在此处为目标应用程序配置设备
    //------------------
    void DeviceInit (void)
    {
    WDogDisable();//最初禁用看门狗
    色调; //全局禁用所有中断
    IER = 0x0000;//禁用CPU中断
    IFR = 0x0000;//清除所有CPU中断标志
    
    
    // Device_cal函数,用于复制ADC和振荡器校准值
    //从TI预留OTP自动进入相应的微调寄存器
    //在引导ROM中。 如果在调试过程中绕过引导ROM代码,则
    //必须调用以下函数,ADC和振荡器才能根据函数工作
    //符合规格。
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.ADCENCLK =1;//启用ADC外设时钟
    (*Device_cal)(); //从TI OTP自动校准
    SysCtrlRegs.PCLKCR0.bit.ADCENCLK =0;//将ADC时钟返回到原始状态
    EDIS;
    
    
    //切换至内部振荡器1并关闭所有其他时钟
    //源以最小化功耗
    EALLOW;
    SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0;
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL=0;// Clk src = INTOSC1
    SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1; //关闭XCLKIN
    SysCtrlRegs.CLKCTL.bit.XTALLOSCOFF =1;//关闭XTALOSC
    SysCtrlRegs.CLKCTL.bit.INTOSC2OFF =1;//关闭INTOSC2
    EDIS;
    
    
    //系统时钟速度基于内部振荡器=10 MHz
    // 0x10= 80 MHz (16)
    // 0xF = 75 MHz (15)
    // 0xE = 70 MHz (14)
    // 0xD = 65 MHz (13)
    // 0xC = 60 MHz (12)
    // 0xB = 55 MHz (11)
    // 0xA = 50 MHz (10)
    // 0x9 = 45 MHz (9)
    // 0x8 = 40 MHz (8)
    // 0x7 = 35 MHz (7)
    // 0x6 = 30 MHz (6)
    // 0x5 = 25 MHz (5)
    // 0x4 = 20 MHz (4)
    // 0x3 = 15 MHz (3)
    // 0x2 = 10 MHz (2)
    
    
    // PLLset( 0x10);//从上面的选项中选择
    
    
    //初始化中断控制器和矢量表
    //为当前的默认值。 应用程序ISR映射稍后完成。
    //PieCntlInit();
    //PieVectorTableInit();
    EALLOW;//下面的寄存器是"受保护的",允许访问。
    
    //低速时钟预分频寄存器设置
    SysCtrlRegs.LOSPPCN.ALL = 0x0002; // SYSCLK / 4 (20 MHz)
    SysCtrlRegs.XCLK.Bit.XCLKOUTDIV=2;
    
    
    
    //启用外设时钟
    //----------------
    //如果您不使用外围设备,则可能需要切换
    //关闭时钟以节省电源,即设置为=0
    //
    //注:并非所有外设都可在所有280x派生产品上使用。
    //请参阅特定设备的数据表。
    
    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;// ADC
    //----------------
    SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK = 0;// comp1
    SysCtrlRegs.PCLKCR3.bit.COMP2ENCLK = 0;// Comp2
    SysCtrlRegs.PCLKCR3.bit.COMP3ENCLK = 0;// Comp3
    //----------------
    SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 0;// I2C
    //----------------
    SysCtrlRegs.PCLKCR0.bit.SPIANCLK =0;// SPI-A
    SysCtrlRegs.PCLKCR0.bit.SPIBENCLK = 0;//SPI-B
    //----------------
    SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK =0;//McBBSP-A
    //----------------
    SysCtrlRegs.PCLKCR0.bit.SCIANCLK = 0;// SCI-A
    SysCtrlRegs.PCLKCR0.bit.SCIBENCLK =0;//SCI-B
    //----------------
    SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 0;//eCAP1
    SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 0;// eCAP2
    SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 0;// eCAP3
    //----------------
    SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;// ePWM1
    SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 0;// ePWM2
    SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 0;// ePWM3
    SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 0;// ePWM4
    SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 0;// ePWM5
    SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 0;// ePWM6
    SysCtrlRegs.PCLKCR1.bit.EPWM7ENCLK = 0;// ePWM7
    SysCtrlRegs.PCLKCR1.bit.EPWM8ENCLK = 0;// ePWM8
    //----------------
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;//启用TBCLK
    //----------------
    SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 0;// DMA
    //----------------
    SysCtrlRegs.PCLKCR3.bit.CLA1ENCLK = 0;// CLA
    //----------------
    
    //------------------
    // GPIO (通用I/O)配置
    //------------------
    //---------------
    //关于使用的快速说明:
    //---------------
    //如果GpioCtrlRegs.GP?MUX?bit.GPIO?= 1,2或3 (即 非GPIO功能),然后离开
    //其余行已注释
    //如果GpioCtrlRegs.GP?MUX?bit.gPIO?=0 (即 GPIO功能),然后:
    // 1)取消注释GpioCtrlRegs.GP?DIR.Bit.GPIO? =? 并选择要进入或退出的引脚
    // 2)如果在中,可以在注释行旁边保留
    // 3)如果输出,请取消注释带有..GPACLEAR..的行,以强制引脚低或
    // 取消注释带有..GPASET..的行,以强制引脚高或
    //------------------
    //------------------
    // gPIo-00 - PIN函数=--备用--
    gpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; // 0=GPIO,1=EPWM1A,2=Resv,3=Resv
    gpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO0 = 1; //如果-->初始设置为高,则取消注释
    // gpioCtrlRegs.gpapud.bit.gpio0 = 1; //禁用GPIO0 (EPWM1A)上的上拉
    //------------------
    // gPIo-01 - PIN函数=--备用--
    gpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; // 0=GPIO,1=EPWM1B,2=EMU (0),3=COMP1OUT
    gpioCtrlRegs.GPADIR.bit.GPIO1 = 1; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO1 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO1 = 1; //如果-->初始设置为高,则取消注释
    
    //------------------
    // gPIO-02 - PIN函数=--备用--
    GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; // 0=GPIO,1=EPWM2A,2=Resv,3=Resv
    gpioCtrlRegs.GPADIR.bit.GPIO2 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO2 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO2 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIO-03 - PIN函数=--Spare --
    GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0; // 0=GPIO,1=EPWM2B,2=SPISOMIA,3=COMP2OUT
    gpioCtrlRegs.GPADIR.bit.GPIO3 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO3 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO3 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIO-04 - PIN函数=--Spare --
    GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; // 0=GPIO,1=EPWM3A,2=Resv,3=Resv
    gpioCtrlRegs.GPADIR.bit.GPIO4 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO4 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO4 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIO-05 - PIN函数=--Spare --
    GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; // 0=GPIO,1=EPWM3B,2=SPISIMOA,3=ECAP1
    gpioCtrlRegs.GPADIR.bit.GPIO5 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO5 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO5 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIO-06 - PIN函数=--Spare --
    GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // 0=GPIO,1=EPWM4A,2=EPWMSYNCI,3=EPWMSYNCO
    gpioCtrlRegs.GPADIR.bit.GPIO6 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO6 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO6 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIO-07 - PIN函数=--Spare --
    GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; // 0=GPIO,1=EPWM4B,2=SCIRXDA,3=ECAP2
    gpioCtrlRegs.GPADIR.bit.GPIO7 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO7 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO7 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIo-12 - PIN函数=--备用--
    GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;// 0= GPIO,1=TZ1n,2=SCITXDA,3=SPISIMOB
    gpioCtrlRegs.GPADIR.bit.GPIO12 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO12 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO12 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIo-16 - PIN函数=--备用--
    gpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0;// 0= GPIO,1=SPISIMOA,2=Resv CAN-B,3=TZ2n
    gpioCtrlRegs.GPADIR.bit.GPIO16 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO16 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIo-17 - PIN函数=--备用--
    gpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0;// 0= GPIO,1=SPISOMIA,2=Resv CAN-B,3=TZ3n
    gpioCtrlRegs.GPADIR.bit.GPIO17 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO17 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO17 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIo-18 - PIN函数=--备用--
    GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0;// 0= GPIO,1=SPICLKA,2=SCITXDB,3=XCLKOUT
    gpioCtrlRegs.GPADIR.bit.GPIO18 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO18 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO18 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIo-19 - PIN函数=--备用--
    gpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;// 0= GPIO,1=SPISTEA,2=SCIRXDB,3=ECAP1
    gpioCtrlRegs.GPADIR.bit.GPIO19 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO19 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO19 = 1; //如果-->初始设置为高,则取消注释
    // GpioCtrlRegs.GPAPUD.bit.GPIO19 = 1;
    
    //------------------
    // gPIo-32 - PIN函数=--备用--
    gpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;// 0= GPIO,1=I2C-SDA,2=SYNCI,3=ADCSOCA
    GpioCtrlRegs.GPBDIR.bit.GPIO32 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPBCLEAR.bit.GPIO32 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPBSET.bit.GPIO32 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIo-33 - PIN函数=--备用--
    gpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0;// 0= GPIO,1=I2C-SCL,2=SYNCO,3=ADCSOCB
    GpioCtrlRegs.GPBDIR.bit.GPIO33 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPBSET.bit.GPIO33 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    // gPIo-34 - PIN功能= F2806x USB加密狗的LED
    gpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;// 0= GPIO,1=COMP2OUT,2=EMU1,3=Resv
    gpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // 1=输出,0=输入
    // GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;//如果-->初始设置为低则取消注释
    GpioDataRegs.GPBSET.bit.GPIO34 = 1; //如果-->初始设置为高,则取消注释
    //------------------
    EDIS;//禁用注册访问
    权限}//===================================================================
    
    
    
    
    //注意:
    //在大多数应用程序中,此点之后的功能可以保持不变
    //用户不需要真正了解以下代码即可成功运行此
    //应用程序。
    //===========================================================================================================================================
    
    void WDogDisable (void)
    {
    EALLOW;
    SysCtrlRegs.WDCR= 0x0068;
    EDIS;
    }//
    
    此函数初始化PLLCR寄存器。
    //void InitPll (UINT16 val,UINT16 clkindiv)
    void PLLset (UINT16 val)
    {
    volatile UINT16 iVol;
    
    //
    如果(CtrlSysRegs.PLLSTS.bit.MCLKSTS !=0)
    {
    	EALLOW;
    //检测到OSCCLKSRC1故障。 PLL在跛行模式下运行。
    //重新启用缺少的时钟逻辑。
    SysCtrlRegs.PLLSTS.bit.MCLKCLR = 1;
    EDIS;
    //将此线路替换为呼叫适当的
    // SystemShutdown();函数。
    ASM (" ESTOP0"); //为调试目的取消注释
    }
    
    // DIVSEL必须为0,PLLCR才能从
    // 0x0000更改。 通过外部重置XRSn
    //将其设置为0,这将使我们在1/4
    IF (SysCtrlRegs.PLLSTS.bit.DIVSEL !=0)
    中
    EALLOW;
    SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;
    EDIS;
    }//
    
    更改PLLCR
    IF (SysCtrlRegs.PLLCR.bit.DIV != val){
    
    
    EALLOW;
    //在设置PLLCR之前,请关闭缺少时钟检测逻辑
    SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
    SysCtrlRegs.PLLCR.bit.DIV = val;
    EDIS;
    
    //可选:等待PLL锁定。
    //在此期间,CPU将切换到OSCCLK/2,直到
    // PLL稳定。 PLL稳定后,CPU将保持稳定
    //切换到新的PLL值。
    //
    //此锁定时间由PLL锁定计数器监控。
    //
    //等待PLL锁定时不需要密码。
    //但是,如果代码执行任何对时间至关重要的操作,
    //并要求锁定正确的时钟,则最好是
    //等待此切换完成。
    
    //等待PLL锁定位设置。
    //在该循环之前,看门狗应该被禁用,或者在内部馈入
    //通过ServiceDog的循环()。
    
    	//取消注释以禁用监视程序
    WDogDisable();
    
    	Whiles(SysCtrlRegs.PLLSTS.bit.PLLLOCKS !=1){}
    
    EALLOW;
    SysCtrlRegs.PLLSTS.bit.MCLKOFF =0;
    	EDIS;
    	}//
    
    	将SYSCLK除以2以提高稳定性
    	EALLOW;
    SysCtrlRegs.PLLSTS.bit.DIVSEL = 2;
    EDIS;
    }//
    
    
    此函数将PIE控制寄存器初始化为已知状态。
    //
    void PieCntlInit(void){
    
    //在CPU级别禁用中断:
    色调;
    
    //禁用饼图
    PieCtrlRegs.PIECTRL.bit.ENPIE = 0;
    
    	//清除所有PIEIER寄存器:
    	PieCtrlRegs.PIEER1.ALL = 0;
    	PieCtrlRegs.PIEER2.ALL = 0;
    	PieCtrlRegs.PIEER3.ALL = 0;PieReglRegs.PIEIEr3.ALL
    	= 0;PIECtrl0 =
    	所有= PIECtrl= PIECtrl=
    	PieCtrlRegs.PIEIER6.ALL = 0;
    	PieCtrlRegs.PIEIER7.ALL = 0;
    	PieCtrlRegs.PIEIER8.ALL = 0;
    	PieCtrlRegs.PIEIER9.ALL = 0;PieCtrlRegs.PIEIER9.ALL
    	= 0;PIECtrlRegs.PIEIER10.ALL = 0;
    	PieCtrlRegs.PIEIER11.ALL = 0;
    	PieCtrlRegs.PIEIER12.ALL = 0;
    
    	//清除所有PIEIFR寄存器:
    	PieCtrlRegs.PIEIFR1.ALL = 0;
    	PieCtrlRegs.PIEIFR2.ALL = 0; PieCtrlRegs.PIEIFR1.PIE=
    	0;
    	所有Ctrl= PIEREC.
    	
    	PieCtrlRegs.PIEIFR6.ALL = 0;
    	PieCtrlRegs.PIEIFR7.ALL = 0;
    	PieCtrlRegs.PIEIFR8.ALL = 0;
    	PieCtrlRegs.PIEIFR9.ALL = 0;
    	PieCtrlRegs.PIEIFR10.ALL = 0;
    	PieCtrlRegs.PIEIFR11.ALL = 0;
    	PieCtrlRegs.PIEIFR12.ALL =0;
    }/*void	
    
    
    PieVectorTableInit(void)
    {
    	Int16 I;
    	pint *Dest =&PieVectorTable.TINT1;
    
    	EALLOW;
    	for (I=0; I < 115; I++)
    *Dest++=&ISR_LEGAL_RELICI;
    	EDIS;
    
    	//启用PIE矢量表
    	PieCtrlRegs.PIECTRL.bit.ENPIE =1;	
    }*/
    
    中断void ISR_Illegal (void)//非法操作陷阱
    {//
    此处插入ISR代码
    
    //接下来的两行调试仅在此处停止处理器
    //插入ISR代码
    ASM后删除(ASM)" ESTOP0");
    FOR (;;);}//
    
    
    
    此函数初始化闪存控制寄存器
    
    // 注意
    //此功能必须在RAM之外执行。 执行它
    //不执行OTP/闪存将产生不可预测的结果
    
    void InitFlash(void){
    
    EALLOW;//
    启用闪存管道模式以提高
    //从闪存执行的代码的性能。
    FlashRegs.FOPT.bit.ENPIPE = 1;
    
    // 注意
    //在
    给定的CPU速率下,闪存操作//所需的最小等待时间必须由TI确定。
    //有关最新信息,请参阅数据表。
    
    //设置Flash
    FlashRegs.FBANKWAIT.Bit.PAGEWAIT =3;
    
    //设置Flash FlashRegs.FBANKWAIT.Bit.RANDOM Waitstate for the Flash FlashRegs.FBANKWAIT.BIT.RANDOM WAIT
    =3;
    
    //设置OTP
    FlashRegs.FOTPIT.BIT.OTPIT =5;
    
    //的等待状态 注意
    ://仅应使用这2个寄存器的默认值
    FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF;
    FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF;
    EDIS;
    
    //强制管道刷新,以确保在
    返回
    
    前写入//最后配置的寄存器。(ASM)#7; APRPT"|NOP
    
    
    
    //此功能将指定的内存内容从
    //一个位置复制到另一个位置。
    ////
    	UINT16 *SourceAddr 指向要移动的第一个单词
    //的指针 SourceAddr < SourceEndAddr
    //	UINT16* SourceEndAddr. 指向要移动的最后一个单词
    //	UINT16* DestAddr的指针 指向第一个目标单词
    ////
    不检查无效的内存位置,或者
    //结束地址>然后是第一个开始地址。
    
    void Memcopy(UINT16 *SourceAddr, UINT16* SourceEndAddr, UINT16* DestAddr)
    {
    while (SourceAddr < SourceEndAddr)
    {
    *DestAddr++=*SourceAddr+;}
    
    返回;}//============================================================================================
    
    	
    
    //文件结束。
    //===========================================================================================================================================
    
    
    

    和sci_echoback的  F2806x_sysctrl

    //###################################################################
    //
    //文件:F2806x_sysctrl.c
    ////
    标题:F2806x设备系统控制初始化和支持功能。
    ////
    描述:
    ////
    系统资源初始化示例。
    //
    //###########################################################################
    //$TI发布:F2806x C/C++头文件和外设示例V151 $//
    $发布日期:2016年2月2日$//
    $/$版权所有:版权所有(C) 2011-2016 Texas2016 Texas Instruments Incorporated -
    //             http://www.ti.com/ 保留所有权利$//#########################################################################################
    
    
    #include "F2806x_Device.h" // Headerfile include文件
    #include "F2806X_examples.h"//示例包括文件
    
    //要从RAM运行的函数需要分配给
    //另一个部分。 然后,将使用
    链接程序cmd文件将此部分映射到加载和//运行地址。
    ////
    *重要*
    //如果从闪存运行,请在
    调用InitSysCtrl()之前将“ramfuns”部分从闪存//复制到RAM。 这可防止MCU在
    调用Delay_US()时抛出//异常。
    //
    #pragma code_section (InitFlash,"ramfuncs");//------------------
    
    
    // InitSysCtrl://------------------
    
    //此函数将系统控制寄存器初始化为已知状态。
    //-禁用看门狗
    //-为正确的SYSCLKOUT频率设置PLLCR
    //-为高频和低频外设时钟设置预标量器
    //-为外设启用时钟
    
    void InitSysCtrl(void){//
    
    
    禁用看门狗
    DisableDog;
    
    //*重要*
    // Device_cal函数
    ,用于将ADC和振荡器校准值//从TI保留的OTP复制到相应的TRIM寄存器中,该函数在
    引导ROM中自动//发生。 如果在调试过程中绕过引导ROM代码,
    则必须调用//以下功能,以便ADC和振荡器根据
    //规范工作。 在调用此
    //函数之前,必须启用ADC的时钟。
    //有关
    详细信息,请参阅器件数据手册和/或ADC参考//手册。
    
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.ADCENCLK =1;//启用ADC外设时钟
    (*Device_cal)();
    SyslRegs.PCLKCR0.bit.ADCENCLK =0;//将ADC时钟返回到原始状态
    EDIS;
    
    //选择内部振荡器1作为时钟源(默认),并关闭所有未使用
    的时钟/时钟。
    IntOscar 1Sel();//
    
    初始化PLL控件:PLLCR和CLKINDIV
    // DSP28_PLLCR和DSP28_CLKINDIV在F2806x_Examples.h
    InitPll (DSP28_PLLCR,DSP28_DIVSEL)中定义;
    
    //初始化外设时钟
    InitPeripheralClocks();
    }//------------------
    
    
    
    //示例:ServiceDog:
    //------------------
    //此功能重置看门狗计时器。
    //在应用程序
    
    void ServiceDog (void){
    
    EALLOW;
    SysCtrlRegs.WDKEY = 0x0055;
    SysCtrlRegs.WDKEY = 0x00AA;
    EDIS;
    }//------------------
    
    
    //示例:DisableDog:
    //------------------
    //此功能禁用监视程序计时器。
    
    void DisableDog (void)
    {
    EALLOW;
    SysCtrlRegs.WDCR= 0x0068;
    EDIS;
    }//------------------
    
    
    //示例:InitPll:
    //------------------
    //此函数初始化PLLCR寄存器。
    
    void InitPll (UINT16 val,UINT16 divsel)
    {
    volatile UINT16 iVol;
    
    //如果
    (SysCtrlRegs.PLLSTS.bit.MCLKSTS !=0)
    ,请确保PLL未在跛形模式下运行{
    EALLOW;
    //检测到OSCCLKSRC1故障。 PLL在跛行模式下运行。
    //重新启用缺少的时钟逻辑。
    SysCtrlRegs.PLLSTS.bit.MCLKCLR = 1;
    EDIS;
    //将此线路替换为呼叫适当的
    // SystemShutdown();函数。
    _ASM (" ESTOP0"); //为调试目的取消注释
    }
    
    // DIVSEL必须为0,PLLCR才能从
    // 0x0000更改。 通过外部重置XRSn
    //将其设置为0,这将使我们在1/4
    IF (SysCtrlRegs.PLLSTS.bit.DIVSEL !=0)
    中
    EALLOW;
    SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;
    EDIS;
    }//
    
    更改PLLCR
    IF (SysCtrlRegs.PLLCR.bit.DIV != val){
    
    
    EALLOW;
    //在设置PLLCR之前,请关闭缺少时钟检测逻辑
    SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
    SysCtrlRegs.PLLCR.bit.DIV = val;
    EDIS;
    
    //可选:等待PLL锁定。
    //在此期间,CPU将切换到OSCCLK/2,直到
    // PLL稳定。 PLL稳定后,CPU将保持稳定
    //切换到新的PLL值。
    //
    //此锁定时间由PLL锁定计数器监控。
    //
    //等待PLL锁定时不需要密码。
    //但是,如果代码执行任何对时间至关重要的操作,
    //并要求锁定正确的时钟,则最好是
    //等待此切换完成。
    
    //等待PLL锁定位设置。
    
    //在该循环之前,看门狗应该被禁用,或者在内部馈入
    //通过ServiceDog的循环()。
    
    //取消注释以禁用监视程序
    DisableDog ();
    
    while (SysCtrlRegs.PLLSTS.bit.PLLLOCKS !=1)
    {
    //取消注释以服务监视程序
    // ServiceDog ();
    }
    
    EALLOW;
    SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0;
    EDIS;
    }
    
    //如果切换为1/2
    IF ((divsel == 1)||(divsel == 2))
    {
    EALLOW;
    SysCtrlRegs.PLLSTS.bit.DIVSEL = DIVsel;
    EDIS;
    }
    
    //如果切换到1/1
    //*首先转到1/2,让动力稳定下来
    //所需时间取决于系统,这只是一个示例
    //*然后切换到1/1
    IF (divsel == 3)
    {
    EALLOW;
    SysCtrlRegs.PLLSTS.bit.DIVSEL = 2;
    DELAY _US (50L);
    SysCtrlRegs.PLLSTS.bit.DIVSEL =3;
    EDIS;
    }
    }//------------------
    
    
    //示例:InitPll2://------------------
    
    //此函数初始化PLL2寄存器。
    
    void InitPll2 (UINT16 clksrc,UINT16 pllmult,UINT16 clkdiv)
    {
    EALLOW;
    
    //检查SYSCLK2DIV2DIS是否处于/2模式
    IF (DevEmuRegs.DEVICECNF.bit.SYSCLK2DIV2DIS!= 0)
    {
    	DevEmuRegs.DEVICECNF.bit.SYSCLK2DIV2DIS = 0;
    }
    
    //启用PLL2
    SysCtrlRegs.PLL2CTL.bit.PLL2EN =1;
    //为PLL2选择时钟源
    SysCtrlRegs.PLL2CTL.bit.PLL2CLKSRCSEL = clksrc;
    //设置PLL2乘法器
    SysCtrlRegs.PLL2MULT.bit.PLL2MULT = pllmult;
    
    //等待PLL锁定。
    //取消注释以禁用看门狗
    	DisableDog ();
    while (SysCtrlRegs.PLL2STS.bit.PLL2LOCKS!= 1)
    {
    	//取消注释以服务监视程序
    // ServiceDog ();
    }
    
    //设置系统时钟2分频器
    DevEmuRegs.DEVICECNF.bit.SYSCLK2DIV2DIS = clkdiv;
    EDIS;
    }//------------------
    
    
    //示例:InitPeripheralClocks:
    //------------------
    //此函数将时钟初始化为外围模块。
    //首先设置高时钟和低时钟预分频
    器//秒为每个外设启用时钟。
    //要降低功耗,请禁用未使用的外围设备的时钟
    ////
    注:如果外围设备时钟未启用,则不能
    //读写该外围设备
    
    的寄存器void InitPeripheralClocks(void){
    
    EALLOW;
    
    // LOSPCP预分段寄存器设置,通常将其设置为默认值
    
    // gpioCtrlRegs.GPAMUX2.bit.GPIO18 =3;// GPIO18 = XCLKOSysCtrlRegs.LOSPPCN.ALL
    = 0x0002;
    
    // XCLKOUT与SYSCLKOUT的比率。 默认情况下,XCLKOUT =1/4 SYSCLKOUT
    SysCtrlRegs.XCLK.bit.XCLKOUTDIV=2;//
    
    为所选外围设备设置了外设时钟。
    //如果您不使用外围设备,请关闭时钟
    //以节省电源。
    ////
    注:并非所有外围设备都可在所有F2806x派生产品上使用。
    //请参阅特定设备的数据表。
    ////
    此函数不是作为有效代码示例编写的。
    
    CtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;// ePWM1
    SysSysRegs.PCLKCR1.bit.EPWM2ENCLK = 1;// ePWM2
    PWlRegs.PCLKCR1.bit.EPM1; PCPWSYSysSysSysSys= 1;// ePWM1=
    
    
    
    PLER1= P1; P1= P1; PMPR1= P1MP1.PMP1
    = P1; PMPRMP1 = PMP1 = P1MP1 = P1; PMP1 = PMP1 = P1MP1 = P1P1P1P1P1P1P1P1= P1P1P1P1P1= P1P1P1; P1P1P1P1= P1P1P1P1= P1P1= P1P1= P1P1; P1P1P1P1P1P1P1= P1= P1P1= P1P1P1= P1P1= P1P1P1P1P1P1; P1P
    
    
    //在ePWM
    
    SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK =1;// eQEP1
    CtrlRegs.PCLKCR1.bit.EQEP2ENCLCLK =1;// eQEP2 SysSysSysSysSysCAP1PC1.bit.PCCL1;CtrlEC1.CLEC1.bit.KPREC1.EC1
    
    =
    
    
    
    	
    	
    	
    1;CtrlEC1 = 1EC1;CtrlRECL1 = 1;CtrlEC1 = 1 = 1;CtrlEC1 = 1;CtrlEC1 = 1;CtrlRECAP1 = 1 = 1;CtrlEC1 = 1 = 1;EC1 = 1 = 1 = 1;CtrlRECAP1 = 1;2 = 1 = 1 = 1 = 1;2;2 = 1 = 1 = 1;2 = 1 = 1 = 1 = 1 = 1 = 1 = 1;1;2 = 1 = 1 = 1 = 1 = 1 = 1 = 1;1 = 1 = 1 = 1 = 1 = 1;1 = 1 = 1 = 1 = 1 = 1 = 1;1;1 = 1 = 1 = 1 = 1 = 1 = 1 = 1 = 1 = 1;1 // HRCAP4
    
    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // ADC
    SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK = 1;// comp1
    SysCtrlRegs.PCLKCR3.bit.COMP2ENCLK = 1;// comp2
    SysCtrlRegs.PCLKCR3.bit.COMP3ENCLK = 1;// comp3
    
    SysCtrlRegs.PCLKCR3.bit.CPUTIME0ENCLK = 1;// CPU Timer 0
    SysTimerlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1;// CPU Timer
    = 2DR1.CMPR1= 1;CtrlREC1
    
    ;CtrlREG1; CtrlREC1 = 1;CtrlREG1; CtrlREC1;CtrlRECTR1;CtrlRETR1;CtrlEC1;CtrlREPARC1; Ctrl= CMP1 = DP= 1;CtrlRETR1;CtrlRETR1;CtrlRETRCMP1;CtrlRETR1 = CMP1 = // DMA
    
    SysCtrlRegs.PCLKCR3.bit.CLA1ENCLK = 1; // CLA1
    
    SysCtrlRegs.PCLKCR3.bit.USB0ENCLK = 1;	// USB0
    
    SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1; // I2C-A
    SysCtrlRegs.PCLKCR0.bit.SPIANCLK = 1; // SPI-A
    SysCtrlRegs.PCLKCR0.bit.SPIBENCLK = 1; // SPI-B
    SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-A
    SysCtrlRegs.PCLKCR0.bit.SCIBENCLK =1; // SCI-B
    SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK =1;// McBSPA-A
    SysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1; // eCAN-A
    
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; //在ePWM内启用TBCLK
    
    //------------------
    // gPIo-19 - PIN函数=--备用--
    gpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;// 0= GPIO,1=SPISTEA,2=SCIRXDB,3=ECAP1
    gpioCtrlRegs.GPADIR.bit.GPIO19 = 0; // 1=输出,0=输入
    // GpioDataRegs.GPACLEAR.bit.GPIO19 = 1;//如果-->初始设置为低则取消注释
    // GpioDataRegs.GPASET.bit.GPIO19 = 1; //如果-->初始设置为高,则取消注释
    // gpioCtrlRegs.GPAPUD.bit.GPIO19 = 1;
    
    
    EDIS;
    }//------------------
    
    
    //示例:CsmUnlock://------------------
    
    //此功能解锁CSM。 用户必须使用
    当前//密码替换DSP的0xFFFF。 如果解锁成功,则返回1。
    
    #define status_fail 0
    #define status_success 1
    
    UINT16 CsmUnlock()
    {
    易失性UINT16温度;
    
    //使用当前密码加载密钥寄存器。 0xFFFF是虚拟的
    //密码。 用户应使用正确的DSP密码替换它们。
    
    EALLOW;
    CsmRegs.KEY0 = 0xFFFF;
    CsmRegs.key1 = 0xFFFF;
    CsmRegs.key2 = 0xFFFF;
    CsmRegs.key3 = 0xFFFF;
    CsmRegs.KEY4 = 0xFFFF;
    CsmRegs.KEY5 = 0xFFFF;
    CsmRegs.KEY6 = 0xFFFF;
    CsmRegs.KEY7 = 0xFFFF;
    EDIS;
    
    //执行密码位置的虚拟读取
    //如果它们与密钥值匹配,CSM将解锁
    
    TEMP = CsmPwl.PSWD0;
    TEMP = CsmPwl.PSWD1;
    TEMP = CsmPwl.PSWD2;
    TEMP = CsmPwl.PSWD3;
    TEMP = CsmPwl.PSWD4;
    TEMP = CsmPwl.PSWD5;
    TEMP = CsmPwl.PSWD6;
    TEMP = CsmPwl.PSWD7;
    
    //如果CSM已解锁,则返回成功,否则返回
    //失败。
    如果(CsmRegs.CSMSCR.bit.secure ==0)返回STATUS_SUCCESS;
    否则返回status_fail;
    
    }//------------------
    
    
    示例:IntOscar 1Sel:
    //------------------
    //此功能切换至内部振荡器1并关闭所有其他时钟
    //源,以将功耗降至最低
    
    void IntoSC1Sel (void){
    EALLOW;
    SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0;
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL=0;// Clk src = INTOSC1
    SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1; //关闭XCLKIN
    SysCtrlRegs.CLKCTL.bit.XTALLOSCOFF =1;//关闭XTALOSC
    SysCtrlRegs.CLKCTL.bit.INTOSC2OFF =1;//关闭INTOSC2
    EDIS;
    }//------------------
    
    
    示例:IntOscar 2Sel:
    //------------------
    //此功能从外部振荡器
    //切换到内部振荡器2,并关闭所有其他时钟源以最小化功耗
    //注:如果没有外部时钟连接,则从
    //切换 INTOSC1至INTOSC2,EXTOSC和XLCKIN必须在//之前关闭
    切换到内部振荡器1
    
    void IntOscar 2Sel (void){
    EALLOW;
    SysCtrlRegs.CLKCTL.bit.INTOSC2OFF = 0; //打开INTOSC2
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 1;//切换到INTOSC2
    SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1; //关闭XCLKIN
    SysCtrlRegs.CLKCTL.bit.XTALLOSCOFF = 1; //关闭XTALSC
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1;//切换到内部振荡器2
    SysCtrlRegs.CLKCTL.bit.WDCLKSRCSEL =0;//始终关闭INTOSC1的时钟监视程序
    SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0; //保持INTOSC1打开
    EDIS;
    }//------------------
    
    
    示例:XtalOscSel:
    //------------------
    //此功能切换至外部晶体振荡器并关闭所有其他时钟
    //源,以最大程度地降低功耗。 此选项可能不适用于所有
    //设备包
    
    void XtalOscar Sel (void){
    EALLOW;
    SysCtrlRegs.CLKCTL.bit.XTALLOSCOFF = 0; //打开XTALOSC
    DELAY _US (1000); //在XTAL启动时等待1毫秒
    SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1; //关闭XCLKIN
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0;//切换到外部时钟
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1;//从INTOSC1切换到INTOSC2/ext clk
    SysCtrlRegs.CLKCTL.bit.WDCLKSRCSEL =0;//始终关闭INTOSC1的时钟监视程序
    SysCtrlRegs.CLKCTL.bit.INTOSC2OFF = 1; //关闭INTOSC2
    SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0; //保持INTOSC1打开
    EDIS;
    }//------------------
    
    
    
    示例:ExtOscar Sel:
    //------------------
    //此功能切换到外部振荡器并关闭所有其他时钟
    //源,以最大程度地降低功耗。
    
    void ExtOscar Sel (void){
    EALLOW;
    SysCtrlRegs.XCLK.bit.XCLKINSEL = 1; // 1-GPIO19 = XCLKIN,0-GPIO38 = XCLKIN
    SysCtrlRegs.CLKCTL.bit.XTALLOSCOFF = 1;//打开XTALOSC
    SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 0; //打开XCLKIN
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0;//切换到外部时钟
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1;//从INTOSC1切换到INTOSC2/ext clk
    SysCtrlRegs.CLKCTL.bit.WDCLKSRCSEL =0;//始终关闭INTOSC1的时钟监视程序
    SysCtrlRegs.CLKCTL.bit.INTOSC2OFF = 1;//关闭INTOSC2
    SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0; //保持INTOSC1打开
    EDIS;
    }//===========================================================================
    
    
    
    
    //文件结束。
    //===========================================================================================================================================
    

    如果我从 main中停用(//) DeviceInit();,sci_echoback可以正常工作。 当我取消激活 InitSysCtrl()时,对称PWM为反向;

    在这两个文件中,下面都有这些代码。  

    PLLset( 0x10);//从以上选项中选择
    
    
    //初始化中断控制器和矢量表
    //为当前的默认值。 应用程序ISR映射稍后完成。
    PieCntlInit();
    PieVectorTableInit();
    EALLOW;//下面的寄存器是"受保护的",允许访问。
    
    //低速时钟预分频寄存器设置
    SysCtrlRegs.LOSPPCN.ALL = 0x0002; // SYSCLK / 4 (20 MHz)
    SysCtrlRegs.XCLK.Bit.XCLKOUTDIV=2;
    

    由于这些部件,PWM和通信不会同时工作。 今天,我将合并这两个文件,并了解这两个功能是否同时工作,或者我是否需要创建通信和文字模式。

    当然,我的解释可能有点软弱,因为我还是一个新手。 我对什么是子例程的内容没有太多的了解。 我是边干边学。 但这些都是发生的。 :)