国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 1054|回復: 0
打印 上一主題 下一主題

使用迅為IMX6ULL開發板第一個匯編實驗(一)

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2020-6-17 13:41:47 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
通過第五章我們對 ARM 匯編語法有了初步的認識,在本章我們開始使用會念編寫我們的第一個匯編實
驗,在開發版的額眾多外設里面,原理最簡單,最適合初學者入門的就是 gpio 的驅動,在我們的開發板上
板載了一個 led 發光二極管,他的實現原理就是通過 gpio 來控制 led 的亮滅(控制 gpio 輸出高低電平)。
9 91 .1  i.MX6ULL  GPIO 分析 分析
i.MX6 ULL 終結者開發板使用的 cpu I.MX6ULL,該 cpu 的參考手冊我們放到了光盤目錄的“i.MX6UL 終結
者光盤資料\03_開發板硬件資料\02_芯片資料\1I.MX6ULL 芯片資料.zip ”壓縮包里面,如下圖所示:
打開該手冊的 32 章節“Chapter 32 IOMUX Controller (IOMUXC)”,我們看到 32 章節的目錄如下圖所示:
圖中的IOMUXC_SW_MUC_CTL_PAD_GPIO1_IO00”就是 GPIO 的命名。其命名格式是
IOMUXC_SW_MUC_CTL_PAD_XX_XX”,其中的 XX_XX 就是 GPIO 的命名。例如:JTAG_MODGPIO1_IO00
UART4_TX_DATA 等。I.MX6ULL GPIO 命名是根據 IO 所擁有的功能來命名的,比如我們看到 GPIO1_IO00
就可以知道這個是 GPIO 功能,看到 UART4_TX_DATA 就知道這個是串口 4 的發送功能。在參考手冊的 32
節列出了 i.MX6 ULL 的所有 IO 引腳,我們可以看到具有 GPIO 功能的引腳只有“GPIO1_IO00~GPIO1_IO09
10 GPIO,實際上 i.MX6 ULL IO 口都是具有復用功能的(一個 IO 口可以配置成好幾種功能,如果不
做配置,會有一種默認的功能)。下面我們看看 i.MX6 ULL IO 引腳復用功能。
我們以IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00”這個 IO 為例,打開手冊的 32.6.71568 頁)如下圖所示
上圖可以看到該 IO 對應的配置寄存器“SW_MUX_CTL_PAD_GPIO1_IO00”,寄存器地址是 0X20E005C
寄存器為 32 位,其中的 bit0-bit3MUX_MODE)這四位是設置 IO 引腳復用功能的。從表中我們可以看到
GPIO1_IO00 9 種復用功能,分別對應 ALT0-ALT8,其中 ALT5 就是作為 GPIO1_IO00,如下圖所示:

從上圖中我們可以看到 GPIO1_IO00 這個引腳還可以配置成 ENET2_REF_CLK2I2C2_SDA 等功能,這就是 IO
的復用功能。
下面我們再來看下IOMUXC_SW_MUX_CTL_PAD_UART4_TX_DATA”這個 IO 引腳。這個引腳的描述在 32.6.29
章節(1590 頁),如下圖所示:
從上圖可以看到該引腳可以復用成 7 種不同的模式。其中 ALT5(0101)表示可以復用為 GPIO1_IO28。
所以我們可以看到 i.MX6 ULL 的 GPIO 不止 GPIO1_IO00-GPIO1_IO09 這 10 個,其它的 IO 也可以復用為 GPIO。
在第四章節我們可以看到 i.MX6 ULL 的 GPIO 一共有 5 組:GPIO1、GPIO2、GPIO3、GPIO4、GPIO5,其中 GPIO1
有 32 個 IO(IO0-IO31),GPIO2 有 22 個 IO(IO0-IO21),GPIO3 有 29 個 IO(IO0-IO28),GPIO4 有 29個 IO(IO0-IO28),GPIO5 有 12 個 IO(IO0-IO11),這樣 i.MX6 ULL 一共有 124 個 GPIO。如果我們想要
查看每個 IO 能復用成什么功能,可以查看第 4 章,如果我們要設置某個 IO 的功能,需要查看第 32 章。
9 92 .2  IO 引腳配置 引腳配置
IO 引腳的配置我們需要參考第 32 章節,在 9.1 章節我們看到每個 IO 都有一個“SW_MUX_CTL_PAD_XX_XX”
的寄存器,例如 SW_MUX_CTL_PAD_GPIO1_IO00。該寄存器在 6.1 章節我們介紹了,主要是用來配置 IO 引腳
的模式。然后我們在該章節看到還有一個“SW_PAD_CTL_PAD_XX_XX”的寄存器,例如
“SW_PAD_CTL_PAD_GPIO1_IO00”寄存器,如下圖所示:

從上圖可以看到 SW_PAD_CTL_PAD_GPIO1_IO00 寄存器的地址是 0X20E02E8,他也是一個 32 位的寄存器,我
們可以看到改寄存器按照位劃分成了幾種功能設置,如下:
HYS(bit16):用來使能遲滯比較器,當 IO 作為輸入功能的時候有效,用于設置輸入接收器的施密特觸發
器是否使能。如果需要對輸入波形進行整形的話可以使能此位。此位為 0 的時候禁止遲滯比較器,為 1 的
時候使能遲滯比較器。PUS(bit15-bit14)用來設置上下拉電阻的。
PUE(bit13)當 IO 作為輸入的時候,這個位用來設置 IO 使用上下拉還是狀態保持器。狀態保持器在 IO 作
為輸入的時候才有用,當外部電路斷電以后此 IO 口可以保持住以前的狀態。
PKE(bit12)用來使能或者禁止上下拉/狀態保持器功能。
ODE(bit11)IO 作為輸出的時候,此位用來禁止或者使能開路輸出。
SPEED(bit7-bit6)當 IO 用作輸出的時候,此位用來設置 IO 速度。
DSE(bit5-bit3)當 IO 用作輸出的時候用來設置 IO 的驅動能力。
SRE(bit0)設置壓擺率。
9 93 .3  GPIO 配置 配置
在 9.1 和 9.2 章節我們介紹了這兩個寄存器“SW_MUX_CTL_PAD_XX_XX”和“SW_PAD_CTL_PAD_XX_XX”
用來配置 IO 引腳,在本章我們來學習一下 GPIO 功能的配置(GPIO 屬于 IO 引腳中的一種復用功能)。比如
GPIO1_IO00 這個 IO 可以復用為 I2C2_SCL、ENET1_REF_CLK1、GPIO1_IO00、WDOG3_WDOG_B 等 9 種復用功能,
GPIO1_IO00 只是其中的一種,具體配置成哪種復用功能,需要看下我們的硬件設計中這個 IO 是作為哪種功
能來設計的。如果我們把該引腳用來控制 LED 發光二極管,那我們的程序就要把這個 IO 配置成 GPIO 模式,
然后我們還需要對 GPIO 的功能進行配置,我們可以參考手冊的第 28 章“General Purpose Input/Output
(GPIO)”。在該章節我們可以看到 GPIO 的結構如下圖所示所示:
在上圖中我們可以看到兩個地方用紅色方框標注了(1、2),其中 1 處里面有兩個寄存器,這就是我
們 6.2 章節介紹的配置 IO 復用和 IO 功能屬性的寄存器。2 處表示當 IO 作為 GPIO 使用的時候,需要配置的
寄存器(共有 8 個),分別是:GPIO.DR、GPIO.GDIR、GPIO.PSR、GPIO.ICR1、GPIO.ICR2、GPIO.EDGE_SEL、
GPIO.IMR、GPIO.ISR,前面 6.2 章節我們介紹了 i.MX6 ULL 一共有 5 組 GPIO,每組 GPIO 分別有這 8 個寄存
器,下面我們分別看下這些寄存器:
首先是 GPIOx_DR 寄存器,如下圖所示:
此寄存器是數據寄存器,32 位,每一位對應一個 GPIO,當 GPIO 配置成輸出以后,向對應的位寫 1,GPIO
就會輸出高電平,寫 0,GPIO 就會輸出低電平。如果 GPIO 設置成輸入,那讀取這個寄存器對應的位,就可
以獲取到對應 GPIO 的狀態(0 或 1)。
然后是 GPIOx_GDIR 寄存器,如下圖所示:
該寄存器也是 32 位的,每一位對應一個 GPIO,該寄存器是用來設置 GPIO 是輸入還是輸出的。(對應
的位設置成 0,對應的 GPIO 設置成輸入模式;對應的位設置成 1,對應的 GPIO 就配置成輸出模式了)。
然后是 GPIOx_PSR 寄存器,如圖 6.3.4 所示:
該寄存器也是 32 位的,每一位對應一個 GPIO,該寄存器是用來讀取對應 GPIO 的狀態(高低電平)。
然后是 GPIOx_ICR1 寄存器,如下圖所示:
該寄存器是中斷控制寄存器,每組 GPIO 最多有 32 個 GPIO,該寄存器用來配置低 16 個 GPIO,此寄存
器是 32 位的,每兩位表示一個 GPIO,這兩位用來配置中斷的觸發方式:
00 低電平出發
01 高電平觸發
10 上升沿觸發
11 下降沿觸發
以 GPIO1_IO3 為例,如果設置成高電平觸發,GPIO1.ICR1=1<<6。
然后是 GPIOx_ICR2 寄存器,如下圖所示:
該寄存器也是中斷控制寄存器,每組 GPIO 最多有 32 個 GPIO,該寄存器用來配置高 16 個 GPIO,此寄
存器是 32 位的,每兩位表示一個 GPIO,這兩位用來配置中斷的觸發方式:
00 低電平出發
01 高電平觸發
10 上升沿觸發
11 下降沿觸發
以 GPIO1_IO7 為例,如果設置成高電平觸發,GPIO1.ICR1=1<<2。
然后是 GPIOx_IMR 寄存器,如下圖所示:
該寄存器是中斷屏蔽寄存器,每一位對應一個 GPIO,如果使能某個 GPIO 的中斷,那么設置這個寄存器
對應的位為 1 即可。如果禁止某個 GPIO 的中斷,那么設置這個寄存器的對應位為 0。
然后是 GPIOx_ISR 寄存器,如下圖所示:

該寄存器是中斷狀態寄存器,共有 32 位,每位對應一個 gpio,只要某個 GPIO 的中斷產生,那么對應
的位就會被置 1,我們可以通過讀取該寄存器來判斷 GPIO 的中斷是否產生了。當我們處理完中斷后,必須
要清除對應的中斷標志位(像該寄存器相應的位寫 1,就是清除中斷標志位)。
然后是 GPIOx_EDGE_SEL,如下圖所示:

該寄存器用來設置邊沿中斷,這個寄存器會覆蓋 ICR1 和 ICR2 的設置,同樣一個 GPIO 對應一位。相應
的位被置 1,那么就相當于設置了對應的 GPIO 是上升沿和下降沿(雙邊沿)觸發。
至此關于 GPIO 的所有寄存器我們就介紹完了。
其他部分關注:使用迅為IMX6ULL開發板第一個匯編實驗(二)更多內容關注公眾號:迅為電子
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲狠狠ady亚洲精品大秀 | 干干日日| 久久国产精品亚洲va麻豆 | 久久久久久久国产视频 | 色视频网站在线观看 | 搞黄网站免费观看 | 国产91精品黄网在线观看 | 日本人的色道免费网站 | a久久久久一级毛片护士免费 | 一级特级女人18毛片免费视频 | 国内精品自在自线2020 | 明星大侦探第四季免费可投屏 | 九九手机视频 | 97国内免费久久久久久久久久 | 麻豆视频网址 | 亚洲国产天堂久久综合图区 | swag国产在线| 日本高清中文字幕一区二区三区 | 99热官网 | 亚洲视频在线观看网站 | 国产精品黄网站 | 精品国产91在线网 | 亚洲黄色一级毛片 | 高清不卡一区二区 | 国产精品久久久久秋霞影视 | 国产成人午夜性a一级毛片 国产成人午夜视频 | 国产亚洲福利一区二区免费看 | 欧美成人免费全网站大片 | 成人三级视频在线观看 | 日本在线观看免费高清 | 又黄又爽一线毛片免费观看 | 在线观看视频国产 | 精品视频麻豆网站 | 久久久这里只有精品加勒比 | 国产一区系列在线观看 | 精品亚洲欧美中文字幕在线看 | 一区二区三区高清视频在线观看 | 九九在线精品 | 精品国产一区二区三区免费 | 精品日韩一区二区三区视频 | 国产精品久久久久尤物 |