在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

IMX6ULL正點原子開發板LED驅動

華仔的編程隨筆 ? 來源:華仔的編程隨筆 ? 作者:華仔的編程隨筆 ? 2023-05-02 15:22 ? 次閱讀

硬件

【正點原子阿爾法 IMX6ULL Linux開發板】

目的

學習使用C語言點亮開發板上的LED

步驟

  1. 在ALPHA工作目錄下面新建led_c文件夾,用于本次學習開發的工作目錄

    image.png

  2. 用vscode打開此文件夾:

    image.png

  3. 在文件夾下新建start.S、main.c、main.h三個文件

    image.png

  4. 編寫匯編代碼部分start.S,由于只須考慮初始化C,具體代碼如下:

/***************************************************************
Copyright ? lugl.
文件名 : start.s
作者 : 劉建華
版本 : V1.0
描述 : I.MX6U-ALPHA/I.MX6ULL 開發板啟動文件,完成 C 環境初始化,
 C 環境初始化完成以后跳轉到 C 代碼。
其他 : 此程序學習左中凱老師課程
日志 : 初版 2023/5/1 劉建華修改
**************************************************************/
.global _start       @全局標號

/*
* 描述:_start函數,程序從此函靈敏開始執行,
*      此函數主要功能是設置C運行環境
*/
_start:

    /*  進入SVC模式 */
    mrs r0, cpsr
    bic r0, r0, #0x1f    @ 將r0的低5位清零,也就是cpsr的M0-M4
    orr r0, r0, #0x13    @ r0或上0x13,表示使用SVC模式
    msr cpsr, r0         @ 將r0 的數據寫入到cpsr_c中

    ldr sp, =0x80200000  @ 設置棧指針
    b main               @ 跳轉到main函數(再也不用回來了)

【學習注釋】

第20行到23行,就是進入SVC模式。用mrs指令先把cpsr讀出來,然后修改bit[4:0]為0x13后用msr寫回去。

第25行是設置SVC模式下的SP指針。

第26行是跳轉到main函數。用B就是跳過來,不行返回來了。

  1. 編寫main.h:
#ifndef __MAIN_H
#define __MAIN_H
/***************************************************************
Copyright ? lugl.
文件名 : main.h
作者 : 劉建華
版本 : V1.0
描述 : 時鐘GPIO1_IO03的寄存器地址定義。
其他 : 此程序學習左中凱老師課程
日志 : 初版 2023/5/1 劉建華修改
**************************************************************/
/************************************************************
 * CCM 相關寄存器地址
 *************************************************************/
#define CCM_CCGR0            *((volatile unsigned int *)0x020c4068)
#define CCM_CCGR1            *((volatile unsigned int *)0x020c406c)
#define CCM_CCGR2            *((volatile unsigned int *)0x020c4070)
#define CCM_CCGR3            *((volatile unsigned int *)0x020c4074)
#define CCM_CCGR4            *((volatile unsigned int *)0x020c4078)
#define CCM_CCGR5            *((volatile unsigned int *)0x020c407c)
#define CCM_CCGR6            *((volatile unsigned int *)0x020c4080)

/************************************************************
 * IOMUX 相關寄存器地址
 *************************************************************/
#define SW_MUX_GPIO01_IO03  *((volatile unsigned int *)0x020e0068)
#define SW_PAD_GPIO01_IO03  *((volatile unsigned int *)0x020e02f4)

/************************************************************
 * IOMUX GPIO1相關寄存器地址
 *************************************************************/
#define GPIO1_DR            *((volatile unsigned int *)0x0209c000)
#define GPIO1_GDIR          *((volatile unsigned int *)0x0209c004)
#define GPIO1_PSR           *((volatile unsigned int *)0x0209c008)
#define GPIO1_ICR1          *((volatile unsigned int *)0x0209c00c)
#define GPIO1_ICR2          *((volatile unsigned int *)0x0209c010)
#define GPIO1_IMR           *((volatile unsigned int *)0x0209c014)
#define GPIO1_ISR           *((volatile unsigned int *)0x0209c018)
#define GPIO1_EDGE_SEL      *((volatile unsigned int *)0x0209c01c)

# endif

【注釋】

在main.h中,以宏定義的形式定義了,需要使用到的寄存器,后面的數字就是基地址。

  1. main.c
/***************************************************************
Copyright ? lugl.
文件名 : main.c
作者 : 劉建華
版本 : V1.0
描述 : 使用C語言來點亮開發板的LED燈,
       學習掌握如何用c語言來完成對I.MX6U的GPIO初始化和控制
其他 : 此程序學習左中凱老師課程
日志 : 初版 2023/5/1 劉建華修改
**************************************************************/
#include "main.h"

/************************************************************
 * @descriptions: 使能I.MX6U所有外設時鐘
 * @param       : 無
 * @return      : 無
 *************************************************************/
void clk_enable(void)
{
    CCM_CCGR0 = 0xffffffff;
    CCM_CCGR1 = 0xffffffff;
    CCM_CCGR2 = 0xffffffff;
    CCM_CCGR3 = 0xffffffff;
    CCM_CCGR4 = 0xffffffff;
    CCM_CCGR5 = 0xffffffff;
    CCM_CCGR6 = 0xffffffff;
}

/************************************************************
 * @descriptions: 初始化LED對應的GPIO
 * @param       : 無
 * @return      : 無
 *************************************************************/
void led_init(void)
{
    /* 1 初始化IO 復用,復用為GPIO1_IO03 */
    SW_MUX_GPIO01_IO03 = 0x05;

    /* 2 配置GPIO01_IO03的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_GPIO01_IO03 = 0x00010b0;

    /* 3 初始化GPIO, GPIO1_IO03 設置為輸出 */
    GPIO1_GDIR = 0x00000008;

    /* 4 設置CPIO1_IO03 輸出高電平, 半閉led0 */
    GPIO1_DR |= (1<<3);
}

/************************************************************
 * @descriptions: 打開LED燈
 * @param       : 無
 * @return      : 無
 *************************************************************/
void led_on(void)
{
    /*
    * 將GPIO1_DR 的bit3清零,打開led0燈
    */
   GPIO1_DR &= ~(1<<3);
}

/************************************************************
 * @descriptions: 關閉LED燈
 * @param       : 無
 * @return      : 無
 *************************************************************/
void led_off(void)
{
    /*
    * 將GPIO1_DR 的bit3置1,關閉led0燈
    */
   GPIO1_DR |= (1<<3);
}

/************************************************************
 * @descriptions: 短時間延時函數
 * @param -n    : 要延時循環次數,模式延時
 * @return      : 無
 *************************************************************/
void delay_short(volatile unsigned int n)
{
    while (n--)
    {
        ;
    } 
}

/************************************************************
 * @descriptions: 延時函數,在396MHz的主頻下延時時間大約為1ms
 * @param -n    : 要延時的ms數
 * @return      : 無
 *************************************************************/
void delay(volatile unsigned int n)
{
    while (n--)
    {
        delay_short(0x7ff);
    }
    
}

/************************************************************
 * @descriptions: main函數
 * @param       : 無
 * @return      : 無
 *************************************************************/
int main(void)
{
    clk_enable();  //使能所有時鐘
    led_init();    //初始化LED

    while (1)
    {
        led_on();   //打開LED
        delay(500); //延時
        led_off();  //關閉LED
        delay(500);
    }
    return 0; 
}
  1. 編寫Makefile

新建Makefile文件,在Makefile文件具體如下:

objs := start.o main.o

ledc.bin:$(objs)
	arm-linux-gnueabihf-ld -Timx6ul.lds -o ledc.elf $^
	arm-linux-gnueabihf-objcopy -O binary -S ledc.elf $@
	arm-linux-gnueabihf-objdump -D -m arm ledc.elf > ledc.dis
	
%.o:%.s
	arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o $@ $<
	
%.o:%.S
	arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o $@ $<
	
%.o:%.c
	arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o $@ $<
	
clean:
	rm -rf *.o ledc.bin ledc.elf ledc.dis
  1. 編寫鏈接文件imx6ul.lds如下:
SECTIONS{
    .= 0x87800000;
    .text :
    {
        start.o
        main.o
        *(.text)
    }
    .rodata ALIG(4): {*(.rodata)}
    .data ALIG(4)  : {*(.data)}
    __bss_start = .;    
	.bss ALIGN(4)  : { *(.bss)  *(COMMON) }    
	__bss_end = .;
}
  1. 把文件拷到虛擬機下面進行編譯:

image.png

  1. 燒寫到SD中,SD使用的為雷龍發展提供的CS創世SD NAND

    9018f98d19e068818ebe36f3f520e67.jpg

ugl@lugl-virtual-machine:~/linux/tool/ledc$ ./imxdownload ledc.bin /dev/sdb
I.MX6ULL bin download software
Edit by:zuozhongkai
Date:2019/6/10
Version:V1.1
log:V1.0 initial version,just support 512MB DDR3
    V1.1 and support 256MB DDR3
file ledc.bin size = 601Bytes
Board DDR SIZE: 512MB
Delete Old load.imx
Create New load.imx
Download load.imx to /dev/sdb  ......
[sudo] lugl 的密碼: 
記錄了7+1 的讀入
記錄了7+1 的寫出
3673字節(3.7 kB,3.6 KiB)已復制,0.0124712 s,295 kB/s
  1. 把SD卡插到開發板上,上電,可以看到LED以0.5S的頻率在閃爍了。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    242

    文章

    23709

    瀏覽量

    670975
  • Linux
    +關注

    關注

    87

    文章

    11462

    瀏覽量

    212803
  • 開發板
    +關注

    關注

    25

    文章

    5530

    瀏覽量

    102350
  • IMX6ULL
    +關注

    關注

    3

    文章

    16

    瀏覽量

    4288
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何將u-boot.2022.10版本移植到imx6ull開發板

    今天給大家講一講如何將u-boot.2022.10版本移植到imx6ull開發板上。
    發表于 07-12 14:57 ?1930次閱讀
    如何將u-boot.2022.10版本移植到<b class='flag-5'>imx6ull</b><b class='flag-5'>開發板</b>

    正點原子阿爾法開發板免費試用免費試用連載】使用正點原子alpha開發板實現多通信接口工業無線終端

    項目名稱:使用正點原子alpha開發板實現多通信接口工業無線終端試用計劃:申請 正點原子alpha開發板
    發表于 06-05 14:54

    如何實現飛凌iMX6ULL開發板系統的燒寫

    本文以飛凌嵌入式OKMX6ULL-S開發板為基礎講解,本文分為三個部分,主要講解了iMX6ULL SD卡燒寫系統及OTG燒寫系統的以及單步更新內核的步驟。通過本文您可以快速實現飛凌iMX6UL
    發表于 12-22 06:23

    iMX6ULL開發板如何配置AP熱點

    迅為-iMX6ULL開發板上配置AP熱點
    發表于 12-29 06:33

    iMX6ULL開發板的移植和測試介紹

    iMX6ULL開發板的移植和測試
    發表于 12-29 07:55

    IMX6ULL開發板使用前裝配流程

    IMX6ULL開發板【終極者】開發板使用前裝配流程
    發表于 12-30 07:23

    迅為IMX6ULL開發板的特點

    迅為IMX6ULL開發板有哪些特點
    發表于 01-12 06:33

    imx6ull開發板是什么

    一、前言阿爾法imx6ull開發板正點原子與2019年10月發布的一款Linux開發板,其主控使用恩智浦公司的
    發表于 07-23 09:39

    使用openocd調試imx6ull的過程分享

    一、前言目前很多人開發imx6ull基本的組合是uboot+linux,以開發應用層軟件的居多(此時可以直接在開發板運行gdb工具鏈調試APP);其次是
    發表于 04-18 09:44

    iMX6ULL開發板WIFI功能測試(三)

    注意:若 飛凌iMX6ULL 開發板上焊接的是8723 b u,使用lsmod會顯示8723 b u
    發表于 04-29 15:10 ?1841次閱讀
    <b class='flag-5'>iMX6ULL</b><b class='flag-5'>開發板</b>WIFI功能測試(三)

    NXP iMX6ULL開發板的WIFI接口功能測試

    iMX6ULL開發板上電,啟動Linux系統。 步驟2: 連接USB?WIFI到飛凌iMX6ULL開發板的USB Host接口 步驟 3 : 按照如下格式輸入相應的參數:? ? -
    的頭像 發表于 05-05 17:02 ?2819次閱讀

    匯編驅動IMX6ULL LED

    用匯編編寫正點原子Linux開發板Led驅動
    的頭像 發表于 05-01 09:19 ?25.9w次閱讀
    匯編<b class='flag-5'>驅動</b><b class='flag-5'>IMX6ULL</b> <b class='flag-5'>LED</b>燈

    i.MX6ULL開發板源碼編譯

    開發板是武漢芯路遙科技有限公司與武漢萬象奧科電子有限公司合作推出的一款開發板。此開發板基于 NXP iMX6ULL 系列 Cortex-A7 高性能處理器設計,適用于
    的頭像 發表于 12-16 15:56 ?1073次閱讀
    i.MX<b class='flag-5'>6ULL</b><b class='flag-5'>開發板</b>源碼編譯

    iMX6ULL動態評測-老將新甲 29*40mm的iMX6ULL 夠小

    iMX6ULL核心尺寸僅29*40mm,采用NXP iMX6ULL低功耗處理器設計,小尺寸,高性能應用領域更加廣泛
    的頭像 發表于 05-05 11:58 ?2951次閱讀
    <b class='flag-5'>iMX6ULL</b>動態評測-老將新甲 29*40mm的<b class='flag-5'>iMX6ULL</b> 夠小

    IMX6ULL開發板

    i. MX6ULL 開發板板載資源豐富,核心通過郵票孔將 i.MX6ULL 的所有資源幾乎全部引出,接口豐富,可以滿足各種應用的需求。核心
    發表于 11-12 15:41 ?26次下載
    主站蜘蛛池模板: 国产在线视频www色 国产在线视频欧美亚综合 国产在线视频网站 | 亚洲无线视频 | 欧美成人h精品网站 | 女人张腿让男子桶免费动态图 | 欧美性色xo影院永久禁欲 | 狠狠做深爱婷婷综合一区 | 日韩午夜r电影在线观看 | sihu国产午夜精品一区二区三区 | 色爱综合区五月小说 | 1024视频色版在线网站 | 国内自拍网红在综合图区 | 天天做天天爱天天干 | 欧美精品区 | 自拍你懂的 | 午夜影院免费入口 | 成 人网站免费 | 久久草在线看 | 国产资源网 | 亚洲国产精品综合久久网络 | 午夜精品视频在线看 | 1024你懂的国产精品 | 国产又爽又黄又粗又大 | 美日韩毛片 | 久久久久久88色偷偷 | 欧美性猛交xxxx免费 | 女人牲交一级毛片 | 国内精品手机在线观看视频 | 777色狠狠一区二区三区香蕉 | 成人免费看片视频色多多 | 色婷婷视频在线 | 天天爱天天爽 | 欧洲三级网站 | 国产男靠女免费视频网站 | 亚洲色图综合网站 | 天天操天天舔天天干 | 男人女人真曰批视频播放 | 亚洲理论视频 | 国产午夜精品久久久久免费视小说 | 国产在线观看www鲁啊鲁免费 | 欧美色交 | 视频一区中文字幕 |