SAM4E單片機之旅——13、LCD之ASF初步

在Atmel Studio 6中,集成了Atmel Software Framework(ASF框架)。通過它提供的庫,可以很快速地完成新的項目。

這次的最終目標使用ASF在LCD上顯示出文字“Hello World!”,現階段目標是點亮LCD的背光,學習目標是了解怎么樣使用ASF提供的模塊。

?

一、 ASF Wizard

新建一個項目,根據所使用的開發板選擇模板。

wps_clip_image-12098

然后可以通過ASF Wizard進行所需模塊的配置。

wps_clip_image-12152

默認情況下,已經選擇了兩個模塊。在之前我們以前使用過了其中Generic board support模塊提供的頭文件sam4e_ek.h了。

wps_clip_image-18626

為了解模塊添加的方法,先把這兩個模塊移除。

?

二、 通過ASF設置時鐘

  1. 添加模塊

    在可用模塊里找到“System Clock Control”模塊,展開它。

    wps_clip_image-22996

    可以看到它依賴的模塊,以及相應的API文檔等內容。

    添加該模塊后,它會自動地把依賴的模塊添加進去。添加完成后點擊Apply按鈕,使改變生效。

    現在在asf.h文件中,就已經導入了一系列的模塊相關的頭文件。如剛剛使用的系統時鐘控制模塊的:

    // From module: System Clock Control - SAM4E implementation
    #include <sysclk.h>

    同時,在文件夾config下,多了一個文件conf_clock.h。

    wps_clip_image-20415

  2. 配置

    conf_clock.h里保存的就是時鐘相關的配置了。這里面的注釋很清楚,配置方法也很簡單。并且在該文件的末尾也說明了默認情況下,配置的結果:

    // ===== Target frequency (System clock)
    // - XTAL frequency: 12MHz
    // - System clock source: PLLA
    // - System clock prescaler: 2 (divided by 2)
    // - PLLA source: XTAL
    // - PLLA output: XTAL * 16 / 1
    // - System clock: 12 * 16 / 1 / 2 = 96MHz

    為了使這個時鐘的配置生效,調用sysclk_init()即可:

    #include <asf.h>
    int main (void)
    {sysclk_init();while(1);
    }
  3. 編譯

    但是在編譯時,發現缺少頭文件board.h。這說明ASF Wizard在解決依賴時也有那么一點Bug。嘗試再手動添加一個模塊Generic board support,再編譯,發現又缺少頭文件ioport.h,繼續添加模塊IOPORT,編譯通過。IOPORT模塊依賴了System Clock Control模塊,可以將手動添加的這個模塊刪除,至此,又回到了新建項目時的模塊設置了。

    添加不必要的模塊會增加編譯的時間,也可能會增加生成的目標文件的大小。如果熟悉相關頭文件的作用,也可以修改asf.h中包含的頭文件。

    另外,也可以通過了解ASF中函數的實現,來學習相關的配置過程。

    wps_clip_image-29383

  4. 查看MCK的頻率

    如sysclk_init()一樣,ASF中實現了許多常用的功能。如我們需要查看MCK的頻率的話,也很簡單:

    volatile uint32_t freq;
    freq = SystemCoreClock; /*  4 000 000 *//* 這個函數是根據conf_clock.h中宏的定義來計算的。 即是調用sysclk_init()后MCK的值 */
    freq = sysclk_get_cpu_hz(); /* 96 000 000 */sysclk_init();/* 調用sysclk_init()后會自動修改這個變量 */
    freq = SystemCoreClock; /* 96 000 000 */

?

三、 LCD背光控制器

wps_clip_image-15044

開發板使用的LCD背光控制器是AAT31系列的。同時PC13連接的是它的使能、控制引腳。

另外,假設我們不知道這個背光控制器的亮度控制方法是向EN/SET引腳發送N個脈沖波,那該怎么使用這個控制器呢?RTFM?找它的芯片手冊當然是一個能夠深入了解它的方法,但假如我們的目標僅僅是能用就好,又或是使用起來太過麻煩呢?

嗯,我們這次學的就是ASF。

  1. 添加模塊

    在ASF Wizard中添加Display – AAT31XX Backlight Controller模塊。添加后項目里多了個頭文件conf_at31xx.h,這個頭文件主要的作用就是在未定義EN/SET引腳的接線時,對其進行定義(在sam4e_ek.h這個文件中已經做好相關的定義了)。同時asf.h中也包含了相關的頭文件了。

  2. ASF中對組件進行初始化

    使用背光控制器之前,需要進行相關配置。這個工作可以手動完成,也可以使用ASF完成。

    conf_board.h文件里,可以指定好一系列需要配置的組件。然后在執行board_init()函數時,就可以根據這些宏的定義執行相應的初始化工作。這個頭文件里已經通過注釋說明了配置USART等引腳時,宏是如何定義的,但是卻不知道如何背光組件相關的定義。

    查看board_init()的實現,可以發現以下幾句:

    #ifdef CONF_BOARD_AAT3155
    /* Configure Backlight control pin */
    ioport_set_pin_dir(BOARD_AAT31XX_SET_GPIO, IOPORT_DIR_OUTPUT);
    #endif

    通過這里就可以得到需要的宏的名字,以及ASF初始化時具體的工作了。現在就在conf_board.h中,加上相應的定義就好了:

    /* Configure Backlight control pin */
    #define CONF_BOARD_AAT3155

    另外,aat31xx.h頭文件也需要這個宏的聲明以判斷具體的控制器的型號。

    最后不要忘記調用board_init( )函數。

  3. API的使用

    可以查看相應的API的文檔,以了解ASF提供的API。

    wps_clip_image-20800

    更直接的方法是閱讀相應的頭文件(aat31xx.h),這里面可能會有一些文檔中未提到的部分。如以下幾個宏就未在API文檔中說明:

    #define AAT31XX_MIN_BACKLIGHT_LEVEL 1
    #define AAT31XX_AVG_BACKLIGHT_LEVEL 8
    #define AAT31XX_MAX_BACKLIGHT_LEVEL 16

    現在,就可以很方便地使用背光控制器了。如以下代碼將配置背光為最大亮度:

    aat31xx_set_backlight(AAT31XX_MAX_BACKLIGHT_LEVEL);

?

四、 LCD控制器

開發板使用的LCD控制器是ILI93xx系列的。ASF提供的模塊為Display – ILI93xx LCD Controller。conf_board.h中,相應的宏聲明為CONF_BOARD_ILI93XX。

board_init( )中初始化的工作僅有配置GPIO引腳的復用,但是還有別的工作需要完成。所以LCD暫時還不能用。剩下的部分在下一次說明。

轉載于:https://www.cnblogs.com/h46incon/p/3453137.html

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

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

相關文章

《HTML5與CSS3實戰指南》——2.2 基本的HTML5模板

本節書摘來自異步社區《HTML5與CSS3實戰指南》一書中的第2章&#xff0c;第2.2節,作者&#xff1a; 【美】Estelle Weyl , Louis Lazaris , Alexis Goldstein 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.2 基本的HTML5模板 在您學習HTML5和新技術時&#xff0c;您…

c# Message const

typeTMsg packed recordhwnd: HWND; //窗口句柄message: UINT;//消息常量標識符wParam: WPARAM ;// 32位消息的特定附加信息lParam: LPARAM ;// 32位消息的特定附加信息time: DWORD;//消息創建時的時間pt: TPoint; //消息創建時的鼠標位置end ; 消息中有什么&#xff1f;是否覺…

OpenCV坐標體系的初步認識

實驗基礎本次實驗通過一個簡短的例子&#xff0c;主要來說明下面4個問題&#xff1a; 1. 坐標體系中的零點坐標為圖片的左上角&#xff0c;X軸為圖像矩形的上面那條水平線&#xff1b;Y軸為圖像矩形左邊的那條垂直線。該坐標體系在諸如結構體Mat,Rect,Point中都是適用的。&…

python爬取知乎live_Python爬蟲 - 簡單抓取百度指數

前言有點忙&#xff0c;沒空寫東西&#xff0c;這是之前寫的&#xff0c;加了些配圖而已 這次要爬的網站是百度指數 正文 一、分析 打開網站(百度指數)&#xff0c;呈現出來是這樣的 如果搜索的話就需要登陸了&#xff0c;如果沒有什么特別頻繁的請求的話&#xff0c;直接登陸復…

在Visual Studio上開發Node.js程序

在Visual Studio上開發Node.js程序 原文:在Visual Studio上開發Node.js程序【題外話】 最近準備用Node.js做些東西&#xff0c;于是找找看能否有Visual Studio上的插件以方便開發。結果還真找到了一個&#xff0c;來自微軟的Node.js Tools for Visual Studio&#xff08;NTVS&a…

Oracle ASM 翻譯系列第十一彈:高級知識 Offline or drop?

Offline or drop? 當一個ASM磁盤不可用時&#xff0c;ASM會把它從磁盤組里移除&#xff0c;對嗎&#xff1f;要看情況&#xff0c;通常取決于ASM版本和磁盤組的冗余級別。因為一個external冗余的磁盤組會直接被dismount&#xff0c;所以主要關注normal和high冗余磁盤組的情況。…

net與樹莓派的情緣-安裝與卸載MySql(五)

安裝MySql sudo apt-get install mysql-server 刪除 mysql sudo apt-get autoremove --purge mysql-server-5.0sudo apt-get remove mysql-serversudo apt-get autoremove mysql-serversudo apt-get remove mysql-common //這個很重要上面的其實有一些是多余的。 清理殘留數據 …

mpls工作原理通俗解釋_用這兩種方法向最終用戶解釋NLP模型的工作原理還是不錯的...

點擊上方關注&#xff0c;All in AI中國上周&#xff0c;我看了一個關于“NLP的實踐特性工程”的演講。主要是關于LIME和SHAP在文本分類可解釋性方面是如何工作的。我決定寫一篇關于它們的文章&#xff0c;因為它們很有趣、易于使用&#xff0c;而且視覺上很吸引人。所有的機器…

向往2的年代

1. JDBC 對插入大量數據如何處理&#xff1f; 2. JAVA反射的使用&#xff0c;如何獲取一個java類的某個方法&#xff1f; 3. 數據庫連接池&#xff08;優化&#xff09; 4. 分布式事務管理轉載于:https://www.cnblogs.com/dragonflyyi/p/3564843.html

C++ limits頭文件的用法(numeric_limits)

初學C的時候&#xff0c;對這個模板很陌生&#xff0c;不知道它到底是做什么用的&#xff0c;今天拿起《C標準程序庫》&#xff0c;出現了它的討論&#xff0c;所以決定好好研究一番。 1. numeric_limits是什么&#xff1f; &#xff08;A&#xff09;《C標準程序庫》&#xff…

三層架構——配置文件

1、配置文件是什么&#xff1f; 配置文件是隨安裝程序一起被安裝到計算機上的文件&#xff0c;里面存放著安裝好的應用程序執行時所須要的參數。 應用程序配置文件是標準的XML文件&#xff0c;XML標記和屬性是區分大寫和小寫的。它能夠按須要更改&#xff0c;開發者可使用配置文…

《嵌入式系統開發之道——菜鳥成長日志與項目經理的私房菜》——02-04項目范圍(Scope)管理...

本節書摘來異步社區《嵌入式系統開發之道——菜鳥成長日志與項目經理的私房菜》一書中的第2章&#xff0c;第2.4節&#xff0c;作者&#xff1a;邱毅凌&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 02-04項目范圍&#xff08;Scope&#xff09;管理 嵌入式…

flex(入門)之timer的使用,鍵盤,鼠標的監聽

package {import flash.display.Shape;import flash.display.Sprite;import flash.events.Event;import flash.events.KeyboardEvent;import flash.events.MouseEvent;import flash.events.TimerEvent;import flash.utils.Timer;import mx.controls.Label;//窗體大小&#xff0…

python 線程超時設置_python 條件變量Condition(36)

文章首發微信公眾號&#xff0c;微信搜索&#xff1a;猿說python對于線程與線程之間的交互我們在前面的文章已經介紹了 python 互斥鎖Lock / python事件Event , 今天繼續介紹一種線程交互方式 – 線程條件變量Condition.一.線程條件變量Condition相關函數介紹acquire() — 線程…

MsWord 操作總結

轉自&#xff08;http://www.cnblogs.com/eye-like/p/4121219.html&#xff09; Msdn上的word操作api&#xff08;不過只有英文版&#xff0c;英文差的先閃過&#xff09; Word2007的API&#xff1a;http://msdn.microsoft.com/en-us/library/bb257531(voffice.12).aspxWord201…

fwrite,fread and fprintf,fscanf的一些使用體會

這周一直在完成一個任務&#xff0c;就是將訓練出的多個model寫成一個model。其中我們使用了c語言的讀寫方法&#xff0c;搞了一星期&#xff0c; 挖了很多坑&#xff0c;最終都鏟平了。下面列舉出若干有用的知識。 1.fwrite,fread VS fprintf,fscanf的區別 fwrite,fread 讀寫…

《第一桶金怎么賺——淘寶開店創業致富一冊通》一一1.4 淘寶開店創業的流程...

本節書摘來自異步社區出版社《第一桶金怎么賺——淘寶開店創業致富一冊通》一書中的第1章&#xff0c;第1.4節&#xff0c;作者&#xff1a;葛存山&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.4 淘寶開店創業的流程 第一桶金怎么賺——淘寶開店創業致…

檢測虛擬機代碼總匯(更新中)

檢測虛擬機代碼 1 004092D0 /. 55 push ebp2 004092D1 |. 8BEC mov ebp,esp3 004092D3 |. 51 push ecx4 004092D4 |. 53 push ebx5 004092D5 |. 68 1D934000 push 0040931D 6 004092DA |. 64:FF35…

兩數之和 python_同一屏幕播放兩個視頻 視頻左右兩個畫面或視頻上下兩個畫面如何制作...

咱們在網上經常可以看到一些視頻畫面是可以在同一屏幕播放兩個視頻&#xff0c;有的是視頻左右兩個畫面或視頻上下兩個畫面這些是如何制作的呢&#xff0c;其實熟悉視頻編輯軟件的網友應該會比較了解這些操作&#xff0c;好嘞&#xff0c;來&#xff0c;現在就讓小編來演示一下…

dlib人臉特征點對齊

前面我們介紹了使用dlib進行人臉檢測&#xff0c;下面我們給出如何使用dlib進行人臉特征點檢測。我們直接貼出代碼。我們的代碼包括如下幾部分功能&#xff1a; 檢測單張圖片檢測一個視頻檢測一個camera 先給出代碼&#xff1a; #include <dlib/image_processing/frontal_…