0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【合宙Air105開發(fā)板試用體驗(yàn)】Air105的時鐘和延遲函數(shù)

開發(fā)板試用精選 ? 來源:開發(fā)板試用 ? 作者:電子發(fā)燒友論壇 ? 2022-12-02 11:25 ? 次閱讀
本文來源電子發(fā)燒友社區(qū),作者:Michael, 帖子地址:https://bbs.elecfans.com/jishu_2287602_1_1.html

Air105 的時鐘


高頻振蕩源

  • 芯片支持使用內(nèi)部振蕩源, 或使用外置12MHz晶體
  • 芯片上電復(fù)位后 ROM boot 啟動過程基于內(nèi)部12MHz的振蕩器
  • 芯片內(nèi)部集成的12MHz振蕩源精度為±2%, 精度一般
  • 使用外置12MHz晶體, 需要軟件切換
  • 經(jīng)過PLL倍頻后為系統(tǒng)提供輸入
  • 倍頻后的PLL時鐘頻率可通過寄存器進(jìn)行配置,可選頻率為:108MHz, 120MHz, 132MHz, 144MHz, 156MHz, 168MHz, 180MHz, 192MHz, 204MHz


分頻結(jié)構(gòu)

PLL_CLK
外部 XTAL12M 或 內(nèi)部 OSC12M -> 直通, 或PLL產(chǎn)生 108MHz - 204MHz

FCLK / CPU_CLK
PLL_CLK -> 2bit分頻(0, 2分頻, 4分頻) -> FCLK
FCLK就是主程序循環(huán)的時鐘

HCLK
FCLK -> 1bit分頻(默認(rèn)=1, 2分頻) -> HCLK
當(dāng) FCLK 小于 102MHz 時不分頻, 否則2分頻

PCLK
HCLK -> 1bit分頻(默認(rèn)=0, 不分頻) -> PCLK (外設(shè)頻率)
PCLK 是大部分外設(shè)tiMER, ADC, SPI, WDT, GPIO, I2C, UART 的時鐘

QSPI
FCLK -> 3bit分頻(默認(rèn)=3, 4分頻) -> QSPI

低頻振蕩源

  • 芯片安全區(qū)基于內(nèi)部32KHz,RTC默認(rèn)基于內(nèi)部OSC 32K, 使用外部XTAL 32K需要軟件切換
  • 支持內(nèi)部或外部32KHz輸出


時鐘結(jié)構(gòu)

(外部或內(nèi)部 32K RTC OSC) -> SYSTICK
內(nèi)部 32K OSC -> Security

時鐘設(shè)置

以下代碼基于 air105_project 的庫函數(shù)https://gitee.com/iosetting/air105_project

寄存器

寄存器手冊Air105芯片數(shù)據(jù)手冊_1.1.pdf

寄存器的基礎(chǔ)地址, 定義在 air105.h


  1. #define AIR105_FLASH_BASE (0x01000000UL) /*!< (FLASH? ???) Base Address */
  2. #define AIR105_SRAM_BASE (0x20000000UL) /*!< (SRAM? ?? ?) Base Address */
  3. #define AIR105_PERIPH_BASE (0x40000000UL) /*!< (Peripheral) Base Address */
  4. #define AIR105_AHB_BASE (AIR105_PERIPH_BASE)
  5. #define AIR105_APB0_BASE (AIR105_PERIPH_BASE + 0x10000)
  6. #define SYSCTRL_BASE (AIR105_APB0_BASE + 0xF000)
復(fù)制代碼


SYSCTRL_BASE

地址 = 外設(shè)基礎(chǔ)地址 0x40000000UL + APB0 偏移 0x10000 + SYSCTRL 偏移 0xF000
范圍 [0x4001_F000, 0x4001_FFFF]

時鐘振蕩源

振蕩源選擇


  1. SYSCTRL_SYSCLKSourceSelect(SELECT_EXT12M);
復(fù)制代碼

12MHz 時鐘來源選擇: 0:片外 XTAL, 1:片內(nèi) OSC


  1. void SYSCTRL_SYSCLKSourceSelect(SYSCLK_SOURCE_TypeDef source)
  2. {
  3. assert_param(IS_SYSCLK_SOURCE(source));
  4. switch (source)
  5. {
  6. case SELECT_EXT12M:
  7. // FREQ_SEL 是一個32bit的寄存器, 先與補(bǔ)碼(清零第12位), 然后寫入值(0)
  8. SYSCTRL->FREQ_SEL = ((SYSCTRL->FREQ_SEL & (~SYSCTRL_FREQ_SEL_CLOCK_SOURCE_Mask)) | SYSCTRL_FREQ_SEL_CLOCK_SOURCE_EXT);
  9. break;
  10. case SELECT_INC12M:
  11. // 先與補(bǔ)碼(清零第12位), 然后寫入值(1)
  12. SYSCTRL->FREQ_SEL = ((SYSCTRL->FREQ_SEL & (~SYSCTRL_FREQ_SEL_CLOCK_SOURCE_Mask)) | SYSCTRL_FREQ_SEL_CLOCK_SOURCE_INC);
  13. break;
  14. }
  15. }
復(fù)制代碼


時鐘頻率

設(shè)置使用默認(rèn)的內(nèi)部時鐘HSI(Internal clock)


  1. void SystemClock_Config_HSI(void)
  2. {
  3. // 設(shè)置CPU頻率, 直接選擇, 不需要計(jì)算
  4. SYSCTRL_PLLConfig(SYSCTRL_PLL_204MHz);
  5. // 分頻后產(chǎn)生 FCLK -> 這是主程序的時鐘
  6. SYSCTRL_PLLDivConfig(SYSCTRL_PLL_Div_None);
  7. // 分頻產(chǎn)生 HCLK, 如果 FCLK > 102MHz 則無論如何設(shè)置, 都會被二分頻
  8. SYSCTRL_HCLKConfig(SYSCTRL_HCLK_Div2);
  9. // 分頻產(chǎn)生 PCLK -> 這是大部分外設(shè)的時鐘
  10. SYSCTRL_PCLKConfig(SYSCTRL_PCLK_Div2);
  11. QSPI_SetLatency((uint32_t)0);
  12. }
復(fù)制代碼


PLL分頻的選項(xiàng)



  1. #define SYSCTRL_PLL_Div_None ((uint32_t)0x00)
  2. #define SYSCTRL_PLL_Div2 ((uint32_t)0x01)
  3. #define SYSCTRL_PLL_Div4 ((uint32_t)0x10)
復(fù)制代碼


設(shè)置 SysTick



  1. void Delay_Init(void)
  2. {
  3. SYSCTRL_ClocksTypeDef clocks;
  4. SYSCTRL_GetClocksFreq(&clocks);
  5. SysTick_Config(clocks.CPU_Frequency / 1000000); ///< 1us
  6. }
復(fù)制代碼


調(diào)用 SysTick_Config 將單個 SysTick 設(shè)置為 1 us.
也可以直接使用SYSCTRL->HCLK_1MS_VAL * 2 / 1000這個變量代表了當(dāng)前時鐘配置下, 1ms需要的HCLK時鐘周期, 根據(jù)當(dāng)前FCLK是否大于108MHz 確定是否要乘以2.
之后就會每隔1us調(diào)用 SysTick_Handler(void), 在這里設(shè)置 32bit g_current_tick 遞增, 可以用于延時控制. 因?yàn)?2bit數(shù)的限制, 1.2個小時后會溢出, 所以這里有一個延遲的極限.



  1. void SysTick_Handler(void)
  2. {
  3. g_current_tick++;
  4. }
復(fù)制代碼


延遲函數(shù)

為避免溢出造成的延遲錯誤, 需要做一個判斷


  1. uint32_t get_diff_tick(uint32_t cur_tick, uint32_t prior_tick)
  2. {
  3. if (cur_tick < prior_tick)
  4. {
  5. // 如果當(dāng)前值比前值還小, 說明發(fā)生了溢出, 用當(dāng)前值加上原值取反(即原值離溢出的距離)
  6. return (cur_tick + (~prior_tick));
  7. }
  8. else
  9. {
  10. return (cur_tick - prior_tick);
  11. }
  12. }
復(fù)制代碼


延遲函數(shù)


  1. void Delay_us(uint32_t usec)
  2. {
  3. uint32_t old_tick;
  4. old_tick = g_current_tick;
  5. while (get_diff_tick(g_current_tick, old_tick) < usec);
  6. }
  7. void Delay_ms(uint32_t msec)
  8. {
  9. uint32_t old_tick;
  10. old_tick = g_current_tick;
  11. while (get_diff_tick(g_current_tick, old_tick) < (msec * 1000));
  12. }
復(fù)制代碼


代碼

代碼地址:https://gitee.com/iosetting/air105_project

可以使用Keil5 MDK 直接打開 Demos 目錄下的示例項(xiàng)目, 與Air105開發(fā)板接線參考前一篇合宙AIR105(一): Keil MDK開發(fā)環(huán)境, DAP-Link 燒錄和調(diào)試。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 合宙通信
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    1658
  • Air105
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    284
收藏 人收藏

    評論

    相關(guān)推薦

    低功耗4G模組AIR780EX ——開發(fā)板使用說明

    EVB-AIR780EX 開發(fā)板通信推出的基于 Air780EX 模組所開發(fā)的,包含電源,
    的頭像 發(fā)表于 09-11 11:55 ?231次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>低功耗4G模組<b class='flag-5'>AIR</b>780EX ——<b class='flag-5'>開發(fā)板</b>使用說明

    4G模組Air780E開發(fā)板使用手冊

    開發(fā)板Air780E使用說明
    的頭像 發(fā)表于 09-09 18:22 ?226次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>4G模組<b class='flag-5'>Air</b>780E<b class='flag-5'>開發(fā)板</b>使用手冊

    LuatOS開發(fā)板Core_Air780EP使用說明

    Core-Air780EP 開發(fā)板通信推出的基于 Air780EP 模組所開發(fā)的,包含電源
    的頭像 發(fā)表于 09-03 17:38 ?303次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>LuatOS<b class='flag-5'>開發(fā)板</b>Core_<b class='flag-5'>Air</b>780EP使用說明

    低功耗4G模組Air700EAQ——開發(fā)板使用說明

    低功耗4G模組Air700EAQ——開發(fā)板使用說明
    的頭像 發(fā)表于 08-30 17:14 ?807次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>低功耗4G模組<b class='flag-5'>Air</b>700EAQ——<b class='flag-5'>開發(fā)板</b>使用說明

    LuatOS開發(fā)板使用手冊——Air700EAQ

    本文詳細(xì)講解了Air700EAQ開發(fā)板的使用說明。
    的頭像 發(fā)表于 08-28 14:37 ?382次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>LuatOS<b class='flag-5'>開發(fā)板</b>使用手冊——<b class='flag-5'>Air</b>700EAQ

    Air700EAQ硬件設(shè)計(jì)手冊——應(yīng)用接口2

    Air700EAQ硬件設(shè)計(jì)的詳細(xì)介紹
    的頭像 發(fā)表于 08-27 14:23 ?232次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700EAQ硬件設(shè)計(jì)手冊——應(yīng)用接口2

    LuatOS開發(fā)板使用手冊——Air700ECQ

    LuatOS開發(fā)板使用說明——Air700ECQ
    的頭像 發(fā)表于 08-23 16:28 ?401次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>LuatOS<b class='flag-5'>開發(fā)板</b>使用手冊——<b class='flag-5'>Air</b>700ECQ

    Air700ECQ硬件設(shè)計(jì)手冊——應(yīng)用接口1

    Air700ECQ硬件設(shè)計(jì)手冊——應(yīng)用接口1
    的頭像 發(fā)表于 08-21 18:46 ?196次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700ECQ硬件設(shè)計(jì)手冊——應(yīng)用接口1

    Air780EP模塊——AT指令MQTT接入OneNET開發(fā)指南

    過程,Air780EP和MQTT是最佳拍檔,讓設(shè)備互聯(lián)變得輕松又靠譜。想不想試試這簡單又神奇的操作?那就來吧!本文詳細(xì)講解了基于Air80EP
    的頭像 發(fā)表于 08-19 16:40 ?1555次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>780EP模塊——AT指令MQTT接入OneNET<b class='flag-5'>開發(fā)</b>指南

    Air780EP模塊Lua開發(fā)阿里云應(yīng)用指南

    Air780EP模塊Lua開發(fā)阿里云超詳細(xì)教學(xué)!看完包學(xué)會!
    的頭像 發(fā)表于 08-08 09:00 ?699次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>780EP模塊Lua<b class='flag-5'>開發(fā)</b>阿里云應(yīng)用指南

    “花生米”4G模組——Air700EL Air700EY全新上市

    “是花生米太大,還是Air700模組太小?”深受工程師朋友喜愛的Air700系列迷你小封裝4G模組,也被稱為“花生米”。今天,
    的頭像 發(fā)表于 12-26 08:04 ?1832次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>“花生米”4G模組——<b class='flag-5'>Air</b>700EL <b class='flag-5'>Air</b>700EY全新上市

    | Air780EP首版LuatOS固件發(fā)布,新品模組內(nèi)測搶先體驗(yàn)

    11月27日,推出 《9.9盲訂!Air780EP新品4G開發(fā)板福利今日開啟》 鐵粉活動
    的頭像 發(fā)表于 12-11 12:20 ?2449次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b> | <b class='flag-5'>Air</b>780EP首版LuatOS固件發(fā)布,新品模組內(nèi)測搶先體驗(yàn)

    基于Air001的迷你RGB燈環(huán)

    問題來了,你會親手做來送給最愛的TA嗎?基于Air001的迷你RGB燈環(huán)-開源分享-本項(xiàng)目以Ai
    的頭像 發(fā)表于 11-25 08:04 ?1069次閱讀
    基于<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>001的迷你RGB燈環(huán)

    來了!基于Air32的手持示波器

    兼容主流F103,僅需 3.8元的 Air32系列 超值國產(chǎn)MCU,性能強(qiáng)、開發(fā)快,不少行業(yè)客戶已廣泛應(yīng)用于量產(chǎn)項(xiàng)目,相比市場主流F103每盤可省數(shù)萬元! 你知道嗎,工程師朋友們極
    的頭像 發(fā)表于 11-20 12:15 ?1901次閱讀

    Air001迷你版音樂頻譜桌面小擺件

    敏感用戶打造」的Air001系列MCU。今天特別分享@墨鏡臭貓大佬的開源佳作——音樂頻譜桌面小擺件,分為基于
    的頭像 發(fā)表于 11-04 08:05 ?610次閱讀
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>001迷你版音樂頻譜桌面小擺件