• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于GD32F130系列單片機的一種高性能、小尺寸、低成本的超低功耗解決方案實現(下)

    基于GD32F130系列單片機的一種高性能、小尺寸、低成本的超低功耗解決方案實現(下)

    作者:陳思偉 時間:2017-03-09 來源:電子產品世界 收藏

    接上篇
    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和的引腳連接如表1。

    4  軟件參考設計 MCU通過SPI接口讀寫AM1815寄存器時序圖如圖3。 由AM1815的datasheet中SPI讀寫時序圖大概可知,MCU
    讀AM1815寄存器的過程,首先要發送一個需要讀取的寄存 器地址addr,其中addr的第7位為0表示讀,然后把MCU通過 SPI接收到的AM1815返回的第一個字節丟掉,從第二個字節

    本文引用地址:http://www.czjhyjcfj.com/article/201703/345021.htm

    圖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 接 口 讀 寫 過 程 , 在 端開發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,否則第二次無法
    進入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 G8U6和Ambiq Micro公司的超低功耗RTC AM1815。和業界通用的單芯片方案比較,該方案具有高性 能、超低功耗、小尺寸以及低成本的特點。在低占空比的應 用場合,該方案的優勢更加明顯。



    關鍵詞: GD32F130 單片機

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 瓮安县| 轮台县| 磐安县| 凤阳县| 嘉鱼县| 康保县| 资兴市| 桃江县| 周宁县| 鹤峰县| 肇源县| 丰城市| 始兴县| 合肥市| 通化市| 察隅县| 永平县| 巴林左旗| 乐都县| 青田县| 云霄县| 和平县| 辽阳县| 怀柔区| 天长市| 内丘县| 化隆| 土默特右旗| 宜州市| 鲁山县| 扬州市| 文化| 东平县| 苏尼特左旗| 石门县| 盐源县| 阳曲县| 北宁市| 冀州市| 两当县| 石台县|