概述
1. 开发环境搭建
1.1 安装pack
MDK5在框架上做了调整,增加了许多新的特征。MDK5分成了MDK内核和software pack两部分,其内核部分仍然包括编译器、编辑器、安装包和调试跟踪,而sofrware pack又包括Device、CMSIS和MDK professional Midware。
对于nRF51822 我们需要安装NordicSemiconductor.nRF_DeviceFamilyPack。
Pack8.11.1 & Pack8.5.0 都需要安装
Pack8.5.0 基础外设试验需要用到
Pack8.11.1+ SDK12.2 开发BLE应用用到
Pack Download links
2. nRF51822 Power management (POWER)
2.1 System OFF mode
system off mode是最深省电模式。 在此模式下,系统的核心功能已关闭,所有正在进行的任务都将终止。 唯一有效的机制在这种模式下响应是复位和唤醒机制。
在系统关闭模式下保留一个或多个RAM块
可以通过以下方式进行唤醒:
1、GPIO信号
2、LPCOMP模块
3、复位中唤醒
在进入系统关闭模式之前,用户必须确保所有正在进行的EasyDMA交易已完成。 这通常是通过确保在进入系统关闭时启用EasyDMA的外围设备未激活来实现的。
void recover_state()
{
uint32_t loop_count = 0;
if ((NRF_POWER->GPREGRET >> 4) == RESET_MEMORY_TEST_BYTE)
{
// Take the loop_count value.
loop_count = (uint8_t)(NRF_POWER->GPREGRET & 0xFUL);
NRF_POWER->GPREGRET = 0;
}
loop_count++;
NRF_POWER->GPREGRET = ( (RESET_MEMORY_TEST_BYTE << 4) | loop_count);
tx_payload.data[1] = loop_count << 4;
}
void system_off( void )
{
#ifdef NRF51
NRF_POWER->RAMON |= (POWER_RAMON_OFFRAM0_RAM0Off << POWER_RAMON_OFFRAM0_Pos) |
(POWER_RAMON_OFFRAM1_RAM1Off << POWER_RAMON_OFFRAM1_Pos);
#endif //NRF51
#ifdef NRF52
NRF_POWER->RAM[0].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[1].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[2].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[3].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[4].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[5].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[6].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[7].POWER = RAM_RETENTION_OFF;
#endif //NRF52
// Turn off LEDs before sleeping to conserve energy.
bsp_board_leds_off();
// Set nRF5 into System OFF. Reading out value and looping after setting the register
// to guarantee System OFF in nRF52.
NRF_POWER->SYSTEMOFF = 0x1;
(void) NRF_POWER->SYSTEMOFF;
while (true);
}
2.2 Emulated System OFF mode
如果设备处于调试接口模式,将模拟系统关闭以确保在系统关闭期间可以使用调试所需的所有必需资源,有关详细信息,请参阅DIF章节。 调试所需的资源包括以下关键组件:DIF,CLOCK,POWER,NVMC,MPU,CPU,CODE和RAM。 由于CPU在仿真系统关闭模式下保持打开状态,因此建议在进入系统关闭后直接添加无限循环,以防止CPU执行通常不应执行的代码。
2.3 System ON mode
System ON mode,CPU可以处于活动状态或休眠状态。 CPU通过执行CPU指令集中的WFI或WFE指令进入休眠状态。 在WFI休眠模式下,如果在NVIC中启用了相关中断,则CPU将因中断请求而被唤醒。 在WFE休眠模式下,无论NVIC中是否启用相关中断,CPU都会因中断请求而被唤醒。
子功率模式
在CPU休眠期间,在系统开启模式下,系统可以驻留在以下两种子电源模式之一:
•持续延迟
• 低电量
在恒定延迟模式下*(有关更多信息,请参阅特定于器件的产品规范)*,CPU唤醒延迟和PPI任务响应将保持不变并保持最小值。这可以通过在睡眠期间强制启用一组基本资源来保护,有关强制使用哪些资源的详细信息,请参阅设备特定的产品规范。具有恒定且可预测的等待时间的优点将以增加功耗为代价。通过触发CONSTLAT任务来选择恒定延迟模式。
在低功耗模式下,第44页的系统开启模式中描述的自动电源管理系统将是最有效的并且可以节省最多电量。具有低功率的优点将以具有不同的CPU唤醒延迟和PPI任务响应为代价。通过触发LOWPWR任务选择低功耗模式。
当系统进入ON模式时,默认情况下,它将处于低功耗子功耗模式。
brief Wait For Interrupt
details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.
*/
#define __WFI __wfi
最后
以上就是甜美月光为你收集整理的nRF51822的全部内容,希望文章能够帮你解决nRF51822所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复