AC7801時鐘配置流程

一 默認配置

在啟動文件中,已經對時鐘進行了初始化,默認按外部8M晶振,配置系統時鐘為48MHZ,APB為系統時鐘的2分頻,為24MHZ。在system_ac780x.c文件中,可以找到下面這個系統初始化函數,里面有SetSysClock()函數,對時鐘進行了初始化。

void SystemInit (void)
{
#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U)SCB->VTOR = (uint32_t) &__Vectors;
#endifSystemCoreClock = SYSTEM_CLOCK;SetEflashClock();SetSysClock();CKGEN_SetAPBClockDivider(APBCLK_DIV);//SPM_EnableLVD(DISABLE);  //disable LVD if need
}

如果需要配置不一樣的時鐘,可以通過系統文件里的宏定義修改,但并不建議在系統文件上修改,可以自己寫配置函數。

二 時鐘模塊簡介

1.時鐘源:
高速內部時鐘(HSI):內部 RC 振蕩器提供 8MHz 時鐘源
外部高速時鐘(HSE):外部 OSC 提供 4MHZ ~30MHz 晶振
低速內部時鐘(LSI): 內部低速 RC OSC 提供 32KHz 時鐘源
系統時鐘 (SYSPLL): 提供高達 48MHz 的高速時鐘

2.系統時鐘框圖

手冊中的框圖可以幫助我們更好的理解時鐘的每個配置步驟。

輸入頻率:支持4~30MHZ
VCO = 輸入頻率 * FBKDIV / PREDIV
系統時鐘 = VCO / POSDIV / SYSCLKDIV

同時,手冊中也提供了典型的配置參數供參考。因為有些點的頻率值是有限制的,比如VCO的頻率范圍是0.5GHZ~1.5GHZ,那么直接參考典型配置參考表就肯定不會有問題,找到合適的參數即可。

三 自定義時鐘

以AC7801的開發板做測試,板子上外部晶振為8MHZ。這里以配置系統時鐘為48MHZ,APB時鐘為24MHZ為例。根據上面的參考表,可選擇PREDIV = 1,FBKDIV = 96,POSDIV=16,VOC = 8*96/16 =48M。相關寄存器如下圖,可知:SYSPLL1_PREDIV為0,SYSPLL1_POSDIV為8,SYSPLL1_FBKDIV為96。

為了直觀的測試時鐘的頻率,用一個定時器,定時產生中斷,在中斷中翻轉一個I/O電平,以此來測時鐘頻率。定時器初始化如下:定時器的時鐘源為APB時鐘24M,配置定時器裝載值為24000000,則1S產生一次中斷。

void TIMER_Config(void)
{TIMER_ConfigType  config; memset(&config, 0, sizeof(config));config.periodValue = 24000000;           /*!< TIMER channel period value */config.linkModeEn = DISABLE ;         /*!< TIMER channel linkmode enable */config.interruptEn = ENABLE ;        /*!< TIMER channel interrupt enable */config.callBack = TIM_CallBack;   /*!< TIMER channel callback pointer */config.timerEn = ENABLE;            /*!< TIMER channel enable/disable */TIMER_Init(TIMER_CHANNEL0, &config);    //TIMER0初始化配置
}

1. 中斷處理

void TIM_CallBack(void *device, uint32_t wpara, uint32_t lpara)
{if (wpara & TIMER_CHANNEL_TF_T**_Msk){GPIOC->ODR ^= (1<<7);}
}

2.外部時鐘配置——庫函數

void SYS_CLOCK_HSE(void)
{/* check if xosc enable success? */if (SPM_EnableXOSC(ENABLE) == SUCCESS){CKGEN_SetPLLReference(PLL_REF_EXTERNAL_OSC);//PLL參考時鐘選擇外部振蕩器}else  /* if xosc enable fail, */{}/* set system clock divider */CKGEN_SetSysclkDiv(0);//系統時鐘1分頻/* check if pll enable success? */if (SPM_EnablePLL(ENABLE) == SUCCESS)/使能SYSPLL{CKGEN_SetPllPrevDiv(0);//PREDIVCKGEN_SetPllPostDiv(8);//PLL_POSDIVCKGEN_SetPllFeedbackDiv(96);//PLL_FBKDIVCKGEN_SetSysclkSrc(SYSCLK_SRC_PLL_OUTPUT);//系統時鐘源選擇PLL時鐘}else  /* pll enable fail */{}CKGEN_SetAPBClockDivider(APBCLK_DIVIDER_2);//APB時鐘為系統時鐘2分頻
}

3.外部時鐘配置——寄存器

外部時鐘的使能以及就緒標志,PLL使能以及就緒標志等,在第6章系統電源管理SPM模塊下的SPM_PWR_MGR_CFG1寄存器里。
配置過程比較常規,使能時鐘——>等待時鐘就緒——>PLL時鐘源選擇——>時鐘分頻及倍頻配置——>系統時鐘源選擇

void SYS_CLOCK_HSE_REG(void)
{SPM->PWR_MGR_CFG1 |= 1<<29;//外部高速時鐘XOSC使能while((SPM->PWR_MGR_CFG1 &(0X80000000))==0)//等待XOSC就緒{}SPM->PWR_MGR_CFG1 |= (1<<27);//SYSPLL使能while((SPM->PWR_MGR_CFG1 &(0X40000000))==0)//等待PLL時鐘就緒{}CKGEN->CTRL |= (1<<20);//PLL參考時鐘選擇外部振蕩器CKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0x3<<30)))|(0<<30));          //PREDIVCKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0x1f<<25)))|(8<<25));        //POSDIVCKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0xff<<15)))|(96<<15));        //FBKDIVCKGEN->CTRL |= ((CKGEN->CTRL & (~(3<<4)))|(0<<4));        //系統時鐘分頻為1CKGEN->CTRL |= (1<<0);//系統時鐘源選擇PLL時鐘CKGEN->CTRL |= (1<<8);//APB為系統時鐘2分頻
}

4.內部時鐘配置——庫函數

采用內部高速8M時鐘源做配置

void SYS_CLOCK_HSI(void)
{CKGEN_SetPLLReference(PLL_REF_INTERAL_OSC);//PLL參考時鐘選擇內部振蕩器CKGEN_SetPllPrevDiv(0);             //PREDIVCKGEN_SetPllPostDiv(8);             //POSDIVCKGEN_SetPllFeedbackDiv(96);    //FBKDIVCKGEN_SetSysclkDiv(0);              //系統時鐘1分頻/* check if pll enable success? */if (SPM_EnablePLL(ENABLE) == SUCCESS){/* pll enable success,use pll output as system clock src */CKGEN_SetSysclkSrc(SYSCLK_SRC_PLL_OUTPUT);//系統時鐘源選擇PLL時鐘}else{/* pll enable fail */}CKGEN_SetAPBClockDivider(APBCLK_DIVIDER_2);//APB為系統時鐘2分頻
}

5.內部時鐘配置——寄存器

void SYS_CLOCK_HSI_REG(void)
{CKGEN->CTRL &= ~(1<<20);//PLL參考時鐘選擇內部振蕩器SPM->PWR_MGR_CFG1 |= (1<<27);//SYSPLL使能while((SPM->PWR_MGR_CFG1 &(0X40000000))==0)//等待PLL時鐘就緒{}        CKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0x3<<30)))|(0<<30));          //PREDIVCKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0x1f<<25)))|(8<<25));        //POSDIVCKGEN->SYSPLL1_CFG0 = ((CKGEN->SYSPLL1_CFG0 & (~(uint32_t)(0xff<<15)))|(96<<15));        //FBKDIVCKGEN->CTRL |= ((CKGEN->CTRL & (~(3<<4)))|(0<<4));        //SYSCLK_DIV,系統時鐘1分頻CKGEN->CTRL |= (1<<0);//系統時鐘源選擇PLL時鐘CKGEN->CTRL |= (1<<8);//APB為系統時鐘2分頻
}

6.主函數

主函數中調用時鐘初始化函數,并對TIMER0配置,同時需要對使用到的I/O進行配置。

int main(void)
{//SYS_CLOCK_HSE();SYS_CLOCK_HSE_REG();//SYS_CLOCK_HSI();//SYS_CLOCK_HSI_REG();TIMER_Config();GPIO_SetFunc(GPIOC, GPIO_PIN7, GPIO_FUN0);/*功能復用選擇*/GPIO_SetDir(GPIOC, GPIO_PIN7, GPIO_OUT);GPIO_SetPinLevel(GPIOC, GPIO_PIN7, GPIO_LEVEL_HIGH);while(1){}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39068.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39068.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39068.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端修改audio背景色

1.查看瀏覽器設置Show user agent shadow DOM是否打開 2.打開可以查看audio Dom /** 去掉默認的背景顏色 */ audio::-webkit-media-controls-enclosure{background-color:unset; } 3.效果圖

Java官網網址及其重要資源

Java是一種廣泛應用于開發各種應用程序的編程語言&#xff0c;它具有跨平臺、面向對象和高性能等優勢。若你想學習Java或深入了解它的最新動態&#xff0c;Java官網是你的首要目的地。在本文中&#xff0c;我們將向你介紹Java官網的網址以及一些重要資源。 Java官網網址&#x…

TCP/IP 網絡協議族分層

TCP/IP協議族 TCP/IP不單是TCP和IP兩個協議&#xff0c;TCP/IP實際上是一組協議&#xff0c;它包括上百個各種功能的協議&#xff0c;如&#xff1a;遠程登錄、文件傳輸和電子郵件等&#xff0c;當然&#xff0c;也包括TCP、IP協議 它將軟件通信過程抽象化為四個抽象層&#…

基于SpringBoot校園外賣配送系統設計和實現(源碼+LW+調試文檔+講解等)

&#x1f497;博主介紹&#xff1a;?全網粉絲10W,CSDN作者、博客專家、全棧領域優質創作者&#xff0c;博客之星、平臺優質作者、專注于Java、小程序技術領域和畢業項目實戰?&#x1f497; &#x1f31f;文末獲取源碼數據庫&#x1f31f; 感興趣的可以先收藏起來&#xff0c;…

c++:關鍵字異常處理機制

模板編程的幾個關鍵字 模(mu)板編程初體驗 (1)template和typename (2)模板實際上是一種抽象&#xff0c;C的高級編程特性就是不斷向抽象化發展 export (1)用來在cpp文件中定義一個模板類或模板函數&#xff0c;而它的聲明在對應的h文件中 (2)export專用于模板&#xff0c;類似…

揭秘電子世界的雙雄:模擬電路與數字電路的精彩對決!

數字電路與模擬電路&#xff0c;這兩者在電子工程領域可謂是兩大基石&#xff0c;各有千秋&#xff0c;各自發揮著不可或缺的作用。下面&#xff0c;我們就來詳細探討一下它們之間的主要區別。 1. 信號類型與處理 模擬電路&#xff1a;處理的是連續變化的信號&#xff0c;就像…

使用阿里云語音服務實現設備異常實時通知

隨著物聯網的普及,設備異常通知方式也變得多種多樣。從傳統的后臺異常列表,到短信通知,再到微信消息通知等。然而,當設備探測到火警等緊急異常時,需要實時通知到相關人員。本文將介紹如何借助阿里云的語音服務來實現這一功能。 1. 準備工作 1.1 資質申請 首先,登錄阿里…

Git中fetch與pull 的區別

一、fetch與pull的基本概念 在Git中&#xff0c;fetch和pull都是用于從遠程倉庫獲取數據的命令。但是&#xff0c;它們在處理方式和結果上有所不同。 1、fetch fetch命令用于從遠程倉庫下載最新的數據到本地倉庫&#xff0c;但它不會自動合并或修改當前的工作。fetch會將遠程…

2024年大廠離職當博主成為最擁擠自媒體賽道的現象分析

大廠離職博主在2024年成為最擁擠自媒體賽道的現象分析 1. 行業背景與就業環境變化 降本增效引發的被動離職&#xff1a;近年來&#xff0c;隨著各行業的降本增效措施不斷推進&#xff0c;即便是知名大廠也在縮減員工規模。騰訊、阿里巴巴等企業的財報顯示&#xff0c;從2021年…

一鍵恢復短信,4個方法,輕松找回iPhone數據!

在日常生活和工作中&#xff0c;短信往往承載著重要的信息和回憶。然而&#xff0c;意外刪除、系統故障或手機更換等情況都可能導致短信丟失&#xff0c;這讓很多iPhone用戶感到困擾。 好消息是&#xff0c;您并不需要擔心這些數據無法找回。如今&#xff0c;一鍵恢復短信的方…

autoware.universe源碼略讀(3.7)--perception:elevation_map_loader/euclidean_cluster

autoware.universe源碼略讀3.7--perception&#xff1a;elevation_map_loader/euclidean_cluster elevation_map_loadereuclidean_clustereuclidean_clustervoxel_grid_based_euclidean_cluster節點類launch文件 elevation_map_loader 在上一篇文章有提到compare_map_segmentat…

基于java+springboot+vue實現的家政服務平臺(文末源碼+Lw)299

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本家政服務平臺就是在這樣的大環境下誕生&#xff0c;其可以幫助管理者在短時間內處理完畢龐大的數據信息&a…

Redis中hash類型的操作命令(命令的語法、返回值、時間復雜度、注意事項、操作演示)

文章目錄 字符串和哈希類型相比hset 命令hget 命令hexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhincrbyfloat 字符串和哈希類型相比 假設有以下一種場景&#xff1a;現在要在 Redis 中存儲一個用戶的基本信息(id1、namezhangsan、age17)&#xff0c;下圖表示使用字符串…

2024護網整體工作預案示例

目錄 第1章 HW整體工作工作部署 1.1 工作組織架構 1.2 各部門工作職責 1.3 演練期間工作機制 1.3.1 工作匯報機制 1.3.2 應急響應機制 第2章 系統資產梳理整改 2.1 敏感信息梳理整改 2.2 互聯網資產發現 2.3 第三方供應商梳理 2.4 業務連接單位梳理 第3…

下載nginx搭建的文件服務器(爬蟲)

下載nginx搭建的文件服務器&#xff08;爬蟲&#xff09; windows版 需要下載python包&#xff1a;pip install requests import requests import re import os#開始訪問的url地址&#xff0c;必須以/結尾 index_url "https://www.aaa.com/aaaaa/" #下載到本地的地…

win10顯示毫秒-上午-下午及星期幾,24小時制

關于毫秒 winr regedit 計算機\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced 新建ShowSecondsInSystemClock&#xff0c;編輯1顯示&#xff0c;不顯示就刪了它 然后重啟 資源管理器可能有多個全部重啟&#xff0c;就可以啦 根據自己喜好…

黨建科普3D數字化展館支持實時更新迭代

3D虛擬策展逐漸成為新時代下的主流方式&#xff0c;深圳華銳視點作為專業的web3d開發公司&#xff0c;具有專業化的3D數字化空間還原能力&#xff0c;能根據企業/個人不同需求和預算&#xff0c;為您打造純線上虛擬3D藝術展&#xff0c;讓您徹底擺脫實體美術館的限制&#xff0…

面試官:Java文件是如何被加載到內存中的?

面試連環call Java文件是如何被加載到內存中的&#xff1f;Java類的聲明周期都有哪些階段&#xff1f;JVM加載的class文件都有哪些來源&#xff1f;JVM在加載class文件時&#xff0c;何時判斷class文件的格式是否符合要求&#xff1f; 類生命周期 一個類從被加載到虛擬機內存…

【計算機體系結構】緩存的false sharing

在介紹緩存的false sharing之前&#xff0c;本文先介紹一下多核系統中緩存一致性是如何維護的。 目前主流的多核系統中的緩存一致性協議是MESI協議及其衍生協議。 MESI協議 MESI協議的4種狀態 MESI協議有4種狀態。MESI是4種狀態的首字母縮寫&#xff0c;緩存行的4種狀態分別…

【Linux】—Xshell、Xftp安裝

文章目錄 前言一、下載Xshell、Xftp二、安裝Xshell三、使用XShell連接Linux服務器四、修改windows的主機映射文件&#xff08;hosts文件&#xff09;五、遠程連接hadoop102/hadoop103/hadoop104服務器六、安裝Xftp 前言 XShell遠程管理工具&#xff0c;可以在Windows界面下來訪…