您的位置 首页 测评

根据GD32F130系列单片机的一种高性能、小尺度、低成本的超低功耗解决方案完成(下)

接上篇3 硬件参考设计 如图2,AM1815进入sleep模式的方式为MCU通过SPI 接口设置AM1815的sleep相关寄存器的值以使其进入sleep模 式,当AM1815进入sleep模式后

接上篇
3  硬件参阅规划
     如图2,AM1815进入sleep形式的方法为MCU经过SPI 接口设置AM1815的sleep相关存放器的值以使其进入sleep模 式,当AM1815进入sleep形式后,会将PSW/nIRQ2引脚电 平由低变为高,而AM1815的PSW/nIRQ2引脚接到MCU的 VSS,当其电平由低变高时,MCU从上电变为断电状况。 AM1815从sleep形式唤醒的方法为其EXTI引脚接收到一个上 升沿或许下降沿脉冲,这样PSW/nIRQ2引脚电平就会从高 变为低,然后MCU从断电变为上电状况。经过以上这种方 式,以AM1815的进入低功耗和唤醒来操控MCU的断电和上 电。
AM1815和GD32F130的引脚衔接如表1。

4  软件参阅规划 MCU经过SPI接口读写AM1815存放器时序图如图3。 由AM1815的datasheet中SPI读写时序图大约可知,MCU
读AM1815存放器的进程,首要要发送一个需求读取的存放 器地址addr,其间addr的第7位为0表明读,然后把MCU经过 SPI接收到的AM1815回来的第一个字节丢掉,从第二个字节

图3   SPI读写进程
开端次序接收到的数据便是读取的数据。MCU写AM1815的进程相似,首要发送需求写入的存放器地址addr,其间addr 的第7位为1表明写,然后顺次将需求写入的字节写入,不必 管AM1815回来的数据。参 考 A M 1 8 1 5 d a t a s h e e t 中 S P I 接 口 读 写 过 程 , 在 GD32F130端开发SPI接口函数读写AM1815存放器相关代码 如下:
MCU经过SPI读AM1815存放器代码
void mcu_spi_read(uint8_t num_bytes, uint8_t addr, uint8_t

*data)

{

uint8_t i,temp; addr=addr & 0x7F; ASSERT_SPI_CE;
while((SPI1->STR&SPI_FLAG_TBE)==RESET);
//等候发送区空
SPI1->DTR=addr;    //发送一个byte while((SPI1->STR&SPI_FLAG_RBNE)==RESET);    //等
待接收完一个byte temp= SPI1->DTR;
for (i = 0; i < num_bytes; i++)

{

while((SPI1->STR&SPI_FLAG_TBE)==RESET); SPI1->DTR = 0;
// Write data is a don't care.

while((SPI1->STR&SPI_FLAG_RBNE)==RESET);

data[i] = SPI1->DTR;

} DEASSERT_SPI_CE;
} MCU经过SPI写AM1815存放器代码
void mcu_spi_write(uint8_t num_bytes, uint8_t addr, uint8_

t *data)

{
uint8_t i,temp; addr=addr | 0x80; ASSERT_SPI_CE;
while((SPI1->STR&SPI_FLAG_TBE)==RESET);
//等候发送区空
SPI1->DTR=addr;    //发送一个byte while((SPI1->STR&SPI_FLAG_RBNE)==RESET);  //等
待接收完一个byte

temp=    SPI1->DTR;

for (i = 0; i < num_bytes; i++)

{
while((SPI1->STR&SPI_FLAG_TBE)==RESET); SPI1->DTR = data[i];    // Write data is a don't care. while((SPI1->STR&SPI_FLAG_RBNE)==RESET); temp = SPI1->DTR;
} DEASSERT_SPI_CE;
} GD130操控AM1815进入sleep进程 挑选GD130的一个一般的GPIO口(例如PB7)作为操控
引 脚 , 当 检 测 到 P B 7 上 有 一 个 下 降 沿 时 , 通 过 S P I 接 口 向 AM1815的sleep存放器写值则会操控AM1815进入sleep形式。 参阅datasheet,相关代码如下:
if(!GPIO_ReadInputBit(GPIOB,GPIO_PIN_7))
{
/*先将Control1存放器的STOP位清0,不然第2次无法
进入sleep,将ARST和PWR2方位1*/
temp_stop=readreg(0x10);

writereg(0x10, (temp_stop&&0x7F)|0x06);

temp_stop= readreg(0x10);

/*将IntMask存放器的EX1E方位1,使能外部触发中止,
以唤醒AM1815*/

temp1= readreg(0x12); writereg(0x12, temp1|0x01); temp1= readreg(0x12); if(readreg(0x12)==0xE1)
{
/*读Status存放器,清EX1位,将Sleep_Control存放器的
SLP方位1,进入sleep形式*/
temp_state=readreg(0x0F); temp_sleep=readreg(0x17); writereg(0x17, temp_sleep|0x80); temp_sleep= readreg(0x17);
}

}

5 AM1815被唤醒以及唤醒MCU发动进程
A M1815能够经过外部信号唤醒, 上升沿和下降沿均 可,也能够经过设置RTC守时主动唤醒。当AM1815的EXTI 引脚接收到一个外部触发信号,PSW引脚会由高变到低,从 而操控MCU上电发动。因篇幅所限,该部分代码就不再贴 出来了。

6 结语
本 文 设 计 了 一 种 可 以 应 用 于 可 穿 戴 设 备 、 便 携 设 备 、 追 踪 器 、 R F I D 、 支 付 U k e y 、 仪 器 仪 表 等 行 业 的 低 功耗规划计划。 该计划使用了Gigadev ice公司的高性价比 MCU GD32F130G8U6和Ambiq Micro公司的超低功耗RTC AM1815。和业界通用的单芯片计划比较,该计划具有高性 能、超低功耗、小尺度以及低成本的特色。在低占空比的应 用场合,该计划的优势愈加显着。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/205208.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部