国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

零基礎開發小安派-Eyes-S1 外設篇 ——TIMER

AIoT行業洞察 ? 來源:AIoT行業洞察 ? 作者:AIoT行業洞察 ? 2024-12-21 16:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

AiPi-Eyes-S1是安信可開源團隊專門為Ai-M61-32S設計的一款開發板,支持WiFi6、BLE5.3。所搭載的Ai-M61-32S 模組具有豐富的外設接口,具體包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太網 (EMAC)、SD/MMC(SDH)、SPI、UARTI2C、I2S、PWM、GPDAC、GPADC、ACOMP 和 GPIO 等。

AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預留TF卡座,并且引出USB接口,可接入USB攝像頭。

從零開始學習小安派:

1、零基礎開發小安派-Eyes-S1【入門篇】——初識小安派-Eyes-S1

2、零基礎開發小安派-Eyes-S1【入門篇】——安裝VMware與Ubuntu

3、入門篇:零基礎開發小安派-Eyes-S1——新建工程并燒錄調試

4、零基礎開發小安派-Eyes-S1入門篇——Win下SSH連接Linux

5、零基礎開發小安派-Eyes-S1【入門篇】——Samba共享文件夾

6、零基礎開發小安派-Eyes-S1【入門篇】——工程文件架構

7、零基礎開發小安派-Eyes-S1【外設篇】——GPIO 輸入輸出

8、零基礎開發小安派-Eyes-S1【外設篇】——GPIO中斷編程

9、零基礎開發小安派-Eyes-S1【外設篇】——PWM

10、零基礎開發小安派-Eyes-S1【外設篇】——UART

11、零基礎開發小安派-Eyes-S1【外設篇】——I2C

12、零基礎開發小安派-Eyes-S1【外設篇】——ADC

13、零基礎開發小安派-Eyes-S1【外設篇】——I2S

TIMER 也就是定時器,可以根據時鐘源來分配計時的時間周期,實現準確的計時,一般軟件的定時會出現誤差,一些特殊情況需要精準的定時,那就需要使用到硬件定時器,如定時 5 分鐘執行某些特殊任務。定時器可以搭配中斷來使用,利用好時間間隔而滿足個人的需求。

一、了解小安派-Eyes-S1 的 TIMER

芯片內置了兩個 32-Bit 定時器,這兩個定時器在 LHAL 庫里對應 timer0 和 timer1。

這兩組 TIMER 有以下特征:

? 多種時鐘來源,最高可支持 80M 時鐘

? 8-bit 時鐘分頻器,分頻系數為 1-256

? 兩個 32-bit 定時器:channel 0 和 channel 1

? 定時器包含三組報警值設定,可設定報警值溢出時報警

? 支持 Free Run 模式和 Pre_load 模式

? 一個 16-bit 看門狗定時器

? 支持寫入密碼保護,防止誤設定造成系統異常

? 支持中斷或復位兩種看門狗溢出方式

? 支持測量外部 GPIO 的脈沖寬度

定時器的時鐘來源有以下五種選擇:

? BCLK--總線時鐘

? 32K--32K 時鐘

? 1K--1K 時鐘(32K 的分頻)

? XTAL--外部晶振

? GPIO--外部 GPIO

#define TIMER_CLKSRC_BCLK 0

#define TIMER_CLKSRC_32K 1

#define TIMER_CLKSRC_1K 2

#define TIMER_CLKSRC_XTAL 3

#define TIMER_CLKSRC_GPIO 4

#define TIMER_CLKSRC_NO 5

計數模式有以下兩種:

定時器計數模式分為兩種: freerun(向上計數模式)、preload(重裝載模式)。

#define TIMER_COUNTER_MODE_PROLOAD 0

#define TIMER_COUNTER_MODE_UP 1

定時器一共三個 compare id, 用于設置不同的定時時間,可以當三個定時器使用。

#define TIMER_COMP_ID_0 0

#define TIMER_COMP_ID_1 1

#define TIMER_COMP_ID_2 2

二、結構體與函數接口

struct bflb_timer_config_s

說明:Timer 初始化配置結構體

struct bflb_timer_config_s {

uint8_t counter_mode;

uint8_t clock_source;

uint8_t clock_div;

uint8_t trigger_comp_id;

uint32_t comp0_val;

uint32_t comp1_val;

uint32_t comp2_val;

uint32_t preload_val;

};

wKgZPGdjd4KAJQPLAAAkeEjP0ww183.png

bflb_timer_init

說明: 初始化 timer。使用之前需要開啟 timer ip 時鐘。

void bflb_timer_init(struct bflb_device_s *dev, const struct bflb_timer_config_s *config);

wKgZO2djd4KAT-dUAAAIqeHsacs915.png

bflb_timer_deinit

說明: 反初始化 timer。

void bflb_timer_deinit(struct bflb_device_s *dev);

wKgZPGdjd4OAa8JAAAAGF016QGw164.png

bflb_timer_start

說明: 啟動 timer 。

void bflb_timer_start(struct bflb_device_s *dev);

wKgZO2djd4OAYGq9AAAF1l-W1zw259.png

bflb_timer_stop

說明: 停止 timer。

void bflb_timer_stop(struct bflb_device_s *dev);

wKgZPGdjd4OAZI6aAAAFzXWYfPI987.png

bflb_timer_set_compvalue

說明: 設置 timer comp id 比較值。

void bflb_timer_set_compvalue(struct bflb_device_s *dev, uint8_t cmp_no, uint32_t val);

wKgZO2djd4SAdNy2AAAKD1K9_P4004.png

bflb_timer_get_compvalue

說明: 獲取 comp id 比較值。

uint32_t bflb_timer_get_compvalue(struct bflb_device_s *dev, uint8_t cmp_no);

wKgZPGdjd4SAblfnAAAKE74RSQQ945.png

bflb_timer_get_countervalue

說明: 獲取 timer 計數值。

uint32_t bflb_timer_get_countervalue(struct bflb_device_s *dev);

wKgZPGdjd4SATtxDAAAIbv-d_-I145.png

bflb_timer_compint_mask

說明: timer comp 中斷屏蔽開關。

void bflb_timer_compint_mask(struct bflb_device_s *dev, uint8_t cmp_no, bool mask);

wKgZO2djd4WAT89zAAAK5c-68-Y331.png

bflb_timer_get_compint_status

說明: 獲取 timer comp id 中斷匹配標志。

bool bflb_timer_get_compint_status(struct bflb_device_s *dev, uint8_t cmp_no);

wKgZPGdjd4WAQvOMAAALPSi4zpg907.png

bflb_timer_compint_clear

說明: 清除 timer comp id 中斷標志

void bflb_timer_compint_clear(struct bflb_device_s *dev, uint8_t cmp_no);

wKgZO2djd4aAK3LIAAAIPdL47Zw260.png

三、定時器的兩種計數方式以及中斷觸發

定時器時鐘源的選擇以及分頻

以選擇 TIMER_CLKSRC_XTAL 這個外部晶振的時鐘源來舉例,頻率為 40MHz,而分頻系數,也就是結構體中的 clock_div,這里系數可選 0~255,選擇 39,時鐘計數=時鐘頻率/(分頻系數 +1)。也就是 40Mhz/(39+1),也就是 1Mhz,而周期與頻率互為倒數,也就是 1us 一個計數。這樣分頻的話就是一微秒計數 +1。

計數模式

TIMER 有兩種計數模式,分別是 freerun(向上計數模式)、preload(重裝載模式)。

FreeRun 模式下,計數器的初始值為 0,定時器開始后,累加計數,當達到計數最大值后,然后從 0 再次開始計數。而最大值的數量估計是 comp0 的數據類型最大值,也就是 32 位數據。

相比之下,PreLoad 模式就好用多了,計數器的初始值是 PreLoad 寄存器的值,然后向上累加計數,當滿足 PreLoad 條件時,計數器的值被置為 PreLoad 寄存器的值,然后計數器再次開始向上累加計數。

中斷

結構體有 trigger_comp_id 選擇幾個比較 ID,如果選擇三個 ID 的情況下,在定時器的計數器計數過程中,一旦計數器的值與三個比較器中的某比較值一致,該比較器的比較標志就會置位,并可以產生相應的比較中斷。在所有的 ID 中斷調節都達到后,會回到 PreLoad 的值,也就是 preload_val 重新開始計時。有如下一個示例的時序圖,若預加載寄存器的值為 10,比較器 0 的值為 13,比較器 1 的值為 16,比較器 2 的值為 19。

wKgZPGdjd4aAfv_YAACavsctMPU42.jpeg

在 FreeRun 模式下,定時器工作時序與 PreLoad 基本相同,只是計數器會從 0 開始累計到最大值,期間產生的比較標志和比較中斷的機制與 FreeRun 模式相同。

簡單示例:定時器分頻每一秒進入一次中斷,在中斷修改全局變量,在主函數中打印

Main

#include "bflb_mtimer.h"

#include "bflb_timer.h"

#include "board.h"

struct bflb_device_s *timer0;

volatile static uint16_t MyTime_s = 0; //定義一個全局變量,在中斷中修改,這里注意要用volatile關鍵字防止變量被優化

void timer0_isr(int irq, void *arg)

{

bool status = bflb_timer_get_compint_status(timer0, TIMER_COMP_ID_0);

if (status) {

bflb_timer_compint_clear(timer0, TIMER_COMP_ID_0);

if (MyTime_s==60)

{

MyTime_s = 0;

}

MyTime_s++;

printf("time is %drn",MyTime_s);

}

}

//中斷服務函數,每進入一次變量自增1,到達60也就是1分鐘置為0

int main(void)

{

board_init();

printf("Timer basic testn");

/* timer clk = XCLK/(div + 1 )*/

struct bflb_timer_config_s cfg0;

cfg0.counter_mode = TIMER_COUNTER_MODE_PROLOAD; /* 選擇重裝載模式 */

cfg0.clock_source = TIMER_CLKSRC_XTAL;//選擇外部時鐘晶振,40MHz

cfg0.clock_div = 39; /* for bl616/bl808/bl606p is 39, for bl702 is 31 */

cfg0.trigger_comp_id = TIMER_COMP_ID_0;//選擇比較ID的個數,這里選擇一個ID,也就是只會到達下面的ID1

cfg0.comp0_val = 1000000; /* 比較值ID1,當計數達到1000000時,根據前面的分頻一微秒一個計數,也就是總共1秒 */

cfg0.comp1_val = 2500000; /* 比較值ID2,需要大于ID1,由于前面只設置了一個ID,所以這里不會觸發 */

cfg0.comp2_val = 3500000; /* 比較值ID2,需要大于ID2,由于前面只設置了一個ID,所以這里不會觸發 */

cfg0.preload_val = 0; /* 重裝載值,開始的值,以及比較完所有ID個數后重啟的值 */

timer0 = bflb_device_get_by_name("timer0");

/* Timer init with default configuration */

bflb_timer_init(timer0, &cfg0);

bflb_irq_attach(timer0->irq_num, timer0_isr, NULL);

bflb_irq_enable(timer0->irq_num);

/* Enable timer */

bflb_timer_start(timer0);//開啟定時器

printf("case success.rn");

while (1) {

switch (MyTime_s)

{

case 10:

printf("10 seconds have passedrn");

break;

case 20:

printf("20 seconds have passedrn");

break;

case 30:

printf("30 seconds have passedrn");

break;

case 40:

printf("40 seconds have passedrn");

break;

case 50:

printf("50 seconds have passedrn");

break;

case 60:

printf("One minute has already passedrn");

break;

default:

break;

}

//對全局變量進行判斷,通過switch語句分別打印

bflb_mtimer_delay_ms(900);

//這個延遲是為了防止在主函數中重復判斷導致瘋狂打印

}

}

?效果

wKgZO2djd4aAPJwlAABhOzDLlVA30.jpeg


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 開源
    +關注

    關注

    3

    文章

    4207

    瀏覽量

    46140
  • Timer
    +關注

    關注

    1

    文章

    64

    瀏覽量

    13568
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    小安立式桌擺外殼設計制作

    小安-Eyes-R2,但是一直沒什么時間好好的研究一下。近期學習了一下相關例程,感覺用的很難受,大概是因為屏幕排線比較短且板子和屏幕不好固定,以及燒錄兩個按鍵必須要倆手按,于是考慮做外殼固定一下。 ?
    的頭像 發表于 09-09 17:20 ?835次閱讀
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>立式桌擺外殼設計制作

    【開源硬件】小安AiPi-Eyes-R2詳細測評+DIY天氣時鐘

    接口-130W像素 1 顯示器-4.0寸-RGB接口40寸-像素480x480 1 咪頭-2pin-1.25mm間距-交叉絞線100mm 2 具體開箱流程照片如下: 環境搭建 因為之前筆者已經用過Windows開發
    的頭像 發表于 08-12 16:23 ?797次閱讀
    【開源硬件】<b class='flag-5'>小安</b><b class='flag-5'>派</b>AiPi-<b class='flag-5'>Eyes</b>-R2詳細測評+DIY天氣時鐘

    上手體驗安信可小安AI開發板,如何接入Home Assistant?

    以下作品由安信可社區用戶 無垠的廣袤 制作 感謝安信可社區的支持,免費領到了安信可的最新產品 小安AI - AiPi-PalChatV1 語音開發板。 原貼地址: 【AiPi-PalChatV
    的頭像 發表于 07-08 10:34 ?4711次閱讀
    上手體驗安信可<b class='flag-5'>小安</b><b class='flag-5'>派</b>AI<b class='flag-5'>開發</b>板,如何接入Home Assistant?

    【教程】零基礎!手把手教你使用STM32F4進行E22-400T22S編程通信

    通過本文帶大家零基礎使用STM32F407VET6單片機進行E22-400T22S模塊編程并進行簡單的通信,當然如果學會了,也可以舉一反三應用于E22、E220、E32所有模塊上。一STM32環境
    的頭像 發表于 07-03 19:32 ?1489次閱讀
    【教程】<b class='flag-5'>零基</b>礎!手把手教你使用STM32F4進行E22-400T22<b class='flag-5'>S</b>編程通信

    零基礎學習LuatOS編程:快速上手開發實戰教程!

    無論你是剛接觸物聯網編程的新手,還是希望拓展技能的技術愛好者,本教程將為零基礎的讀者提供一條清晰的LuatOS學習路徑。從安裝開發工具到編寫第一個程序,我們將通過實例講解核心概念,助你快速實現從理論
    的頭像 發表于 06-13 17:27 ?619次閱讀
    <b class='flag-5'>零基</b>礎學習LuatOS編程:快速上手<b class='flag-5'>開發</b>實戰教程!

    【「零基開發AI Agent」閱讀體驗】+讀《零基開發AI Agent》掌握扣子平臺開發智能體方法

    收到發燒友網站寄來的《零基開發AI Agent》這本書已經有好些天了,這段時間有幸拜讀了一下全書,掌握了一個開發智能體的方法。 該書充分從零基礎入手,先闡述了Agent是什么,它的基
    發表于 05-14 19:51

    【「零基開發AI Agent」閱讀體驗】+ 入門學習

    很高興又有機會學習ai技術,這次試讀的是「零基開發AI Agent」,作者葉濤、管鍇、張心雨。 大模型的普及是近三年來的一件大事,萬物皆可大模型已成為趨勢。作為大模型開發應用中重要組成部分,提示詞
    發表于 05-02 09:26

    基于小凌RK2206開發板:OpenHarmony如何使用IoT接口控制FLASH外設

    1、實驗簡介本實驗將演示如何在小凌-RK2206開發板上使用IOT庫的FLASH接口,進行FLASH編程開發。例程將創建一個任務,實現FLASH讀寫操作。例程源代碼:https
    的頭像 發表于 04-22 14:49 ?919次閱讀
    基于小凌<b class='flag-5'>派</b>RK2206<b class='flag-5'>開發</b>板:OpenHarmony如何使用IoT接口控制FLASH<b class='flag-5'>外設</b>

    【「零基開發AI Agent」閱讀體驗】+初品Agent

    期待中的《零基開發AI Agent——手把手教你用扣子做智能體》終于寄到了,該書由葉濤、 管鍇、張心雨完成,并由電子工業出版社出版發行。 全書分為三個部分,即入門、工具及實踐
    發表于 04-22 11:51

    【「零基開發AI Agent」閱讀體驗】總體預覽及入門

    ,Agent對個人和企業的價值,以及開發Agent需要掌握的基礎知識。 工具:詳細介紹了Agent開發平臺的演進,盤點了國內的主流Agent開發平臺,重點介紹了扣子平臺名功能模塊的操
    發表于 04-20 21:53

    基于小凌RK2206開發板:OpenHarmony如何使用IoT接口控制GPIO外設

    1、案例簡介本案例主要是如何在小凌-RK2206開發板上使用IOT庫的GPIO接口,進行GPIO編程開發。例程將創建一個任務,通過配置GPIO引腳,實現GPIO讀寫操作。例程源代碼:
    的頭像 發表于 04-11 15:36 ?2045次閱讀
    基于小凌<b class='flag-5'>派</b>RK2206<b class='flag-5'>開發</b>板:OpenHarmony如何使用IoT接口控制GPIO<b class='flag-5'>外設</b>

    請求贈閱《零基開發AI Agent——手把手教你用扣子做智能體》

    博主好!致敬葉濤 管鍇 張心雨三位AI具身智能-智能體方面的專家、導師! 《零基開發AI Agent——手把手教你用扣子做智能體》一不懂編程的多數大眾也可以開發Agent,這意義深遠,功德無量
    發表于 04-10 12:16

    功德+1,用小安-Eyes-S1做一個電子木魚

    2024積德累功,心想事成!接下來看看如何用小安-Eyes-S1做一個電子木魚。01GUI-Guider頁面設計先新建一個工程。直接進入UI設計界面,這里用到了兩個
    的頭像 發表于 04-09 18:38 ?982次閱讀
    功德+<b class='flag-5'>1</b>,用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一個電子木魚

    零基開發AI Agent——手把手教你用扣子做智能體》

    零基開發AI Agent——手把手教你用扣子做智能體》是一本為普通人量身打造的AI開發指南。它不僅深入淺出地講解了Agent的概念和發展,還通過詳細的工具介紹和實戰案例,幫助讀者快速掌握
    發表于 03-18 12:03

    名單公布!【書籍評測活動NO.59】零基開發AI Agent——手把手教你用扣子做智能體

    以上圖文并茂。 4、試讀報告發表在電子發燒友論壇>>社區活動專版標題名稱必須包含【「零基開發AI Agent」閱讀體驗】+自擬標題 注意事項 1、活動期間如有作弊
    發表于 03-10 16:29