1.概述
- 对于玩过单片机的人来说,寄存器多多少少都是有接触过的,只是有的开发板有现成的函数库可以用,所以很多人对寄存器的了解还是比较少的。其实,库函数最终还是对寄存器进行操作。 我要说的重点来了——>对于一个特定功能模块的实现,我们开发的过程大致如下:
了解这个功能模块的相关知识并根据要求将模块化大为小;
在开发过程中,我想 很重要的一份资料就是芯片手册;
在所有功能完善之后,就需要整体连接进行测试,寻找bug,改bug;
再接下里就是进行代码优化
2.寄存器操作
- 对于寄存器的某些位清零,我们要用到 &
LCDIF->CTRL &= ~(7<<13); //对LCDIF 的 CTRL寄存器的 bit15~13 进行清零
- 对于寄存器的某些位置1,我们要用到 |
LCDIF->CTRL |= (5<<13); //对LCDIF 的 CTRL寄存器的 bit15~13 设置为 101
这些都是基本的操作,对一个寄存器的多个连续位进行配置,几乎基本上都是先清零,然后再进行或操作。
但是有些寄存器一定要注意复位的状态下某些位是有置1的,如果没有清零,将会很难发现错误。
例如
寄存器CCM_ANALOG->PLL_VIDEO复位值为0x0001_100C,第12位为1,
其bit12 是关闭PLL
由于没有这bit12 清0,造成功能时好时不好,调试了好几个小时,才发现这个问题。
3.总结
- 对寄存器操作时,可先全部清零,然后根据芯片手册对对应位进行配置。