ARM裸机开发:I.MX6U官方SDK包使用

发布者:火星最新更新时间:2024-09-02 来源: cnblogs关键字:ARM  裸机开发  I 手机看文章 扫描二维码
随时随地手机看文章

一、硬件平台:

正点原子I.MX6U阿尔法开发板

_533488159_IMG_20210803_235508_1628006109000_xg_0

二、SDK包简介

NXP 官方为 I.MX6ULL 编写了 SDK 包,在 SDK 包里面 NXP 已经编写好了寄存器定义文件, 所以我们可以直接移植 SDK 包里面的文件来用,SDK 在 NXP 官网下载 

20211028215437

此处我们下载 Window 版本的,选择一处位置安装


三、SDK包移植

SDK 的移植我们只要关注其中的寄存器封装头文件就行,包含寄存器信息的文件位置如下:


fsl_common.h:位置:sdk目录devicesMCIMX6Y2driversfsl_common.h


fsl_iomuxc.h: 位置:sdk目录devicesMCIMX6Y2driversfsl_iomuxc.h


MCIMX6Y2.h: 位置:sdk目录devicesMCIMX6Y2MCIMX6YH2.h


我们复制这三个文件到工程目录下进行修改(修改需要参考正点原子例程示例文档),然后创建一个new_type.h的头文件,定义一些常用的关键字与声明,这里直接复制左神的代码


#ifndef __NEW_TYPE_H

#define __NEW_TYPE_H


/***************************************************************

Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.

文件名 : cc.h

作者    : 左忠凯

版本    : V1.0

描述    : 有关变量类型的定义,NXP官方SDK的一些移植文件会用到。

其他    : 无

日志    : 初版V1.0 2019/1/3 左忠凯创建

***************************************************************/


/*

 * 自定义一些数据类型供库文件使用

 */

#define     __I     volatile 

#define     __O     volatile 

#define     __IO    volatile


typedef   signed          char int8_t;

typedef   signed short     int int16_t;

typedef   signed           int int32_t;

typedef unsigned          char uint8_t;

typedef unsigned short     int uint16_t;

typedef unsigned           int uint32_t;

typedef unsigned long     long uint64_t;

typedef   signed char     s8;

typedef   signed short   int  s16;

typedef   signed int    s32;

typedef   signed long long int s64;

typedef unsigned char    u8;

typedef unsigned short int     u16;

typedef unsigned int    u32;

typedef unsigned long long int u64;


#endif


四、点灯程序编写

工程下面有了以上的文件之后,我们就可以进行调用开发了,先编写启动汇编文件,这里我直接使用上一节的启动代码和链接文件

20211028222840


下面编写 main 文件部分代码


头文件包含以及部分声明


#include 'fsl_common.h'

#include 'fsl_iomuxc.h'

#include 'MCIMX6Y2.h'

#include 'new_type.h'


#define LED_ON() (GPIO1->DR &= ~(1<<3))

#define LED_OFF() (GPIO1->DR |= (1<<3))

初始化时钟函数


void CLK_INIT(void)

{

    CCM->CCGR0 = 0xffffffff;

    CCM->CCGR1 = 0xffffffff;

    CCM->CCGR2 = 0xffffffff;

    CCM->CCGR3 = 0xffffffff;

    CCM->CCGR4 = 0xffffffff;

    CCM->CCGR5 = 0xffffffff;

    CCM->CCGR6 = 0xffffffff;

}

LED灯初始化


void LED_INIT(void)

{

    IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03,0);


    IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03,0x10b0);


    GPIO1->GDIR |= (1 << 3);

     

    GPIO1->DR &= ~(1 << 3);

}

延时函数


void delay(volatile unsigned int n)

{

while(n--)

{

volatile unsigned int i = 0x7ff;

while(i--);

}

}

主函数


int main(void)

{

    CLK_INIT();

    LED_INIT();

    while (1)

    {

        /* code */

        LED_ON();

        delay(10000);

        LED_OFF();

        delay(10000);

    }

    return 0;

    

}

SDK开发与我们之前开发的最大区别就是提供了封装的寄存器地址以及操作函数,我们可以快速调用他进行开发,这里比较重要的两个函数


1. 复用设置函数:


static inline void IOMUXC_SetPinMux(uint32_t muxRegister,

                                    uint32_t muxMode,

                                    uint32_t inputRegister,

                                    uint32_t inputDaisy,

                                    uint32_t configRegister,

                                    uint32_t inputOnfield)

其参数功能如表:

参数功能
muxRegisterIO 的复用寄存器地址
muxModeIO 复用值,也就是 ALT0~ALT8,对应数字 0~8,比如要将 GPIO1_IO03 设置
为 GPIO 功能的话此参数就要设置为 5
inputRegister外设输入 IO 选择寄存器地址,有些 IO 在设置为其他的复用功能以后还需要设置 IO 输入寄存器
inputDaisy寄存器 inputRegister 的值,比如 GPIO1_IO03 要作为 UART1_RX 引脚的话此
参数就是 1
configRegister未使用,函数 IOMUXC_SetPinConfig 会使用这个寄存器。
inputOnfieldIO 软件输入使 能 ,以 GPIO1_IO03 为例就是寄存器 SW_MUX_CTL_PAD_GPIO1_IO03 的 SION 位(bit4)。如果需要使能 GPIO1_IO03 的软件输入功能的话此参数应该为 1,否则的话就为 0。

复用功能有9种宏定义


IOMUXC_GPIO1_IO03_I2C1_SDA

IOMUXC_GPIO1_IO03_GPT1_COMPARE3

IOMUXC_GPIO1_IO03_USB_OTG2_OC

IOMUXC_GPIO1_IO03_USDHC1_CD_B

IOMUXC_GPIO1_IO03_GPIO1_IO03

IOMUXC_GPIO1_IO03_CCM_DI0_EXT_CLK

IOMUXC_GPIO1_IO03_SRC_TESTER_ACK

IOMUXC_GPIO1_IO03_UART1_RX

IOMUXC_GPIO1_IO03_UART1_TX 

每个宏定义都包含了预先配置,比如 IOMUXC_GPIO1_IO03_GPIO1_IO03 本身集成了其配置,所以我们使用时只需要输入 IOMUXC_GPIO1_IO03_GPIO1_IO03 和输入使能参数就行


#define IOMUXC_GPIO1_IO03_GPIO1_IO03 0x020E0068U, 0x5U, 0x00000000U,0x0U, 0x020E02F4U

2. GPIO 口设置函数:


static inline void IOMUXC_SetPinConfig( uint32_t muxRegister,

                                        uint32_t muxMode,

                                        uint32_t inputRegister,

                                        uint32_t inputDaisy,

                                        uint32_t configRegister,

                                        uint32_t configValue)


此函数只使用了参数 configRegister 和 configValue,其参数功能如表:

参数功能
configRegisterIO 配置寄存器地址
configValue要写入到寄存器 configRegister 的值

代码编写完成后编写 Makefile文件代码


COMPILE ?= arm-linux-gnueabihf-

NAME    ?= ledtest

CC := $(COMPILE)gcc

LD := $(COMPILE)ld

OBJCOPY := $(COMPILE)objcopy

OBJDUMP  := $(COMPILE)objdump

OBJS          := start.o main.o


$(NAME).bin:$(OBJS)

$(LD) -Timx6ul.lds -o $(NAME).elf $^

$(OBJCOPY) -O binary -S $(NAME).elf $@

$(OBJDUMP) -D -m arm $(NAME).elf > $(NAME).dis

%.o:%.s 

$(CC) -Wall -nostdlib -c -O2 -o $@ $<

%.o:%.S

$(CC) -Wall -nostdlib -c -O2 -o $@ $<

%.o:%.c

$(CC) -Wall -nostdlib -c -O2 -o $@ $<

clean:

rm -rf *.o $(NAME).bin $(NAME).elf $(NAME).dis

此处 makefile 多用变量来代替常用的指令,具体可以查 makefile 手册,熟能生巧,之后用 imxdownload 工具下载到 sd 卡在 ARM 单片机上启动


详细下载细节可参考我之前的文章:ARM裸机开发:I.MX6UL 程序编译下载(SD卡)


五、实验现象

将SD卡插到开发板上启动,可以看到 LED 在周期性闪烁,这里就不插图了


关键字:ARM  裸机开发  I 引用地址:ARM裸机开发:I.MX6U官方SDK包使用

上一篇:linux UART串口驱动开发文档
下一篇:ARM裸机开发:C语言点亮LED

推荐阅读最新更新时间:2024-11-17 17:41

一款基于ARM控制的逆变器电源电路设计方案
本文将介绍一款基于ARM控制的逆变器电源电路设计方案及其应用。   系统总体方案   1、总体设计框图   如图1 所示, 逆变器系统由升压电路、逆变电路、控制电路和反馈电路组成。低压直流电源DC12V经过升压电路升压、整流和滤波后得到约DC170V高压直流电,然后经全桥逆变电路DC/AC转换和LC滤波器滤波后得到AC110V的正弦交流电。   逆变器以ARM控制器为控制核心,输出电压和电流的反馈信号经反馈电路处理后进入ARM处理器的片内AD,经AD转换和数字PI运算后,生成相应的SPWM脉冲信号,改变SPWM的调制比就能改变输出电压的大小,从而完成整个逆变器的闭环控制。   2、SPWM方案选择   2.1、PWM
[电源管理]
一款基于<font color='red'>ARM</font>控制的逆变器电源电路设计方案
建立在ARM基础上的ADSL2+测试仪的设计
  引言   近几年来,不对称数字用户线(ADSL)作为网络“最后一公里”问题的理想解决方案在世界范围内得到了广泛运用。在我,ADSL业务已成为运营商收入的主要增点之一。但由于现有电话线路专门为传送低频语音信号所设计,不利于高频信号传输,线路周边环境恶劣且复杂多变,无论ADSL业务的开通还是正常的运营维护,都需进行一系列复杂的测试工作。   现有测试仪表多为国外品牌且价格昂贵,国内产品普遍存在测试频段有限,测试结果片面的问题;而且由于核心芯片处理能力有限,嵌入式操作系统不先进,软件包功能不够完善,对测试结果的管理也比较混乱。随着市场不断壮大,尤其是基于ITU G.992.3/ G.992.5标准的ADSL2/ 2+推出后,价格
[测试测量]
建立在<font color='red'>ARM</font>基础上的ADSL2+测试仪的设计
ARM与Flash ROM
以ARM为核心的嵌入式设备,是一种以计算机为核心的产品,必须要有存储软件的存储器。单片机中软件存储在单片机芯片内的ROM存储器中,单片机的ROM容量很小,一般都小于1MBytes,所以ROM集成在芯片内。PC机要求的ROM比较大,主板上启动计算机用的BIOS存储在主板上一片1MBytes左右的Flash ROM中,操作系统和应用程序存储在硬盘中。ARM产品因为体积的缘故,通常都不用硬盘,但软件的体积一般都在几MBytes以上,通常在芯片外扩展联接容量较大的Flash ROM存储软件。 Flash ROM分为两种:NOR Flash ROM 和 NAND Flash ROM。NOR Flash ROM 用法类似于SDRAM 内存,有地
[单片机]
ARM承认芯片存安全漏洞,安卓iOS设备都有影响
  网易科技讯 1月5日消息,据VentureBeat报道,继承认不安全的内存漏洞会影响数以百万计的英特尔处理器后,ARM今天证实,许多Cortex系列处理器也存在漏洞。ARM的Cortex技术被用于各种各样的Android和iOS设备,以及部分Nvidia Tegra产品、高通骁龙芯片以及索尼的PlayStation Vita上。   在描述了四种不同的可被利用的处理器漏洞后,ARM发布了一个图表,承认它的Cortex-A8、-A9、-A15、-A17、-A57、-A72、-A73以及-A75芯片都容易受到两个以上漏洞的攻击。前三款Cortex处理器被用于老款苹果iOS、Nvidia Tegra、三星Exynos设备以及索尼的P
[嵌入式]
AMR、ARM和MRM技术简介
  AMR、arm和MRM技术简介一、AMR简介AMR(Audio/MODEM Riser,声音/调制解调器插卡)是一套开放工业标准,它定义的扩展卡可同时支持声音及MODEM功能。采用这种设计,可有效降低成本,同时解决声音与MODEM子系统目前在功能上的一些限制。     人们其实早就想把MODEM子系统集成到主板上,但由于存在电磁干扰以及另一些不方便的因素,所以MODEM最重要的模拟I/O(编码/译码器和DAA)电路暂时还不能直接焊到主板上。Intel公司之所以制订这套AMR规则,很重要的一个目的就是解决这个问题,将模拟I/O电路转移到单独的插卡中,其他部件则留在主板上。     另外,声音子系统目前也不能十全十美地集成到主板,
[单片机]
ARM:智能手机性能比续航能力更重要
    最新的消息显示,ARM移动战略主管James Bruce近日在接受记者采访时表示,ARM对于自己的产品的发布有一个清晰的目标和规划,ARM每一代产品的性能都要比上一代提高1倍左右,ARM明年将推出的A15芯片相比目前的A9芯片在速度上就要快1倍。     不过由于增加了核心的数量以及运行频率是否会让智能手机产品的续航能力变得很差呢?James Bruce认为实际上厂商都会在这方面相当的关注,用户方面也很纠结于这个问题,尽管性能的提升和电池续航问题是一个矛盾体,但是实际上随着技术的不断进步这并不是一个大的问题,用户在享受更高性能的同时必然会牺牲一部分的续航能力,而在技术成熟之后电池的续航能力有可以提升,这是一个周期性的关
[手机便携]
i机器人荣获"第九届吴文俊人工智能科技进步奖"
近日,被誉为"中国智能科学技术最高奖"的吴文俊人工智能科学技术奖获奖名单正式公布,80多项科技成果从终审答辩中脱颖而出。小i机器人凭借优秀的技术创新能力和成熟的商业应用能力获得"第九届吴文俊人工智能科技进步奖"(企业技术创新工程项目)。 小i机器人获"第九届吴文俊人工智能科技进步奖"(企业技术创新工程项目) 根据《吴文俊人工智能科学技术奖励条例》:吴文俊人工智能科技进步奖授予通过技术创新和管理创新,创建自主知识产权核心技术产业或著名智能产品品牌,推进中国智能科技产品创造重大经济效益和社会效益的项目单位和成果完成人。同时,吴文俊人工智能科技进步奖企业技术创新工程项目,也看重企业工程单位需具有支撑产业关键技术、共性技术和配套技术
[嵌入式]
小<font color='red'>i</font>机器人荣获"第九届吴文俊人工智能科技进步奖"
ARM7 与Cortex M3的区别
”A“系列面向尖端的基于虚拟内存的操作系统和用户应用。主要针对日益增长的运行包括Linux、Windows CE和Symbian在内的消费电子和无线产品; ”R“系列针对实时系统。主要针对需要运行实时操作系统来进行控制应用的系统,包括骑车电子、网络和影像系统。 ”M“系列针对微控制器和低成本应用提供优化。针对开发费用非常敏感,同时对性能要求不断增加的嵌入式应用,如微控制器、骑车车身控制系统和各种大型家电。 比较项目 ARM7 Cortex-M3 架构 ARMv4T(冯诺依曼) 指令和数据总线共用,会出现瓶颈 ARMv7-M(哈佛) 指令和数据总线分开,无瓶颈 指令集 32位ARM指令+16位Thumb指令 两
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved