单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 363|回复: 0
收起左侧

LPC824低功耗下pin配置调试程序

[复制链接]
pauljoe 发表于 2019-3-19 10:09 | 显示全部楼层 |阅读模式
LPC824有颗M0的芯

虽然有些许瑕疵

低功耗做的不错

Power-down模式下很轻松做到几个uA

麻烦地方在于需要仔细调整每个IO管脚的设置

附件给出了所有可配置管脚的列表

通过对pinEnergySavingTable中每个管脚的设置

来调试最终功耗

需从NXP官网下载LPC824库文件chip_8xx及chip_common来支持

单片机源程序如下:
  1. #include "includes.h"
  2. #include "energy.h"

  3. enum {
  4.         INPUT = 0,
  5.         OUTPUT = 1,
  6. };

  7. enum {
  8.         LOW = 0,
  9.         HIGH = 1,
  10. };

  11. const struct struPinEnergySavingTable pinEnergySavingTable[] = {
  12.         {
  13.                 .pin = 0,
  14.                 .iocon = IOCON_PIO0,
  15.                 .dir = 1,
  16.                 .level = 0,
  17.         },
  18.         {
  19.                 .pin = 1,
  20.                 .iocon = IOCON_PIO1,
  21.                 .dir = 1,
  22.                 .level = 0,
  23.         },
  24.         {
  25.                 .pin = 2,
  26.                 .iocon = IOCON_PIO2,
  27.                 .dir = 0,
  28.         },                                                                                                //        SWM_FIXED_SWDIO
  29.         {
  30.                 .pin = 3,
  31.                 .iocon = IOCON_PIO3,
  32.                 .dir = 0,
  33.         },                                                                                                //        SWM_FIXED_SWCLK
  34.         {
  35.                 .pin = 4,
  36.                 .iocon = IOCON_PIO4,
  37.                 .dir = 1,
  38.                 .level = 0,
  39.         },
  40.         {
  41.                 .pin = 5,
  42.                 .iocon = IOCON_PIO5,
  43.                 .dir = 0,
  44.         },                                                                                                //        RESET
  45.         {
  46.                 .pin = 6,
  47.                 .iocon = IOCON_PIO6,
  48.                 .dir = 1,
  49.                 .level = 0,
  50.         },
  51.         {
  52.                 .pin = 7,
  53.                 .iocon = IOCON_PIO7,
  54.                 .dir = 0,
  55.         },                                                                                                //        SWM_FIXED_ADC0
  56.         {
  57.                 .pin = 8,
  58.                 .iocon = IOCON_PIO8,
  59.                 .dir = 1,
  60.                 .level = 0,
  61.         },
  62.         {
  63.                 .pin = 9,
  64.                 .iocon = IOCON_PIO9,
  65.                 .dir = 1,
  66.                 .level = 0,
  67.         },
  68.         {
  69.                 .pin = 10,
  70.                 .iocon = IOCON_PIO10,
  71.                 .dir = 1,
  72.                 .level = 0,
  73.         },
  74.         {
  75.                 .pin = 11,
  76.                 .iocon = IOCON_PIO11,
  77.                 .dir = 1,
  78.                 .level = 0,
  79.         },
  80.         {
  81.                 .pin = 12,
  82.                 .iocon = IOCON_PIO12,
  83.                 .dir = 1,
  84.                 .level = 0,
  85.         },
  86.         {
  87.                 .pin = 13,
  88.                 .iocon = IOCON_PIO13,
  89.                 .dir = 1,
  90.                 .level = 0,
  91.         },
  92.         {
  93.                 .pin = 14,
  94.                 .iocon = IOCON_PIO14,
  95.                 .dir = 1,
  96.                 .level = 0,
  97.         },
  98.         {
  99.                 .pin = 15,
  100.                 .iocon = IOCON_PIO15,
  101.                 .dir = 0,
  102.         },
  103.         {
  104.                 .pin = 16,
  105.                 .iocon = IOCON_PIO16,
  106.                 .dir = 1,
  107.                 .level = 1,
  108.         },
  109.         {
  110.                 .pin = 17,
  111.                 .iocon = IOCON_PIO17,
  112.                 .dir = 1,
  113.                 .level = 0,
  114.         },
  115.         {
  116.                 .pin = 18,
  117.                 .iocon = IOCON_PIO18,
  118.                 .dir = 1,
  119.                 .level = 0,
  120.         },
  121.         {
  122.                 .pin = 19,
  123.                 .iocon = IOCON_PIO19,
  124.                 .dir = 1,
  125.                 .level = 0,
  126.         },
  127.         {
  128.                 .pin = 20,
  129.                 .iocon = IOCON_PIO20,
  130.                 .dir = 1,
  131.                 .level = 0,
  132.         },
  133.         {
  134.                 .pin = 21,
  135.                 .iocon = IOCON_PIO21,
  136.                 .dir = 1,
  137.                 .level = 0,
  138.         },
  139.         {
  140.                 .pin = 22,
  141.                 .iocon = IOCON_PIO22,
  142.                 .dir = 1,
  143.                 .level = 0,
  144.         },
  145.         {
  146.                 .pin = 23,
  147.                 .iocon = IOCON_PIO23,
  148.                 .dir = 0,
  149.         },
  150.         {
  151.                 .pin = 24,
  152.                 .iocon = IOCON_PIO24,
  153.                 .dir = 0,
  154.         },
  155.         {
  156.                 .pin = 25,
  157.                 .iocon = IOCON_PIO25,
  158.                 .dir = 1,
  159.                 .level = 0,
  160.         },
  161.         {
  162.                 .pin = 26,
  163.                 .iocon = IOCON_PIO26,
  164.                 .dir = 1,
  165.                 .level = 0,
  166.         },
  167.         {
  168.                 .pin = 27,
  169.                 .iocon = IOCON_PIO27,
  170.                 .dir = 1,
  171.                 .level = 1,
  172.         },
  173.         {
  174.                 .pin = 28,
  175.                 .iocon = IOCON_PIO28,
  176.                 .dir = 1,
  177.                 .level = 0,
  178.         },
  179. };

  180. #define PIN_ENERGY_SAVING_NUM                                                        (sizeof(pinEnergySavingTable) / sizeof(struct struPinEnergySavingTable))

  181. static inline void PinEnergySaving(const struct struPinEnergySavingTable *saving)
  182. {
  183.         Chip_IOCON_PinSetMode(LPC_IOCON, saving->iocon, PIN_MODE_INACTIVE);
  184.         if (saving->dir) {
  185.                 Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, 0, saving->pin);
  186.                 if (saving->level) {
  187.                         Chip_GPIO_SetPinOutHigh(LPC_GPIO_PORT, 0, saving->pin);
  188.                 } else {
  189.                         Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, 0, saving->pin);
  190.                 }
  191.         } else {
  192.                 Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, 0, saving->pin);
  193.         }
  194. }

  195. void EnergyPeripheral(void)
  196. {
  197.         int i;
  198.        
  199.         for (i = 0; i < 9; i++) {
  200.                 LPC_SWM->PINASSIGN[i] = 0xFFFFFFFF;
  201.         }
  202.         LPC_SWM->PINENABLE0 |= (1 << (SWM_FIXED_ADC11 + 1)) - 1;
  203.        
  204.         for (i = 0; i < PIN_ENERGY_SAVING_NUM; i++) {
  205.                 PinEnergySaving(&pinEnergySavingTable[i]);
  206.         }
  207. }

  208. void PowerDownMode(void)
  209. {
  210.         //        6.7.6.2 Programming Power-down mode
  211.                        
  212.         //        Select the power configuration in Power-down mode in the PDSLEEPCFG
  213.         Chip_SYSCTL_SetDeepSleepPD(SYSCTL_DEEPSLP_BOD_PD | SYSCTL_DEEPSLP_WDTOSC_PD);       
  214.         //        Select the power configuration after wake-up in the PDAWAKECFG
  215.         Chip_SYSCTL_SetWakeup(
  216.                                 SYSCTL_SLPWAKE_BOD_PD |
  217.                                 SYSCTL_SLPWAKE_ADC_PD |
  218.                                 SYSCTL_SLPWAKE_SYSOSC_PD |
  219.                                 SYSCTL_SLPWAKE_SYSPLL_PD |
  220.                                 SYSCTL_SLPWAKE_ACMP_PD);
  221.         LPC_SYSCTL->PDRUNCFG = LPC_SYSCTL->PDAWAKECFG;
  222.         //        If any of the available wake-up interrupts are used for wake-up, enable the interrupts in the interrupt wake-up registers
  223.         Chip_SYSCTL_EnablePINTWakeup(0);
  224.         Chip_SYSCTL_EnablePINTWakeup(1);
  225. ……………………

  226. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
所有资料51hei提供下载:
energy.rar (1.52 KB, 下载次数: 0)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛5群 联系QQ:125739409;技术交流QQ群174280738

Powered by 单片机教程网

快速回复 返回顶部 返回列表