启用系统 AHB 时钟到定时器

Enabling system AHB clock to timer

我正在尝试理解为 LPC11U14 MCU 和 Murata 陀螺仪传感器编写的 SPI 通信代码。我本人有使用 Arduino 的经验,听说过指针和移位寄存器,目前正在学习 C 编程以寻找乐趣。

Full code in PDF

MCU header file.

这行分配计时器我不清楚: LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 7);

我理解的SYSAHBCLKCTRL是一个系统AHB时钟控制寄存器。 LPC_SYSCON 是指向时钟寄存器的指针。但是如何通过将寄存器左移 7 位来启用时钟呢?该寄存器是否在数据表中定义?

代码摘录:

// Enable AHB clock to the 16-bit counter/timer 0 (CT16B0)
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 7);
// MR0 (Match Register 0) will generate an interrupt at 2300 Hz (MCLK is 48 MHz)
LPC_CT16B0->MR0 = 20870;
LPC_CT16B0->MCR = (0x3 << 0); // Interrupt and Reset on MR0
NVIC_EnableIRQ(TIMER_16_0_IRQn); // Enable the TIMER0 Interrupt
LPC_CT16B0->TCR = 1; // Enable TIMER0

P.S。也许 "Arduino language" 中的示例也有帮助。

LPC_SYSCON 是指向 SYSCON 基地址的指针,我认为它是您的 MCU 中的硬件块。从基地址开始的数据结构在名为LPC_SYSCON_Type的头文件中有明确的定义。 LPC_SYSCON->SYSAHBCLKCTRL使用寄存器SYSAHBCLKCTRL的基地址和偏移量计算SYSAHBCLKCTRL的物理地址,然后通过|= (1 << 7)设置第7位(第7位肯定是AHB时钟使能位)。