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

資訊專欄INFORMATION COLUMN

Linux驅動開發:匯編LED燈實驗(I.MX6UL芯片)

張春雷 / 4079人閱讀

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

Linux驅動開發:匯編LED燈實驗(I.MX6UL芯片)

一、I.MX6UL的GPIO原理

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

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

下面我們學習 IMX6UL 的 GPIO 原理也是按照這樣的流程來學習

1.1 I.MX6UL IO命名

學習前先了解一下 IMX 的命名方式,在以前學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復用

IO 復用是通過一個寄存器來控制的,這里我以 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位對應具體模式,具體有以下幾個:

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

SION 的控制功能如下:

SION功能
0IO輸入路徑按照復用的模式來
1IO輸入路徑強制按照GPIO1——IO00來

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

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 口的復用配置寄存器,但 IO 的具體工作配置還有另外一個寄存器進行控制,繼續以 GPIO1 組的 IO00 為例子;具體 IO 工作配置寄存器由 IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO00 控制,該寄存器如下:

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

寄存器分析:

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

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

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

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

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

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

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

SPEED(bit7:6): 對應圖中的 SPEED,當 IO 用作輸出的時候,此位用來設置 IO 速度

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

DSE(bit5:3): 對應圖中 DSE,當 IO 用作輸出的時候用來設置 IO 的驅動能力, 總共有 8 個可選選項,如表所示:

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

位設置速度
000輸出驅動關閉
001R0 ****
010R0/2
011R0/3
100R0/4
101R0/5
110R0/6
111R0/7

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

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

壓擺率參考文章:運放壓擺率

1.4 I.MX6UL GPIO配置

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

首先看一下 GPIO 的結構圖:

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

這 8 個寄存器介紹如下:

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

GPIOx_IR 方向寄存器,結構如下:

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

PSR 寄存器: GPIO 的狀態寄存器


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

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

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

位設置速度
00低電平觸發
01高電平觸發
10上升沿觸發
11下降沿觸發

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

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

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

注意:處理完中斷以后,必須清除中斷標志位,清除方法就是向 ISR 中相應的位寫 1 清零

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

1.5 I.MX6UL時鐘使能

I.MX6U 有復雜的時鐘系統,每個外設的時鐘都可以獨立的使能或禁止,這樣可以關閉掉不使用的外設時鐘,起到 省電的目的,時鐘系統后面學習到在分析,當前先研究 IO 時鐘如何使能

時鐘系統有關的模塊叫做 Clock Controller Module(CCM) ,其中控制時鐘使能的寄存器為CCM_CCGR0~CCM_CCGR6 這 7 個寄存器,這 7 個寄存器控制著 I.MX6U 的所有外設時鐘開關,CCM_CCGR0 結構體如圖:

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

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

要使能對應的時鐘只要置位對應的時鐘控制位就行!

二、開發板原理圖

正點原子阿爾法LED燈原理圖如下:

LED0 接到了 GPIO_3 上,GPIO_3 就是 GPIO1_IO03

三、程序編寫

程序編寫按照下面的流程進行編寫:

  1. 使能IO時鐘
  2. 設置IO復用功能
  3. 配置IO運行功能
  4. 配置具體GPIO寄存器
  5. 設置輸入輸出
  • 使能IO時鐘

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

讀取立即數到 R0 、 R1,通過寄存器間接尋址將 R1 的值賦值給目標地址

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]
  • 設置IO復用功能
ldr r0, =0X020E0068	# 將寄存器 SW_MUX_GPIO1_IO03_BASE 地址加載到 r0 中ldr r1, =0X5		str r1,[r0]		# 設置寄存器 SW_MUX_GPIO1_IO03_BASE 的 MODE 為5
  • 配置IO運行功能
# 模式配置# bit 16:0 HYS關閉# bit [15:14]: 00 默認下拉# bit [13]: 0 kepper功能# bit [12]: 1 pull/keeper使能# bit [11]: 0 關閉開路輸出# bit [7:6]: 10 速度100Mhz# bit [5:3]: 110 R0/6驅動能力# bit [0]: 0 低轉換率# 寄存器 SW_PAD_GPIO1_IO03_BASEldr r0, =0X020E02F4	ldr r1, =0X10B0str r1,[r0]
  • 配置具體GPIO寄存器
# 寄存器GPIO1_GDIRldr r0, =0X0209C004# 配置為輸出模式ldr r1, =0X0000008		str r1,[r0]
  • 設置GPIO輸入輸出值
# 寄存器GPIO1_DRldr r0, =0X0209C000# 輸出低電平ldr r1, =0		str r1,[r0]

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

.global _start_start# 需要運行的代碼

結尾加一個死循環,防止程序結束

loop:	b loop 	

四、編譯下載

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

五、實驗現象

下載程序后,LED 燈點亮

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/118979.html

相關文章

  • 單片機的驅動能力對點亮LED的影響

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

    learning 評論0 收藏0
  • 12V轉3.3VLED驅動芯片AH2030

    摘要:轉,通過調節外置的電阻,能控制高亮度燈的驅動電流,使燈亮度達到預期恒定亮度,流過高亮度燈的電流可從幾毫安到安培變化。 12V轉3.3VLED驅動芯片AH2030是一款高效率,穩定可靠的高亮度 LED燈驅動控制 IC ,內置高精度比較器,off-time控制電路,恒流驅動控制電路等,特別適合大...

    e10101 評論0 收藏0
  • 單片機入門指南

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

    nevermind 評論0 收藏0
  • 聯盛德W806-KIT開發板試用評測系列之一:開發環境搭建篇

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

    newsning 評論0 收藏0
  • ESP32-S2上使用SPI接口芯片DM9051NP轉以太網的無線物聯網網關開發指導

    摘要:前言芯片接口占用管腳數量比以太網的少,版線布局可更精簡。網卡芯片介紹接口網卡芯片是為方物聯網行業進以太網通信而開發出的解決方案。此應用可用于監控家庭物聯網網關搭建等。 前言 ????DM9051NP芯片?SPI接口占用管腳數量比以太網PHY的RMII/MII少,PCBA版線布局可更精簡。...

    wangjuntytl 評論0 收藏0

發表評論

0條評論

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