LPCOpen-V2.14_LPC5410x的peripheral例程运行解读
(1)Blinky
见前一个帖子
(2)BOD
BOD是在设置了BOD中断电压水平(INTLEVEL),同时设置了重启电压水平(RSTLEVEL)之后,使能中断与重启,
源程序如下:
/* Set BOD detection interrupt to 3.05v and device reset to 1.5v */
Chip_PMU_SetBODLevels(PMU_BODRSTLVL_1_50V, PMU_BODINTVAL_3_05v);
/* Enable BOD reset and interrupt on low power level */
Chip_PMU_EnableBODReset();
Chip_PMU_EnableBODInt();
/* Enable BOD interrupt */
NVIC_EnableIRQ(BOD_IRQn);
为了方便观察BOD中断的运行,在中断中设置Board_LED_Toggle需要修改如下:
/* Brown-out detector interrupt */
void BOD_IRQHandler(void)
{
/* Turn on LED */
for(int i = 0; i < 1000; i++) {
Board_LED_Toggle(1);
}
}
最终运行效果要求正常运行LED是熄灭的,而掉电过程中BOD中断使得LED闪亮,由于万利的板子是低电平点亮LED,因此在初始化阶段应该吧Board_LED_Set()的参数改为true,高电平之后LED熄灭。然后在BOD中断中可以blink闪亮。
运行效果可以通过拔掉供电电源(本人的为JLINK直接给板子供电,在jlink commander中输入Power off就可以)。此时LED会闪亮一下马上熄灭(断电)。
/**
* @brief PMU register block structure
* @note Most of the PMU support is handled by the PMU library.
*/
typedef struct {
__I uint32_t RESERVED0[4];
__I uint32_t RESERVED1[4];
__I uint32_t RESERVED2[4];
__I uint32_t RESERVED3[4];
__I uint32_t RESERVED4;
__IO uint32_t BODCTRL;
__I uint32_t RESERVED5;
__I uint32_t RESERVED6;
__IO uint32_t DPDWAKESRC;
} LPC_PMU_T;
#define LPC_PMU_BASE 0x4002C000UL
#define LPC_PMU ((LPC_PMU_T *) LPC_PMU_BASE)
(3)CLKOUT
在P0.21(CLKOUT)引脚上可以测量如下时钟信号:
CLKOUT_DIV = 250
CPU被调试器暂停后,CLKOUT依然继续输出。
(4)CRC
CRC只需要运行例程即可。
CRC的功能定义和代码如下:
(5)IAP
IAP只需要运行例程即可。
在IDE中观察memory,地址为0x00078000,可见在运行Chip_IAP_CopyRamToFlash前后的flash存储内容发生了变化。
(6)FreqMeasure
只需要运行例程即可。