代码解释:if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0) { asm(" ESTOP0"); } if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0) { EALLOW; SysCtrlRegs.PLLSTS.bit.DIVSEL = 0; EDIS; }EALLOW; SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1; SysCtrlRegs.PLLCR.bit.DIV = 0x0A; EDIS; while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1) { } EALLOW; SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0; SysCtrlRegs.PLLSTS.bit.DIVSEL = 0X02; EDIS; 点击复制后,将打开C知道体验页
时间: 2023-06-04 09:07:52 浏览: 264
这段代码是用于配置Texas Instrument(德州仪器)C2000系列控制器的时钟系统的。它首先检查MCLKSTS是否等于0,如果不是,则跳转到ESTOP0,这是一种紧急停机机制。然后它检查DIVSEL是否等于0,如果不是,它将DIVSEL设置为0。接着它将MCLKOFF置为1,将PLL的分频器设置为0x0A,然后等待PLLLOCKS变为1。最后,将MCLKOFF置为0,将DIVSEL设置为0x02。
相关问题
if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0) { asm(" ESTOP0"); }
根据您提供的代码片段,如果 `SysCtrlRegs.PLLSTS.bit.MCLKSTS` 不等于 0,那么会执行汇编指令 `ESTOP0`。
`ESTOP0` 是一个特定于 Texas Instruments (TI) C2000 微控制器系列的汇编指令。它是一个用于产生软件中断的指令,会导致程序停止执行。当条件满足时,执行 `ESTOP0` 可以中止程序的执行并触发一个中断,用于处理错误或异常情况。
需要注意的是,`ESTOP0` 指令的具体功能和行为可能因微控制器型号、编译器以及程序上下文而有所不同。请确保在正确的环境中使用并了解 `ESTOP0` 指令的用途和影响。
帮我解释一下代码void InitPeripheralClocks(void) { EALLOW; SysCtrlRegs.HISPCP.all = 0x0001;SysCtrlRegs.LOSPCP.all = 0x0002; SysCtrlRegs.PCLKCR.bit.EVAENCLK=1; SysCtrlRegs.PCLKCR.bit.EVBENCLK=1; SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1; SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1; SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=1; SysCtrlRegs.PCLKCR.bit.SPIENCLK=1; SysCtrlRegs.PCLKCR.bit.ECANENCLK=1; SysCtrlRegs.PCLKCR.bit.ADCENCLK=1; EDIS; }
这段代码主要是用来初始化外设时钟的。
首先,通过EALLOW允许写入专用寄存器,然后将高速外设时钟分频器HISPCP设置为0x0001,将低速外设时钟分频器LOSPCP设置为0x0002。
接下来,通过PCLKCR位控制各个外设模块的时钟使能,将模拟输入/输出模块EVA、EVB、ADC的时钟使能打开,串行通信模块SCI-A、SCI-B的时钟使能打开,多通道音频串行总线模块MCBSP的时钟使能打开,串行外设接口SPI的时钟使能打开,控制器局域网模块ECAN的时钟使能打开。
最后,通过EDIS禁止写入专用寄存器,确保安全。
阅读全文