《朱老师物联网大讲堂》学习笔记
学习地址:www.zhulaoshi.org
这次的代码,可以在上次重定位的代码基础上进行添加,或者icache设置代码基础上增加,
这里我是选择的是重定位的代码。
新增代码的位置,选择的是关看门狗后。
bl clock_init
初始化时钟单独通过一个函数来实现,
通过这句代码跳转到对应函数。
为了能更好的解释代码,我选择了在解释代码的同时,在旁边附上对应数据手册的图片。
那么开始吧!
#define ELFIN_CLOCK_POWER_BASE0xE0100000
在这里定了一个基地址,通过使用 基地址 + 偏移地址 的方法来定位到我们要访问的寄存器位,
这个用法在重定位也用过,
对于那些寄存器功能相关,地址相连的寄存器,很适合使用这种方法。
见数据手册P367,有没有看到第一个32位寄存器的地址就是我上面那句话的值,
这里只是为了说明,所以就没把后面那好几大页贴出来。
后面就是偏移量的宏定义,
#define APLL_LOCK_OFFSET 0x00
#define MPLL_LOCK_OFFSET 0x08
#define APLL_CON0_OFFSET 0x100
#define APLL_CON1_OFFSET 0x104
#define MPLL_CON_OFFSET 0x108
#define CLK_SRC0_OFFSET 0x200
#define CLK_SRC1_OFFSET 0x204
#define CLK_SRC2_OFFSET 0x208
#define CLK_SRC3_OFFSET 0x20c
#define CLK_SRC4_OFFSET 0x210
#define CLK_SRC5_OFFSET 0x214
#define CLK_SRC6_OFFSET 0x218
#define CLK_SRC_MASK0_OFFSET 0x280
#define CLK_SRC_MASK1_OFFSET 0x284
#define CLK_DIV0_OFFSET 0x300
#define CLK_DIV1_OFFSET 0x304
#define CLK_DIV2_OFFSET 0x308
#define CLK_DIV3_OFFSET 0x30c