我试图理解为LPC11U14 MCU和村田陀螺仪传感器编写的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语言”的示例也可能有所帮助。
答案 0 :(得分:1)
LPC_SYSCON
是一个指向SYSCON
基地址的指针,我认为这是您MCU中的硬件模块。从基地址开始的数据结构在名为LPC_SYSCON_Type
的头文件中定义良好。 LPC_SYSCON->SYSAHBCLKCTRL
使用该基址和寄存器SYSAHBCLKCTRL
的偏移量来计算SYSAHBCLKCTRL
的物理地址,然后通过|= (1 << 7)
设置位7(位7当然是AHB时钟使能位)。