-
- #include "ac78xx.h"
- int main(void)
- {
- InitDelay();
-
- mdelay(10000);
- WriteBitsValue(0x40008000, 4, 1, 0);
- SysStop();
- while(1);
- }
此时再测试功耗为47uA:
再查阅手册,有测试一些其他方法(关闭一些默认开始的时钟等),但都没有降低到一个预期值,这个时候想到以前用瑞萨芯片的时候也碰到过类似问题,就是IO口漏电,为了解决IO口漏电,我将所有IO全部设置为输出模式(经验上来讲好像IO在输入模式下内部本身就会漏电,至于为什么我就不清楚了),并根据外围电路,设置为相应的电平。
-
- #include "ac78xx.h"
- #include "ac78xx_gpio.h"
- /* makesure n < 16 */
- #define PAout(n) BIT_ADDR(GPIOA_ODR_ADDR, n)
- #define PAin(n) BIT_ADDR(GPIOA_IDR_ADDR, n)
- #define PBout(n) BIT_ADDR(GPIOB_ODR_ADDR, n)
- #define PBin(n) BIT_ADDR(GPIOB_IDR_ADDR, n)
- #define PCout(n) BIT_ADDR(GPIOC_ODR_ADDR, n)
- #define PCin(n) BIT_ADDR(GPIOC_IDR_ADDR, n)
- #define PDout(n) BIT_ADDR(GPIOD_ODR_ADDR, n)
- #define PDin(n) BIT_ADDR(GPIOD_IDR_ADDR, n)
- #define PEout(n) BIT_ADDR(GPIOE_ODR_ADDR, n)
- #define PEin(n) BIT_ADDR(GPIOE_IDR_ADDR, n)
- /**
- * port_Init
- *
- * @param[in] none
- * [url=home.php?mod=space&uid=266161]@return[/url] 0
- *
- * [url=home.php?mod=space&uid=247401]@brief[/url] init all port
- */
- void port_Init(void)
- {
-
- GPIO_SetDir(GPIO_PA0, 1);
- PAout(0) = 1;
- GPIO_SetDir(GPIO_PA1, 1);
- GPIO_SetDir(GPIO_PA2, 1);
- GPIO_SetDir(GPIO_PA3, 1);
- GPIO_SetDir(GPIO_PA4, 1);
- GPIO_SetDir(GPIO_PA5, 1);
- GPIO_SetDir(GPIO_PA6, 1);
- GPIO_SetDir(GPIO_PA7, 1);
- GPIO_SetDir(GPIO_PA8, 1);
- GPIO_SetDir(GPIO_PA9, 1);
- GPIO_SetDir(GPIO_PA10, 1);
- GPIO_SetDir(GPIO_PA11, 1);
- GPIO_SetDir(GPIO_PA12, 1);
- GPIO_SetDir(GPIO_PA13, 1);
- GPIO_SetDir(GPIO_PA14, 1);
- GPIO_SetDir(GPIO_PA15, 1);
-
- GPIO_SetDir(GPIO_PB0, 1);
- GPIO_SetDir(GPIO_PB1, 1);
- GPIO_SetDir(GPIO_PB2, 1);
- PBout(2) = 1;
- GPIO_SetDir(GPIO_PB3, 1);
- GPIO_SetDir(GPIO_PB4, 1);
- GPIO_SetDir(GPIO_PB5, 1);
- GPIO_SetDir(GPIO_PB6, 1);
- GPIO_SetDir(GPIO_PB7, 1);
- GPIO_SetDir(GPIO_PB8, 1);
- GPIO_SetDir(GPIO_PB9, 1);
- GPIO_SetDir(GPIO_PB10, 1);
- GPIO_SetDir(GPIO_PB11, 1);
- GPIO_SetDir(GPIO_PB12, 1);
- GPIO_SetDir(GPIO_PB13, 1);
- GPIO_SetDir(GPIO_PB14, 1);
- GPIO_SetDir(GPIO_PB15, 1);
-
- GPIO_SetDir(GPIO_PC0, 1);
- GPIO_SetDir(GPIO_PC1, 1);
- GPIO_SetDir(GPIO_PC2, 1);
- GPIO_SetDir(GPIO_PC3, 1);
- GPIO_SetDir(GPIO_PC4, 1);
- GPIO_SetDir(GPIO_PC5, 1);
- GPIO_SetDir(GPIO_PC6, 1);
- GPIO_SetDir(GPIO_PC7, 1);
- PCout(7) = 0;
- GPIO_SetDir(GPIO_PC8, 1);
- GPIO_SetDir(GPIO_PC9, 1);
- PCout(9) = 1;
- GPIO_SetDir(GPIO_PC10, 1);
- GPIO_SetDir(GPIO_PC11, 1);
- GPIO_SetDir(GPIO_PC12, 1);
- GPIO_SetDir(GPIO_PC13, 1);
- GPIO_SetDir(GPIO_PC14, 1);
- GPIO_SetDir(GPIO_PC15, 1);
-
- GPIO_SetDir(GPIO_PD0, 1);
- GPIO_SetDir(GPIO_PD1, 1);
- PDout(1) = 1;
- GPIO_SetDir(GPIO_PD2, 1);
- PDout(2) = 1;
- }
- int main(void)
- {
- InitDelay();
-
- mdelay(10000);
- WriteBitsValue(0x40008000, 4, 1, 0);
- port_Init();
- SysStop();
- while(1);
- }
整个代码改完后如上。再次测试,电流降到8uA。
至此,与手册描述的还是有些差距,不过我测到这里也就降不下去了,曾经和内部同事沟通,好像测试方法不一样,他们是直接把电流表串在进入MCU的电源上。那就不知道是不是还有别的地方耗电了。