开头引用我回复freebsder帖子的话,那是一篇对低功耗分析相当专业的帖子,大家有兴趣去看一下。
我个人越来越喜欢这颗IC了,低功耗方面看怎么用,在提供合理的CPU性能的情况下功耗能控制得很合理,起码NXP给我考虑的很周到了。
其次对于内置的BAKUP SRAM区域可以说是一大特色,相比TI或者其他厂家的全部保持的做法有不少新意。
最后关于文档和CODE,虽然不足够多,但是给出的基本上也足够用了,关键还是要用心看,对于新手可能会有一些问题,其实我真正打算把这颗IC用起来是从昨天晚上开始的,已经在移植6lowpan了,接触了蛮多的外设,对他的文档和官方的驱动有了更深刻的认识,。
恩,要是有机会的话,以后要是允许我会重点把LPC54102平台化,作为项目中低功耗/传感/运算场合的通用平台,好好去维护。
开始移植6lowpan协议栈,涉及的外设还挺多的,昨天晚上才开始,估计明天完成不了了,分享一些相关的东西吧。需要蛮多的timer和clock,拿最简单的通用定时器来搞吧,简单些。
先看看时钟树吧,蛮有必要的,从LPC5410x Standard counter/timers部分看出时钟来至APB,而APB的时钟从下面的时钟树看到来至几个地方,看程序中设置。
- /*
- * Main system clock rate in Hz for this board. Select a clock rate between
- * 1500000Hz and 150000000Hz for the main system (CPU) clock for this board.
- */
- #define BOARD_MAINCLOCKRATE (100000000)
复制代码
- Chip_SetupIrcClocking(BOARD_MAINCLOCKRATE);
复制代码
所以这里的时钟是100M,关于对定时器的配置,也蛮简单的,不得不再次强调写NXP库的工程师团队水平了得,其实不单单是软件工程师的功劳,和硬件设计的时候也是息息相关的,这些是和寄存器设计有关的,不多说了。
- /**
- * [url=home.php?mod=space&uid=159083]@brief[/url] TIMER1_Init
- * @note TIMER1初始化
- * @param none
- * @retval none
- */
- void TIMER1_Init(void)
- {
- /*
- * 设置PR=100
- * TIMER1时钟=PCLK(100M)/100 = 1M = 1000K
- */
- Chip_TIMER_Init(LPC_TIMER1);
- Chip_TIMER_PrescaleSet(LPC_TIMER1, 100);
- Chip_TIMER_Reset(LPC_TIMER1);
- Chip_TIMER_MatchEnableInt(LPC_TIMER1, 1);
- Chip_TIMER_SetMatch(LPC_TIMER1, 1, Chip_Clock_GetAsyncSyscon_ClockRate());
- Chip_TIMER_ResetOnMatchEnable(LPC_TIMER1, 1);
- Chip_TIMER_Disable(LPC_TIMER1);
-
- NVIC_ClearPendingIRQ(CT32B1_IRQn);
- NVIC_EnableIRQ(CT32B1_IRQn);
-
- }
复制代码配置如上,这里需要注意PR的理解和设置,这里初始化禁止了TIMER1,此处的TIMER1用于us的精确延时,因为6lowpan涉及的协议栈、RAIDO驱动都蛮在意这个us延时的。
这玩意很简单,不过得用心,NXP提供的文档和驱动包都能满足你,随便哪个外设都还是很方便就能用起来的。大家有关于通用定时器的问题可以在这个帖子中跟帖讨论,不写了,打算去继续搞一下,希望能移植结束。