ATSAMD GCLK[x] 用于更多外设
ATSAMD GCLK[x] for more Peripherals
是否可以将一个GCLK用于更多外设?
ATSAMD09C13 有六个 GCLK 发生器,但这还不够。
这个例子有效:
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(SERCOM0_GCLK_ID_CORE) |
GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN(0);
这个有两个 ID 的例子是行不通的:
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(SERCOM0_GCLK_ID_CORE) | GCLK_CLKCTRL_ID(GCLK_CLKCTRL_ID_WDT) |
GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN(0);
是否有解决这个问题的方法?
在寄存器 GCLK_CLKCTRL
中,字段 ID
不是位掩码,而是包含您要配置的外围设备的编号。
您不能通过 OR
ing 多个 ID 来组合它们。
改为单独配置每个设备:
这是 Harmony3 生成的一些代码,用于向多个设备提供 GCLK0
/ GCLK1
:
/* Selection of the Generator and write Lock for WDT */
GCLK_REGS->GCLK_CLKCTRL = GCLK_CLKCTRL_ID(3) | GCLK_CLKCTRL_GEN(0x0) | GCLK_CLKCTRL_CLKEN_Msk;
/* Selection of the Generator and write Lock for EIC */
GCLK_REGS->GCLK_CLKCTRL = GCLK_CLKCTRL_ID(5) | GCLK_CLKCTRL_GEN(0x1) | GCLK_CLKCTRL_CLKEN_Msk;
/* Selection of the Generator and write Lock for SERCOM0_CORE */
GCLK_REGS->GCLK_CLKCTRL = GCLK_CLKCTRL_ID(14) | GCLK_CLKCTRL_GEN(0x1) | GCLK_CLKCTRL_CLKEN_Msk;
/* Selection of the Generator and write Lock for TC1 TC2 */
GCLK_REGS->GCLK_CLKCTRL = GCLK_CLKCTRL_ID(18) | GCLK_CLKCTRL_GEN(0x1) | GCLK_CLKCTRL_CLKEN_Msk;
/* Selection of the Generator and write Lock for ADC */
GCLK_REGS->GCLK_CLKCTRL = GCLK_CLKCTRL_ID(19) | GCLK_CLKCTRL_GEN(0x0) | GCLK_CLKCTRL_CLKEN_Msk;
是否可以将一个GCLK用于更多外设?
ATSAMD09C13 有六个 GCLK 发生器,但这还不够。
这个例子有效:
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(SERCOM0_GCLK_ID_CORE) |
GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN(0);
这个有两个 ID 的例子是行不通的:
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(SERCOM0_GCLK_ID_CORE) | GCLK_CLKCTRL_ID(GCLK_CLKCTRL_ID_WDT) |
GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN(0);
是否有解决这个问题的方法?
在寄存器 GCLK_CLKCTRL
中,字段 ID
不是位掩码,而是包含您要配置的外围设备的编号。
您不能通过 OR
ing 多个 ID 来组合它们。
改为单独配置每个设备:
这是 Harmony3 生成的一些代码,用于向多个设备提供 GCLK0
/ GCLK1
:
/* Selection of the Generator and write Lock for WDT */
GCLK_REGS->GCLK_CLKCTRL = GCLK_CLKCTRL_ID(3) | GCLK_CLKCTRL_GEN(0x0) | GCLK_CLKCTRL_CLKEN_Msk;
/* Selection of the Generator and write Lock for EIC */
GCLK_REGS->GCLK_CLKCTRL = GCLK_CLKCTRL_ID(5) | GCLK_CLKCTRL_GEN(0x1) | GCLK_CLKCTRL_CLKEN_Msk;
/* Selection of the Generator and write Lock for SERCOM0_CORE */
GCLK_REGS->GCLK_CLKCTRL = GCLK_CLKCTRL_ID(14) | GCLK_CLKCTRL_GEN(0x1) | GCLK_CLKCTRL_CLKEN_Msk;
/* Selection of the Generator and write Lock for TC1 TC2 */
GCLK_REGS->GCLK_CLKCTRL = GCLK_CLKCTRL_ID(18) | GCLK_CLKCTRL_GEN(0x1) | GCLK_CLKCTRL_CLKEN_Msk;
/* Selection of the Generator and write Lock for ADC */
GCLK_REGS->GCLK_CLKCTRL = GCLK_CLKCTRL_ID(19) | GCLK_CLKCTRL_GEN(0x0) | GCLK_CLKCTRL_CLKEN_Msk;