void pwm_clock_init() { do { CS->CLRIFG |= CS_CLRIFG_CLR_DCOR_OPNIFG | CS_CLRIFG_CLR_HFXTIFG | CS_CLRIFG_CLR_LFXTIFG; SYSCTL->NMI_CTLSTAT &= ~ SYSCTL_NMI_CTLSTAT_CS_SRC; }while (SYSCTL->NMI_CTLSTAT & SYSCTL_NMI_CTLSTAT_CS_FLG); CS->KEY = 0; }请告诉我这段MSP432代码的作用
时间: 2023-08-18 12:09:32 浏览: 39
这段代码的作用是初始化 PWM(脉冲宽度调制)时钟。它通过清除 CS(时钟系统)模块的中断标志位和 NMI(非屏蔽中断)控制状态位来确保时钟系统的稳定性。在循环中,只要 CS 模块的 NMI 控制状态位上的 CS_FLG 标志位被置位,就会一直执行清除操作,直到该标志位被清除为止。最后,将 CS 寄存器的 KEY 字段设置为 0,以锁定对时钟系统的访问。
相关问题
void pwm_clock_init() { do { CS->CLRIFG |= CS_CLRIFG_CLR_DCOR_OPNIFG | CS_CLRIFG_CLR_HFXTIFG | CS_CLRIFG_CLR_LFXTIFG; SYSCTL->NMI_CTLSTAT &= ~ SYSCTL_NMI_CTLSTAT_CS_SRC; }while (SYSCTL->NMI_CTLSTAT & SYSCTL_NMI_CTLSTAT_CS_FLG); CS->KEY = 0; } 请告诉我这段代码的作用
这段代码是用于初始化 PWM 时钟的函数。PWM(脉冲宽度调制)是一种用于产生模拟信号的技术,通常用于控制电机、调光等应用中。
具体来说,这段代码的功能如下:
1. 使用 do-while 循环来清除时钟系统(CS)模块的中断标志位和 NMI(非屏蔽中断)控制状态寄存器中与时钟系统相关的标志位。
2. 将 SYSCTL 模块的 NMI_CTLSTAT 寄存器的 CS_SRC 位清零,即禁用时钟系统的 NMI 中断源。
3. 在循环中检查 NMI_CTLSTAT 寄存器的 CS_FLG 位,如果该位为1,则继续循环,直到该位为0。这是为了确保时钟系统已经完成初始化并稳定。
4. 将 CS 模块的 KEY 寄存器设置为0,以锁定对 CS 模块其他寄存器的写入操作。
总之,这段代码的作用是初始化 PWM 时钟,并确保时钟系统已经初始化完毕并稳定。这样,在使用 PWM 功能之前,可以保证时钟系统的正常工作。
//液晶控制口置1操作语句宏定义 #define LCD_SCL_SET() LCD_CTRLB->BSRR|=LCD_SCL #define LCD_SDI_SET() LCD_CTRLB->BSRR|=LCD_SDI #define LCD_CS_SET() LCD_CTRLB->BSRR|=LCD_CS #define LCD_LED_SET() LCD_CTRLB->BSRR|=LCD_LED #define LCD_RS_SET() LCD_CTRLB->BSRR|=LCD_RS #define LCD_RST_SET() LCD_CTRLB->BSRR|=LCD_RST //液晶控制口置0操作语句宏定义 #define LCD_SCL_CLR() LCD_CTRLB->BSRR|=((uint32_t)LCD_SCL<<16) #define LCD_SDI_CLR() LCD_CTRLB->BSRR|=((uint32_t)LCD_SDI<<16) #define LCD_CS_CLR() LCD_CTRLB->BSRR|=((uint32_t)LCD_CS<<16) #define LCD_LED_CLR() LCD_CTRLB->BSRR|=((uint32_t)LCD_LED<<16) #define LCD_RST_CLR() LCD_CTRLB->BSRR|=((uint32_t)LCD_RST<<16) #define LCD_RS_CLR() LCD_CTRLB->BSRR|=((uint32_t)LCD_RS<<16) 逐行注释
这是一段液晶显示屏控制口的操作语句宏定义。下面是逐行注释:
//液晶控制口置1操作语句宏定义
#define LCD_SCL_SET() LCD_CTRLB->BSRR |= LCD_SCL //将SCL液晶控制口置1
#define LCD_SDI_SET() LCD_CTRLB->BSRR |= LCD_SDI //将SDI液晶控制口置1
#define LCD_CS_SET() LCD_CTRLB->BSRR |= LCD_CS //将CS液晶控制口置1
#define LCD_LED_SET() LCD_CTRLB->BSRR |= LCD_LED //将LED液晶控制口置1
#define LCD_RS_SET() LCD_CTRLB->BSRR |= LCD_RS //将RS液晶控制口置1
#define LCD_RST_SET() LCD_CTRLB->BSRR |= LCD_RST //将RST液晶控制口置1
//液晶控制口置0操作语句宏定义
#define LCD_SCL_CLR() LCD_CTRLB->BSRR |= ((uint32_t)LCD_SCL << 16) //将SCL液晶控制口置0
#define LCD_SDI_CLR() LCD_CTRLB->BSRR |= ((uint32_t)LCD_SDI << 16) //将SDI液晶控制口置0
#define LCD_CS_CLR() LCD_CTRLB->BSRR |= ((uint32_t)LCD_CS << 16) //将CS液晶控制口置0
#define LCD_LED_CLR() LCD_CTRLB->BSRR |= ((uint32_t)LCD_LED << 16) //将LED液晶控制口置0
#define LCD_RST_CLR() LCD_CTRLB->BSRR |= ((uint32_t)LCD_RST << 16) //将RST液晶控制口置0
#define LCD_RS_CLR() LCD_CTRLB->BSRR |= ((uint32_t)LCD_RS << 16) //将RS液晶控制口置0
这些宏定义通过对控制口的操作,可以实现对液晶显示屏的控制。例如,将SCL液晶控制口置1可以启动时序信号,将SDI液晶控制口置0可以向液晶屏发送数据。具体的液晶显示屏控制方法需要根据硬件电路和液晶屏的规格进行设置。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)