IMX6Ull点亮LED

一、如何做

1、看原理图,确定控制LED的主芯片引脚

2、看主芯片手册,确定如何设置控制引脚

3、写程序去控制

二、操作步骤

因该是操作GPIO步骤:

1、管脚使能          //有些为了省电,默认没有使能

2、设置GPIO模式     //是做为GPIO,还是做为串口引脚,做为信号线

3、设置GPIO输入输出模式

4、设置高低电平

上述操作都是对寄存器操作。

操作寄存器要三步:

 要领,不要影响其他位。

IMX6Ull点亮LED_第1张图片

这样比较低效,有更好的办法,就是修改设置寄存器的寄存器的值。

设置寄存器的寄存器有两个,一个是设置寄存器-用来设置值;一个是清除寄存器-用来清除设置值

IMX6Ull点亮LED_第2张图片

三、实际操作

IMX6Ull点亮LED_第3张图片

1、查看原理图

IMX6Ull点亮LED_第4张图片

 2、对io口进行配置

1.看用的GPIOn的第几个引脚

2、使能引脚、配置引脚为gpio功能、配置引脚输出、把输出的值写入某个寄存器

步骤:

1.灯上GPIO_3连接的管脚是GPIO1_IO03,所以需要对GPIO1_IO03管脚操作

2.GPIO1_IO03引脚使能

查看IMX6ULL芯片参考手册,找到引脚使能方法

通过设置CCM_CCGP1寄存器的26、27位就可以了 

3.配置.GPIO1_IO03工作GPIO模式

需要设置复用寄存器

SW_MUX_CTL_PAD_* 

IMX6Ull点亮LED_第5张图片

在文档中可以查到需要设置的寄存器 

IMX6Ull点亮LED_第6张图片

4.配置.GPIO1_IO03工作输入或者输出

设置寄存器GPIOX_GDIR,需要设置GPIO1_GDIR的第三位设置成1,才能设置为输出模式。

5.怎样设置才能GPIO1_IO03输出某个值呢?就是如何配置输出1或0

需要设置GPIOX_DR寄存器,GPIO1_DR的第三位设置成1,就是输出1高电平,设置成0,就是引脚输出0低电平。

IMX6Ull点亮LED_第7张图片

四、开始实操写程序点灯

首先要明白一个道理,到底是如何从应用程序,访问到驱动程序,访问到硬件。

感觉就是没有理解从软件-------->硬件控制到底是如何实现的?

IMX6Ull点亮LED_第8张图片

这个是基本的软件控制硬件的一个过程,需要嵌入式工程师去写驱动程序。

1、如何写驱动程序:

 1.驱动程序需要写drv_open、drv_read、drv_wirte、drv_ioctl,为了便于管理,需要把这些函数放在一个结构体中,这个结构体叫做,file_operation

2.这个结构体需要工作,工作的时候,需要告诉内核我有这样个东西,通过一个函数来告诉内核

这个函数叫做regiter_chrdev(major,name_drv),应该是用来注册驱动程序的

需要向内核提供主设备号,还有驱动名

3.问题是谁来调用这个regiter_chrdev(major,name_drv),当然是在入口函数中去调用这个regiter_chrdev(major,name_drv),装在驱动的时候,内核会自动调用这个入口函数

整个顺序梳理以下,当我们加载驱动的时候:

内核调用入口函数——>入口函数调用regiter_chrdev(major,name_drv)——>让结构体工作起来——>结构体中的驱动函数发挥作用

2、应用程序和驱动程序、驱动程序和硬件如何交流

1.应用和驱动数据传输

必须在驱动程序中使用辅助函数,copy_to_user 、copy_from_user

2.驱动程序访问硬件

驱动程序不可以直接访问物理地址,需要把一个物理地址用ioremap映射为一个虚拟地址。

然后嘞,驱动程序需要用这个虚拟地址访问寄存器。

3、驱动程序编写

1.首先要包含头文件

可以参考其它驱动程序包含的头文件

你可能感兴趣的:(单片机,嵌入式硬件)