昨天上午,本人参加这个低功耗设计大赛的第一个帖子出炉了,在此,感谢诸位同志的鼓励:
sacq、
lonerzf、
qq849682862、
ljj3166、
drjloveyou。
今天逛论坛的时候,有幸拜读了这篇帖子:
https://bbs.eeworld.com.cn/thread-447695-1-1.html挑战低功耗 | “不要电”的环境监控,
在这片帖子中,楼主zca123,提供了一颗十分有用的芯片
BQ25504,这颗芯片能够以几百mV的电压启动能量收集,十分适合我这个创意,就顺手申请了样片,这两天研究下芯片手册,希望能用上。
同时,基本完成了电源管理的功能设计:
当储能单元的电量达到满额(收集能量的速率大于能量使用速率),MSP430芯片就会通过巡检电路监测到储能单元电量的大小,进而发出警报,指示灯亮,同时切断储能单元的充电电路。当储能单元的电量由满额逐渐降低,降低到MSP430规定的电压值时(可由程序设定),指示警告灯会熄灭,充电电路会再次重新连接,能量便可以继续为储能单元充电,继续收集能量。在这整个过程中智能充电模块会时时检测电路中电流数据,监测电流大小,控制能量收集模块的充放电,防止过充过放电,保护储能单元。
当多路信号同时输入时,芯片就会监测各个不同信号的大小,他们的大小确定着优先级,芯片会选择优先级高的进行充电。射频前端模块通过接收射频源发射的射频信号,然后经整流电路,升压电路,变成直流信号,再将处理后的直流信号输送到处理单元中,处理单元会将直流信号经过模数转换,然后对不同信号大小的能量:进行多射频复合式能量采集器的设计及仿真比对,较大的让其输出直接为负责供电,或者存储在储能单元中;较小的,则让其输出给低压肩动电路供电。
有了思路,接下来就是具体的实现了。
说实话,金刚狼这块板子到手已经有好长时间了,但是只是刚拿到手的时候下载了CCS中的几个EXAMPLES,今天才真正接触,实在是惭愧。
暑期搞电设的时候一直在用寄存器做有关的设计,最近学32的库函数版本,所以这次学金刚狼,也想从库函数入手。TI其实对于他的5和6系列都有相应的库函数,这里我们打开CCS。(之前已经装过了MSP430WARE这是前提)打开resource explorer
这里可以看到ti对于F5、6以及FR5、6系列提供了开发库。我们打开FR5系列的,子目录有四个:用户指南、API指南、空工程、实例工程。
因为这算的上是我的第一个金刚狼程序了,当然选择GPIO啦~
点开GPIO的第一个工程,代码如下:
- #include "driverlib.h"
- void main(void)
- {
- //Stop WDT
- WDT_A_hold(WDT_A_BASE);
- //PA.x output
- GPIO_setAsOutputPin(
- GPIO_PORT_PA,
- GPIO_PIN0 + GPIO_PIN1 + GPIO_PIN2 + GPIO_PIN3 +
- GPIO_PIN4 + GPIO_PIN5 + GPIO_PIN6 + GPIO_PIN7 +
- GPIO_PIN8 + GPIO_PIN9 + GPIO_PIN10 + GPIO_PIN11 +
- GPIO_PIN12 + GPIO_PIN13 + GPIO_PIN14 + GPIO_PIN15
- );
- //Set all PA pins HI
- GPIO_setOutputHighOnPin(
- GPIO_PORT_PA,
- GPIO_PIN0 + GPIO_PIN1 + GPIO_PIN2 + GPIO_PIN3 +
- GPIO_PIN4 + GPIO_PIN5 + GPIO_PIN6 + GPIO_PIN7 +
- GPIO_PIN8 + GPIO_PIN9 + GPIO_PIN10 + GPIO_PIN11 +
- GPIO_PIN12 + GPIO_PIN13 + GPIO_PIN14 + GPIO_PIN15
- );
- /*
- * Disable the GPIO power-on default high-impedance mode to activate
- * previously configured port settings
- */
- PMM_unlockLPM5();
- //Enter LPM4 w/interrupts enabled
- __bis_SR_register(LPM4_bits + GIE);
- //For debugger
- __no_operation();
- }
复制代码
这里的
"driverlib.h",包含了所有外设驱动,可以打开一看:
- #include "inc/hw_memmap.h"
- #include "adc12_b.h"
- #include "aes256.h"
- #include "comp_e.h"
- #include "crc.h"
- #include "crc32.h"
- #ifdef DRIVERLIB_LEGACY_MODE
- #include "deprecated/cs.h"
- #else
- #include "cs.h"
- #endif
- #ifdef DRIVERLIB_LEGACY_MODE
- #include "deprecated/dma.h"
- #else
- #include "dma.h"
- #endif
- #include "esi.h"
- #include "eusci_a_spi.h"
- #include "eusci_a_uart.h"
- #include "eusci_b_i2c.h"
- #include "eusci_b_spi.h"
- #ifdef DRIVERLIB_LEGACY_MODE
- #include "deprecated/fram.h"
- #else
- #include "fram.h"
- #endif
- #include "gpio.h"
- #include "lcd_c.h"
- #include "mpu.h"
- #ifdef DRIVERLIB_LEGACY_MODE
- #include "deprecated/mpy32.h"
- #else
- #include "mpy32.h"
- #endif
- #ifdef DRIVERLIB_LEGACY_MODE
- #include "deprecated/pmm.h"
- #else
- #include "pmm.h"
- #endif
- #include "ram.h"
- #include "ref_a.h"
- #include "rtc_b.h"
- #include "rtc_c.h"
- #ifdef DRIVERLIB_LEGACY_MODE
- #include "deprecated/sfr.h"
- #else
- #include "sfr.h"
- #endif
- #ifdef DRIVERLIB_LEGACY_MODE
- #include "deprecated/sys.h"
- #else
- #include "sys.h"
- #endif
- #include "timer_a.h"
- #include "timer_b.h"
- #include "tlv.h"
- #include "wdt_a.h"
复制代码可以看到有很多外设,相信大家这里见名知意,这里不加赘述。
我们看程序部分,共调用了
WDT_A_hold、GPIO_setAsOutputPin、GPIO_setOutputHighOnPin、PMM_unlockLPM5、__bis_SR_register、__no_operation这几个函数,后三个是用于低功耗模式以及设立调试点的,这里我们不去管他。我们看前面三个函数。
这些函数从哪边才能了解到呢?一个方法是按住ctrl用鼠标点击。还有就是在前面的resource explorer中阅读相关的说明文档了。
打开说明文档,即API帮助文档,点击modules:
选择GPIO_API就可以看到跟GPIO有关的全部库函数了:
Functions |
void | |
| This function configures the selected Pin as output pin. More... |
|
void | |
| This function configures the selected Pin as input pin. More... |
|
void | |
| This function configures the peripheral module function in the output direction for the selected pin for either primary, secondary or ternary module function modes. More... |
|
void | |
| This function configures the peripheral module function in the input direction for the selected pin for either primary, secondary or ternary module function modes. More... |
|
void | |
| This function sets output HIGH on the selected Pin. More... |
|
void | |
| This function sets output LOW on the selected Pin. More... |
|
void | |
| This function toggles the output on the selected Pin. More... |
|
void | |
| This function sets the selected Pin in input Mode with Pull Down resistor. More... |
|
void | |
| This function sets the selected Pin in input Mode with Pull Up resistor. More... |
|
uint8_t | |
| This function gets the input value on the selected pin. More... |
|
void | |
| This function enables the port interrupt on the selected pin. More... |
|
void | |
| This function disables the port interrupt on the selected pin. More... |
|
uint16_t | |
| This function gets the interrupt status of the selected pin. More... |
|
void | |
| This function clears the interrupt flag on the selected pin. More... |
|
void | |
| This function selects on what edge the port interrupt flag should be set for a transition. More... |
下面还有函数参数的各种说明,楼主这种理解能力比较差的人阅读后也是能轻松掌握,还是十分方便的。
今天就到这边吧,明天去试一试用金刚狼驱动NOKIA5110液晶,(手头没有低功耗液晶暂且用这个代替吧QAQ)。
再次谢谢大家~