1. 程式人生 > >EFM32-筆記-IO操作

EFM32-筆記-IO操作

 GPIO->P[4].DOUT共有16位,因此需要使用一個0xFFFF來表示
2.向GPIO_Px_DOUTSET的對應位上寫1,就可以將該位設定為高電平。
3.向GPIO_Px_DOUTCLR的對應位上寫1,就可以將該位設定為低電平。
4.向GPIO_Px_DOUTTGL的對應位上寫1,就可以將該位的電平反轉。
對GPIO_Px_DOUT進行讀取,就可以獲取各個位的電平資訊,因此可以使用GPIO->P[4].DOUT^=0x000C;來反轉PE2和PE3兩個IO的電平,不過還是建議用方法4來反轉電平,因為速度更快;而對GPIO_Px_DOUTSET、GPIO_Px_DOUTCLR、GPIO_Px_DOUTTGL讀取,始終讀到的都是0。

GPIO_Px_DIN暫存器。無論該IO口被設定為輸入還是輸出,讀取DIN暫存器,都可以得到該IO口當前的電平狀態。系統之使用DIN暫存器的前16位,因為每一個Px只有16個IO口。

GPIO_Px_MODEL, GPIO_Px_MODEH, GPIO_Px_CTRL,GPIO_Px_PINLOCKN,GPIO_EXTIPSELL,GPIO_EXTIPSELH,GPIO_INSENSE  andGPIO_ROUTE這些暫存器都可以鎖定,只需要向GPIO_LOCK暫存器寫入不等於0xA534的數。如果向GPIO_LOCK寫入0xA534,將會解鎖。
對於每一組的每一個IO口的這些這些暫存器,都可以單獨的鎖定,只需要將GPIO_Px_PINLOCKN(16位配置有效)相應的位寫0即可。在系統啟動的時候,這些位都被置1,也就是每一組的GPIO_Px_PINLOCKN均為0xffff。

另外對GPIO操作之前,要首先使能它的時鐘。GPIO使用的HFPERCLK,它本身在reset的時候預設為使能狀態的(也可以在後期關閉,以進一步節省能耗)。還要在HFPERCLKEN0的相關位進行設定,使得GPIO能夠使用HFPERCLK,也就是他的第13位,具體為0x2000的位置。然後就可以對GPIO進行各方面的操作。在操作完成之後,如果確定不再使用GPIO的功能可以清空該位,如果在某些特殊的應用裡面,確定不使用例如AD、DA、timer、uart等常見功能的話,可以進一步關閉HFPERCLK(HFPERCLKDIV暫存器的第8位清零),以節省更多的電量。
對這些CMU暫存器進行操作的時候,使用語句形如:CMU->HFPERCLKEN0 =0x2000;


[疑問]在對GPIO控制之前,需要首先設定相應的時鐘,即前面要加入CMU_ClockEnable(cmuClock_HFPER,true);CMU_ClockEnable(cmuClock_GPIO,true);這兩行。實際上只新增第二行即可。這讓我感到迷茫。對於IO操作的時候,難道IO口還要加入時鐘的支援(雖然資料手冊上說:高頻外設時鐘有HFCLK分頻得到,用來驅動高頻外設,如GPIO、ADC等)。難道GPIO電平的設定以及反轉都需要該時鐘的支援?
經過試驗檢視確實是這樣的,在沒有加入CMU_ClockEnable(cmuClock_GPIO,true);這句話時,對IO口所有的操作都沒有發生作用,即使主程式已經執行了對IO口的操作,IO口的那些暫存器(MODEL等)都沒有發生改變,甚至是PINLOCKN都處在0的狀態(鎖定)。這說明外部高頻時鐘沒有起作用的時候,IO根本就沒有進行初始化。
然後我試驗了這樣的操作,也就是先對IO口進行操作,然後在開啟外部高頻時鐘,發現時鐘被開啟後,IO口進行了初始化(PINLOCKN已經變成了0xffff),但是原來對IO口進行的所有的操作語句都沒有起作用。這說明所有對GPIO進行的操作都必須在外部高頻時鐘下進行。

相關推薦

EFM32-筆記-IO操作

 GPIO->P[4].DOUT共有16位,因此需要使用一個0xFFFF來表示 2.向GPIO_Px_DOUTSET的對應位上寫1,就可以將該位設定為高電平。 3.向GPIO_Px_DOUTCLR的對應位上寫1,就可以將該位設定為低電平。 4.向GPIO_Px_DOUTTGL的對應位上寫1,就可以將該位

Qt 筆記:Qt中的IO操作

Qt中IO操作的處理方式 -Qt通過統一的介面簡化了檔案與外部裝置的操作方式 -Qt中的檔案被看做一種特殊的外部裝置 -Qt中的檔案操作與外部裝置的操作相同 IO操作中的關鍵函式介面 -開啟裝置:bool open(OpenMode mode) -讀取資料:QBy

JAVA io筆記02 操作目錄,遍歷檔案,資料夾

package FileText; import java.io.File; //操作目錄 //mkdir() 建立目錄,必須保證父目錄存在,如果父目錄不存在,建立失敗 //mkdirs() 建立目錄,如果父目錄不存在,直接建立父目錄 //list() 輸出當前路徑下檔名 //listFil

樹莓派學習筆記——使用檔案IO操作GPIO SysFs方式

0 前言    本文描述如果通過檔案IO sysfs方式控制樹莓派 GPIO埠。通過sysfs方式控制GPIO,先訪問/sys/class/gpio目錄,向export檔案寫入GPIO編號,使得該GPIO的操作介面從核心空間暴露到使用者空間,GPIO的操作介面包括direction和value等,direct

文件IO操作學習筆記

reader contains nta 用戶輸入 main bytes NPU ava 關閉流 練習一:高效字節輸出流寫出字節數據 描述:利用高效字節輸出流往C盤下的d.txt文件輸出一個字節數。答案操作步驟: 創建字節輸出流對象關聯文件路徑 利用字節輸出流對象創建高效字

006 異步IO操作

lap process nic 出行 必須 eid const exc 功能 # 異步IO操作   CreateFile 使用     VS2015 新建win32 控制臺應用程序 WindowsFileDemo       win32控制臺寫窗口程序     需要加入頭文

node.js零基礎詳細教程(4):node.js事件機制、node異步IO操作

nod server nbsp node i++ 兩個 con 錯誤 定時器 第四章 建議學習時間3小時 課程共10章 學習方式:詳細閱讀,並手動實現相關代碼 學習目標:此教程將教會大家 安裝Node、搭建服務器、express、mysql、mongodb、編寫後臺業務邏

MongoDB Java 學習筆記 (Java操作MongoDB)

sdn 學習筆記 style god java 學習 筆記 b- 學習 .net 原文地址:http://blog.csdn.net/ererfei/article/details/50857103 參考文檔:http://www.runoob.com/mongodb/mo

openssl之BIO系列之6---BIO的IO操作函數

長度 沒有 ons lin mail crypto 可能 說明文 作者 BIO的IO操作函數 ---依據openssl doc/crypto/bio/bio_read.pod翻譯和自己的理解寫成 (作者:DragonKing Mail:[ema

python學習筆記——列表操作

參數 統計 一個 del blog count insert lang python列表 python列表操作——增 append:追加一條數據到列表的最後 name = ["Zhangsan","XiongDa","Lisi"] name.append("wangwu"

20170831 - A - Java IO操作

throw 發生 輸入 連接 char gbk erro 二進制 utf 1 當需要將對象轉化為字節用什麽?對象流Person p = new Person("蒼老師",18,"男" ,list);System.out.println(p); FileOutputStre

JS入門筆記+基本操作(剛接觸JS,很多筆記就是看到啥寫啥的,希望多多包涵)。

外部 friend mage fff pen scrip 表示 num 很好 1.註釋: html的註釋:<!--我是註釋--> CSS的註釋:/*我是註釋*/ JS的註釋://我是註釋 2.變量: 變量要先聲明再賦值,如下: var mychar; myc

《python編程-從入門到實踐》筆記3_操作列表

value 統計 賦值 https 而不是 包含 超過 將不 c99 遍歷整個列表 for循環 例子:lists=[‘A‘,‘B‘,‘C‘,‘D‘] for list in lists: print(list) 結果:A

Linux系統編程:簡單文件IO操作

存在 作用域 字節 %d 進程 sta strong class 參數 使用Linux的文件API,經常看見一個東西,叫做文件描述符. 什麽是文件描述符? (1)文件描述符其實實質是一個數字,這個數字在一個進程中表示一個特定的含義,當我們open打開一個文件時,操作系統

Java中的IO操作 字符流:FileReader和 FileWriter

void contain desc method eno exceptio contains args http FileReader和 FileWriter 讀寫字符串 1 package object.io; 2 3 import java.io.Buff

java IO操作:FileInputStream,FileOutputStream,FileReader,FileWriter實例

tput stream com -h port pri exc public 父類 FileInputStream <span style="font-family:Verdana;">import java.io.File; impo

Hadoop IO操作之基於文件的數據結構

定時任務 二進制 包括 大數據文件 組成 key 上傳 刪除 大小   HDFS和MR主要針對大數據文件來設計,在小文件處理上效率低.解決方法是選擇一個容器,將這些小文件包裝起來,將整個文件作為一條記錄,可以獲取更高效率的儲存和處理,避免多次打開關閉流耗費計算資源.hdfs

Hadoop IO操作之序列化

數據 new 前言 一個 就是 clas 之間 其中 ava 前言:為什麽Hadoop基本類型還要定義序列化?   1、Hadoop在集群之間通信或者RPC調用時需要序列化,而且要求序列化要快,且體積要小,占用帶寬小。   2、java的序列化機制占用大量計算開銷,且序列化

【Python】學習筆記5-操作mysql數據庫pymysql

rod bsp phone utf8 charset delet 建立 包含 hone import pymysql#其他數據庫,比如oracle 模塊是pyoracle#1、鏈接數據庫mysq ip 端口號 密碼 賬戶 數據庫#2、建立遊標#3、執行sql#4、獲取結果#

Hadoop IO操作之SequenceFile 和 MapFile

直接 修改 head ati rec key 情況 接口 用戶 一、SquenceFile   文件中每條記錄是可序列化,可持久化的鍵值對,提供相應的讀寫器和排序器,寫操作根據壓縮的類型分為3種。   ---Write 無壓縮寫數據  ---RecordCompressWr