国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Linux驅(qū)動開發(fā):匯編LED燈實(shí)驗(yàn)(I.MX6UL芯片)

張春雷 / 4061人閱讀

摘要:壓擺率就是電平跳變所需要的時間,比如從到需要多少時間,時間越小波形就越陡,說明壓擺率越高反之,時間越多波形就越緩,壓擺率就越低。

Linux驅(qū)動開發(fā):匯編LED燈實(shí)驗(yàn)(I.MX6UL芯片)

一、I.MX6UL的GPIO原理

研究IMX6UL GPIO 原理前先回憶一下STM32GPIO配置流程,其主要分為4個步驟:

  1. 使能指定 GPIO 的時鐘。
  2. 初始化 GPIO,如輸出功能、上拉、速度等
  3. 是否開啟 IO 復(fù)用將IO作為其它外設(shè) 引腳使用
  4. 設(shè)置初始輸出的電平高低

下面我們學(xué)習(xí) IMX6UL 的 GPIO 原理也是按照這樣的流程來學(xué)習(xí)

1.1 I.MX6UL IO命名

學(xué)習(xí)前先了解一下 IMX 的命名方式,在以前學(xué)STM32時他的 IO 口是按照一組一組來命名的,如PA是一組,一組里面有16個 IO 口即 PA0-PA15;而在 IMX6UL里面命名方式則大不一樣,I.MX6UL 的 IO 主要分為兩類:SNVS 域IO和通用 IO

SNVC域 IO 命名: IOMUXC_SNVC_SW_MUX_CTL_PAD_XX_XX,后面的 XX_XX 就是 GPIO 命名, 比如:BOOT_MODE0 等等

通用 IO 命名: IOMUXC_SW_MUX_CTL_PAD_XX_XX,后面的 XX_XX 就是 GPIO 命名, 比如:GPIO1_IO01UART1_TX_DATAJTAG_MOD 等等

具體IO文檔可以參考 IMX6UL 官方文檔

1.2 I.MX6UL IO復(fù)用

IO 復(fù)用是通過一個寄存器來控制的,這里我以 IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00 為例子,翻閱手冊可以看到一個 IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO01 的32位寄存器,寄存器如下:

可以看到寄存器的地址為 20E_005CH 低5位用于模式控制分為 SION 和 MUX_MODE,其他的則是保留位

MUX_MODE 的0到3位對應(yīng)具體模式,具體有以下幾個:

MUX_MODE復(fù)用模式
0000ALT0 復(fù)用為 IIC2_SCL
0001ALT1 復(fù)用為 GPT1_CAPTURE1
0010ALT2 復(fù)用為 ANATOP_OTG1_ID
0011ALT3 復(fù)用為 ENET1_REF_CLK1
0100ALT4 復(fù)用為 MQS_RIGHT
0101ALT5 復(fù)用為 GPIO1_IO00
0110ALT6 復(fù)用為 ENET1_1588_EVENT0_IN
0111ALT7 復(fù)用為 SRC_SYSTEM_RESET
1000ALT8 復(fù)用為 WDOG3_WDOG_B

SION 的控制功能如下:

SION功能
0IO輸入路徑按照復(fù)用的模式來
1IO輸入路徑強(qiáng)制按照GPIO1——IO00來

以上就是 IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00 的復(fù)用寄存器一個簡單的介紹,不同的 IO 他的復(fù)用寄存器不完全相同,需要根據(jù)手冊具體去查詢

I.MX6U 的 GPIO 一共有 5 組:GPIO1、GPIO2、GPIO3、GPIO4 和 GPIO5, 其中 GPIO1 有 32 個 IO,GPIO2 有 22 個 IO,GPIO3 有 29 個 IO、GPIO4 有 29 個 IO,GPIO5 有 12 個 IO,一共有 124 個 GPIO

1.3 I.MX6UL IO配置

1.2 講述的是 IO 口的復(fù)用配置寄存器,但 IO 的具體工作配置還有另外一個寄存器進(jìn)行控制,繼續(xù)以 GPIO1 組的 IO00 為例子;具體 IO 工作配置寄存器由 IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO00 控制,該寄存器如下:

其不同位控制的 IO 配置功能不同,需要結(jié)合 IO 的工作原理圖來理解,上 IO 原理圖:

寄存器分析:

HYS(bit16): 對應(yīng)圖中 HYS,用來使能遲滯比較器,在 IO 輸入時有效,可以用來對輸入波形進(jìn)行處理,關(guān)于遲滯比較器可以看這篇文章 : 遲滯比較器HYS 為 0 的時候禁止遲滯比較器,為 1 的時候使能遲滯比較器

PUS(bit15:14): 圖中的 PUS,用來設(shè)置上下拉電阻的:

功能
00100k 下拉
0147k 上拉
10100k 上拉
1122k 上拉

PUE(bit13): 上圖沒有顯示,當(dāng) IO 作為輸入的時候,這個位用來設(shè)置 IO 是使用上下拉還是使用狀態(tài)保持器。為 0 的時候使用狀態(tài)保持器,當(dāng)為 1 的時候使用上下拉。

狀態(tài)保持器在 IO 作為輸入的時候才有用,當(dāng)外部電路斷電以后此 IO 口可以保持住之前狀態(tài)。

PKE(bit12): 對應(yīng)圖中的 PKE,此位用來使能或者禁止上下拉或者狀態(tài)保持器功能,為 0 時禁止上下拉/狀態(tài)保持器,為 1 時使能上下拉和狀態(tài)保持器。

ODE(bit11): 對應(yīng)圖中的 ODE,當(dāng) IO 作為輸出的時候,此位用來禁止或者使能開路輸出,此位為 0 的時候禁止開路輸出,當(dāng)此位為 1 的時候就使能開路輸出功能。

SPEED(bit7:6): 對應(yīng)圖中的 SPEED,當(dāng) IO 用作輸出的時候,此位用來設(shè)置 IO 速度

位設(shè)置速度
00低速 50M
01中速 100M
10中速 100M
11最大速度 200M

DSE(bit5:3): 對應(yīng)圖中 DSE,當(dāng) IO 用作輸出的時候用來設(shè)置 IO 的驅(qū)動能力, 總共有 8 個可選選項(xiàng),如表所示:

(3.3V 下 R0 是 260Ω,1.8V 下 R0 是 150Ω,接 DDR 的時候是 240Ω)

位設(shè)置速度
000輸出驅(qū)動關(guān)閉
001R0 ****
010R0/2
011R0/3
100R0/4
101R0/5
110R0/6
111R0/7

SRE(bit0): 對應(yīng)圖中的 SRE,設(shè)置壓擺率,當(dāng)此位為 0 的時候是低壓擺率,當(dāng)為 1 的時候是高壓擺率。

壓擺率就是 IO 電平跳變所需要的時間,比如從 0 到 1 需要多少時 間,時間越小波形就越陡,說明壓擺率越高;反之,時間越多波形就越緩,壓擺率就越低。高速信號壓擺率要高,速度快;而要考慮電磁兼容性的話壓擺率要低

壓擺率參考文章:運(yùn)放壓擺率

1.4 I.MX6UL GPIO配置

1.2 和 1.3 講了IO 的復(fù)用與功能寄存器配置,1.4 小節(jié)分析 IO 眾多復(fù)用里面的一種 GPIO 的具體配置

首先看一下 GPIO 的結(jié)構(gòu)圖:

結(jié)構(gòu)中可以看到 IOMUXC 里面有 SW_MUX_CTL_PAD_* 和 SW_PAD_CTL_PAD__* 兩個寄存器用于配置 IO;而多帶帶的 GPIO 配置則是另外 8 個 GPIO 自己的寄存器進(jìn)行配置;

這 8 個寄存器介紹如下:

首先看 GPIOx_DR 數(shù)據(jù)寄存器,由翻譯可以看到,DR 寄存器在 IO 的模式設(shè)置為 GPIO 且 GPIO 的輸入輸出方向確定好后,輸出狀態(tài)時 DR 寄存器里面的位可以控制 GPIO 的輸出值,輸入時則存儲輸入的狀態(tài)值,通過讀取可以獲取 GPIO 狀態(tài),比如當(dāng) GPIO1_IO00 引腳接地,那么 GPIO1.DR 的 bit0 就是 0

GPIOx_IR 方向寄存器,結(jié)構(gòu)如下:

GPIO_GDIR 作為方向控制,每個位指定了一位信號的方向,此寄存器用來設(shè)置某個 IO 的工作方向,是輸入還是輸出。同 樣的,每個 IO 對應(yīng)一個位,如果要設(shè)置 GPIO 為輸入的話就設(shè)置相應(yīng)的位為 0,如果要設(shè)置為輸出的話就設(shè)置為 1

PSR 寄存器: GPIO 的狀態(tài)寄存器


PSR 寄存器也是一個 GPIO 對應(yīng)一個位,讀取相應(yīng)的位即可獲取對應(yīng)的 GPIO 的狀態(tài),也就是 GPIO 的高低電平值,功能和輸入狀態(tài)下的 DR 寄存器一樣

ICR1和ICR2 是中斷控制寄存器, ICR1用于配置低16個GPIO, ICR2 用于配置高 16 個 GPIO,以 ICR1 為例子:寄存器結(jié)構(gòu)如下:

兩位一組控制一個 GPIO 的中斷,和 STM32 的中斷類似,每一組可配置的選線如下:

位設(shè)置速度
00低電平觸發(fā)
01高電平觸發(fā)
10上升沿觸發(fā)
11下降沿觸發(fā)

比如要設(shè)置 GPIO1_IO15 為上升沿觸發(fā)中斷,那么使用 GPIO1.ICR1=2<<30 就可以設(shè)置

IMR : 中斷屏蔽寄存器,一個 GPIO 對應(yīng)一個位,IMR 寄存器用來控制 GPIO 的中斷禁止和使能,1 對應(yīng)中斷使能,0 則是禁止

**ISR 是中斷狀態(tài)寄存器 ** :一個 GPIO 對應(yīng)一個位,只要某個 GPIO 的中斷發(fā)生,那么 ISR 中相應(yīng)的位就會被置 1,通過讀取值判斷中斷有沒有發(fā)生

注意:處理完中斷以后,必須清除中斷標(biāo)志位,清除方法就是向 ISR 中相應(yīng)的位寫 1 清零

EDGE_SEL 寄存器用來設(shè)置邊沿中斷,該寄存器會覆蓋 ICR1 和 ICR2 的設(shè)置,同樣是一 個 GPIO 對應(yīng)一個位。如果相應(yīng)的位被置 1,那么就相當(dāng)與設(shè)置了對應(yīng)的 GPIO 是上升沿和下降 沿(雙邊沿)觸發(fā),寄存器如下

1.5 I.MX6UL時鐘使能

I.MX6U 有復(fù)雜的時鐘系統(tǒng),每個外設(shè)的時鐘都可以獨(dú)立的使能或禁止,這樣可以關(guān)閉掉不使用的外設(shè)時鐘,起到 省電的目的,時鐘系統(tǒng)后面學(xué)習(xí)到在分析,當(dāng)前先研究 IO 時鐘如何使能

時鐘系統(tǒng)有關(guān)的模塊叫做 Clock Controller Module(CCM) ,其中控制時鐘使能的寄存器為CCM_CCGR0~CCM_CCGR6 這 7 個寄存器,這 7 個寄存器控制著 I.MX6U 的所有外設(shè)時鐘開關(guān),CCM_CCGR0 結(jié)構(gòu)體如圖:

每 2 位控制一個外設(shè)的時鐘,控制功能如下:

位設(shè)置時鐘控制
00所有模式下都關(guān)閉外設(shè)時鐘。
01只有在運(yùn)行模式下打開外設(shè)時鐘,等待模式和停止模式下均關(guān)閉外設(shè)時鐘。
10未使用(保留位)。
11除了停止模式以外,其他所有模式下時鐘都打開。

要使能對應(yīng)的時鐘只要置位對應(yīng)的時鐘控制位就行!

二、開發(fā)板原理圖

正點(diǎn)原子阿爾法LED燈原理圖如下:

LED0 接到了 GPIO_3 上,GPIO_3 就是 GPIO1_IO03

三、程序編寫

程序編寫按照下面的流程進(jìn)行編寫:

  1. 使能IO時鐘
  2. 設(shè)置IO復(fù)用功能
  3. 配置IO運(yùn)行功能
  4. 配置具體GPIO寄存器
  5. 設(shè)置輸入輸出
  • 使能IO時鐘

配置 CCM 的 CCGR0-6 寄存器,開啟所有時鐘

讀取立即數(shù)到 R0 、 R1,通過寄存器間接尋址將 R1 的值賦值給目標(biāo)地址

ldr r0, =0X020C4068 	# CCGR0ldr r1, =0XFFFFFFFF  str r1, [r0]		ldr r0, =0X020C406C  	# CCGR1str r1, [r0]ldr r0, =0X020C4070  	# CCGR2str r1, [r0]ldr r0, =0X020C4074  	# CCGR3str r1, [r0]ldr r0, =0X020C4078  	# CCGR4str r1, [r0]ldr r0, =0X020C407C  	# CCGR5str r1, [r0]ldr r0, =0X020C4080  	# CCGR6str r1, [r0]
  • 設(shè)置IO復(fù)用功能
ldr r0, =0X020E0068	# 將寄存器 SW_MUX_GPIO1_IO03_BASE 地址加載到 r0 中l(wèi)dr r1, =0X5		str r1,[r0]		# 設(shè)置寄存器 SW_MUX_GPIO1_IO03_BASE 的 MODE 為5
  • 配置IO運(yùn)行功能
# 模式配置# bit 16:0 HYS關(guān)閉# bit [15:14]: 00 默認(rèn)下拉# bit [13]: 0 kepper功能# bit [12]: 1 pull/keeper使能# bit [11]: 0 關(guān)閉開路輸出# bit [7:6]: 10 速度100Mhz# bit [5:3]: 110 R0/6驅(qū)動能力# bit [0]: 0 低轉(zhuǎn)換率# 寄存器 SW_PAD_GPIO1_IO03_BASEldr r0, =0X020E02F4	ldr r1, =0X10B0str r1,[r0]
  • 配置具體GPIO寄存器
# 寄存器GPIO1_GDIRldr r0, =0X0209C004# 配置為輸出模式ldr r1, =0X0000008		str r1,[r0]
  • 設(shè)置GPIO輸入輸出值
# 寄存器GPIO1_DRldr r0, =0X0209C000# 輸出低電平ldr r1, =0		str r1,[r0]

在開頭添加一個全局入口聲明代碼

.global _start_start# 需要運(yùn)行的代碼

結(jié)尾加一個死循環(huán),防止程序結(jié)束

loop:	b loop 	

四、編譯下載

編譯使用 makefile 進(jìn)行編譯鏈接得到 .elf 文件,之后轉(zhuǎn)化為 .bin 文件,通過 imxdownload 到 sd 下插到開發(fā)板上進(jìn)行 SD 啟動,具體步驟可以參考我之前的文章: Linux驅(qū)動開發(fā):I.MX6UL 程序編譯下載(SD卡)

五、實(shí)驗(yàn)現(xiàn)象

下載程序后,LED 燈點(diǎn)亮

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/118979.html

相關(guān)文章

  • 單片機(jī)的驅(qū)動能力對點(diǎn)亮LED的影響

    摘要:可是在現(xiàn)實(shí)操作過程中總有一種方式出現(xiàn)問題,這就不得不提到現(xiàn)實(shí)情況下單片機(jī)的驅(qū)動能力對實(shí)驗(yàn)結(jié)果的影響。但是在現(xiàn)實(shí)中由于單片機(jī)驅(qū)動能力的影響往往第一種是無法點(diǎn)亮燈的。 一、LED燈與單片機(jī)的連接方式 ? ? ? ? ?在proteus仿真中,無論LED燈是負(fù)極連接IO端口,正極通過電阻連接VCC...

    learning 評論0 收藏0
  • 12V轉(zhuǎn)3.3VLED驅(qū)動芯片AH2030

    摘要:轉(zhuǎn),通過調(diào)節(jié)外置的電阻,能控制高亮度燈的驅(qū)動電流,使燈亮度達(dá)到預(yù)期恒定亮度,流過高亮度燈的電流可從幾毫安到安培變化。 12V轉(zhuǎn)3.3VLED驅(qū)動芯片AH2030是一款高效率,穩(wěn)定可靠的高亮度 LED燈驅(qū)動控制 IC ,內(nèi)置高精度比較器,off-time控制電路,恒流驅(qū)動控制電路等,特別適合大...

    e10101 評論0 收藏0
  • 單片機(jī)入門指南

    摘要:單片機(jī)入門指南本文基于常神文章基礎(chǔ)上將單片機(jī)入門部分進(jìn)行細(xì)化盡可能細(xì)節(jié)做到可實(shí)施性先引用一下常神的文章首先假設(shè)大家已經(jīng)對高中物理的電路部分有所了解。單片機(jī),如,是一種根據(jù)程序控制引腳高低電平的可編程器件,有些場合又將這種行為稱作嵌入式。 ...

    nevermind 評論0 收藏0
  • 聯(lián)盛德W806-KIT開發(fā)板試用評測系列之一:開發(fā)環(huán)境搭建篇

    摘要:大信刷抖音時,偶然蹦出了聯(lián)盛德物聯(lián)開發(fā)板這個廣告。板子做的很精致,毫米厚的板子,平滑的板邊緣,亮紫色和鍍金的過孔透露著高檔品質(zhì),同時收到售后支持的加好友,在售后支持指導(dǎo)下加入了聯(lián)盛德官方的開發(fā)群里,開始了開發(fā)測試工作。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...

    newsning 評論0 收藏0
  • ESP32-S2上使用SPI接口芯片DM9051NP轉(zhuǎn)以太網(wǎng)的無線物聯(lián)網(wǎng)網(wǎng)關(guān)開發(fā)指導(dǎo)

    摘要:前言芯片接口占用管腳數(shù)量比以太網(wǎng)的少,版線布局可更精簡。網(wǎng)卡芯片介紹接口網(wǎng)卡芯片是為方物聯(lián)網(wǎng)行業(yè)進(jìn)以太網(wǎng)通信而開發(fā)出的解決方案。此應(yīng)用可用于監(jiān)控家庭物聯(lián)網(wǎng)網(wǎng)關(guān)搭建等。 前言 ????DM9051NP芯片?SPI接口占用管腳數(shù)量比以太網(wǎng)PHY的RMII/MII少,PCBA版線布局可更精簡。...

    wangjuntytl 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<