启用系统 AHB 时钟到定时器
Enabling system AHB clock to timer
我正在尝试理解为 LPC11U14 MCU 和 Murata 陀螺仪传感器编写的 SPI 通信代码。我本人有使用 Arduino 的经验,听说过指针和移位寄存器,目前正在学习 C 编程以寻找乐趣。
这行分配计时器我不清楚:
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时钟使能位)。
我正在尝试理解为 LPC11U14 MCU 和 Murata 陀螺仪传感器编写的 SPI 通信代码。我本人有使用 Arduino 的经验,听说过指针和移位寄存器,目前正在学习 C 编程以寻找乐趣。
这行分配计时器我不清楚:
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时钟使能位)。