标题:
LPC824低功耗下pin配置调试程序
[打印本页]
作者:
pauljoe
时间:
2019-3-19 10:09
标题:
LPC824低功耗下pin配置调试程序
LPC824有颗M0的芯
虽然有些许瑕疵
低功耗做的不错
Power-down模式下很轻松做到几个uA
麻烦地方在于需要仔细调整每个IO管脚的设置
附件给出了所有可配置管脚的列表
通过对pinEnergySavingTable中每个管脚的设置
来调试最终功耗
需从NXP官网下载LPC824库文件chip_8xx及chip_common来支持
单片机源程序如下:
#include "includes.h"
#include "energy.h"
enum {
INPUT = 0,
OUTPUT = 1,
};
enum {
LOW = 0,
HIGH = 1,
};
const struct struPinEnergySavingTable pinEnergySavingTable[] = {
{
.pin = 0,
.iocon = IOCON_PIO0,
.dir = 1,
.level = 0,
},
{
.pin = 1,
.iocon = IOCON_PIO1,
.dir = 1,
.level = 0,
},
{
.pin = 2,
.iocon = IOCON_PIO2,
.dir = 0,
}, // SWM_FIXED_SWDIO
{
.pin = 3,
.iocon = IOCON_PIO3,
.dir = 0,
}, // SWM_FIXED_SWCLK
{
.pin = 4,
.iocon = IOCON_PIO4,
.dir = 1,
.level = 0,
},
{
.pin = 5,
.iocon = IOCON_PIO5,
.dir = 0,
}, // RESET
{
.pin = 6,
.iocon = IOCON_PIO6,
.dir = 1,
.level = 0,
},
{
.pin = 7,
.iocon = IOCON_PIO7,
.dir = 0,
}, // SWM_FIXED_ADC0
{
.pin = 8,
.iocon = IOCON_PIO8,
.dir = 1,
.level = 0,
},
{
.pin = 9,
.iocon = IOCON_PIO9,
.dir = 1,
.level = 0,
},
{
.pin = 10,
.iocon = IOCON_PIO10,
.dir = 1,
.level = 0,
},
{
.pin = 11,
.iocon = IOCON_PIO11,
.dir = 1,
.level = 0,
},
{
.pin = 12,
.iocon = IOCON_PIO12,
.dir = 1,
.level = 0,
},
{
.pin = 13,
.iocon = IOCON_PIO13,
.dir = 1,
.level = 0,
},
{
.pin = 14,
.iocon = IOCON_PIO14,
.dir = 1,
.level = 0,
},
{
.pin = 15,
.iocon = IOCON_PIO15,
.dir = 0,
},
{
.pin = 16,
.iocon = IOCON_PIO16,
.dir = 1,
.level = 1,
},
{
.pin = 17,
.iocon = IOCON_PIO17,
.dir = 1,
.level = 0,
},
{
.pin = 18,
.iocon = IOCON_PIO18,
.dir = 1,
.level = 0,
},
{
.pin = 19,
.iocon = IOCON_PIO19,
.dir = 1,
.level = 0,
},
{
.pin = 20,
.iocon = IOCON_PIO20,
.dir = 1,
.level = 0,
},
{
.pin = 21,
.iocon = IOCON_PIO21,
.dir = 1,
.level = 0,
},
{
.pin = 22,
.iocon = IOCON_PIO22,
.dir = 1,
.level = 0,
},
{
.pin = 23,
.iocon = IOCON_PIO23,
.dir = 0,
},
{
.pin = 24,
.iocon = IOCON_PIO24,
.dir = 0,
},
{
.pin = 25,
.iocon = IOCON_PIO25,
.dir = 1,
.level = 0,
},
{
.pin = 26,
.iocon = IOCON_PIO26,
.dir = 1,
.level = 0,
},
{
.pin = 27,
.iocon = IOCON_PIO27,
.dir = 1,
.level = 1,
},
{
.pin = 28,
.iocon = IOCON_PIO28,
.dir = 1,
.level = 0,
},
};
#define PIN_ENERGY_SAVING_NUM (sizeof(pinEnergySavingTable) / sizeof(struct struPinEnergySavingTable))
static inline void PinEnergySaving(const struct struPinEnergySavingTable *saving)
{
Chip_IOCON_PinSetMode(LPC_IOCON, saving->iocon, PIN_MODE_INACTIVE);
if (saving->dir) {
Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, 0, saving->pin);
if (saving->level) {
Chip_GPIO_SetPinOutHigh(LPC_GPIO_PORT, 0, saving->pin);
} else {
Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, 0, saving->pin);
}
} else {
Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, 0, saving->pin);
}
}
void EnergyPeripheral(void)
{
int i;
for (i = 0; i < 9; i++) {
LPC_SWM->PINASSIGN[i] = 0xFFFFFFFF;
}
LPC_SWM->PINENABLE0 |= (1 << (SWM_FIXED_ADC11 + 1)) - 1;
for (i = 0; i < PIN_ENERGY_SAVING_NUM; i++) {
PinEnergySaving(&pinEnergySavingTable[i]);
}
}
void PowerDownMode(void)
{
// 6.7.6.2 Programming Power-down mode
// Select the power configuration in Power-down mode in the PDSLEEPCFG
Chip_SYSCTL_SetDeepSleepPD(SYSCTL_DEEPSLP_BOD_PD | SYSCTL_DEEPSLP_WDTOSC_PD);
// Select the power configuration after wake-up in the PDAWAKECFG
Chip_SYSCTL_SetWakeup(
SYSCTL_SLPWAKE_BOD_PD |
SYSCTL_SLPWAKE_ADC_PD |
SYSCTL_SLPWAKE_SYSOSC_PD |
SYSCTL_SLPWAKE_SYSPLL_PD |
SYSCTL_SLPWAKE_ACMP_PD);
LPC_SYSCTL->PDRUNCFG = LPC_SYSCTL->PDAWAKECFG;
// If any of the available wake-up interrupts are used for wake-up, enable the interrupts in the interrupt wake-up registers
Chip_SYSCTL_EnablePINTWakeup(0);
Chip_SYSCTL_EnablePINTWakeup(1);
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
(3.57 KB, 下载次数: 63)
下载附件
2019-3-19 16:15 上传
所有资料51hei提供下载:
energy.rar
(1.52 KB, 下载次数: 8)
2019-3-19 10:03 上传
点击文件名下载附件
LPC824低功耗下管脚调试设置
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1