自学linux驱动从入门到放弃(番外3)rk3288 GPIO点灯

        网上看迅为的视频,是用的iTop的开发板,我手里面是rk3288的开发板,所以硬件操作上会有些出入,点个灯不容易,记录一下。说明一下,这里不适用于GPIO0,因为GPIO0的操作寄存器和GPIO1-8不太一样。

       

1.首先看电路板的原理图,找到预留的LED的线路连接,看一下POWER_LED连到了哪里

连到了GPIO8_A2上面。

2.看一下芯片手册CRU部分,GPIO有时钟使能,保险起见,需要使能一下GPIO8的时钟,这里G14_8指的是GATE14,下面寄存器会看到。

 往下翻找到CRU_CLKGATE14,搜索一下,看到寄存器描述

CRU:

        这个寄存器的bit31:16是写使能,当对bit0:15操作时,需要将对应的bit+16位置1,才能写成功,如这里我需要操作bit8,那么应该同时将bit(8+16)也就是bit24置1。

GRF:

        看上面的原理图能知道,GPIO8_A2是复用的,那我们怎么知道用的是GPIO功能,那么需要配置复用寄存器,进到这一章直接就能看到复用寄存器的偏移地址,我们找到GPIO8A的寄存器

 

搜索一下看寄存器描述,同样,有个写使能。

往下找,找到我们需要的GPIO8_A2,OK在bit4上面,1为gpio功能

接下来,我们需要配置IO口是输入还是输出,看一下GPIO章节

GPIO_SWPORTA_DDR是IO口的方向寄存器,DR是IO口的数据寄存器,也就是控制高低。

 

DDR/DR 寄存器的 bit31:0 分别对应rk3288的GPIO8

bit[31:24]->D7-D0   bit[23:16]->C7-C0   bit[15:8]->B7-B0   bit[7:0]->A7-A0

一共32个IO口,不管它实际有没有,但是它就是这样控制的,配置完方向之后,那么就可以控制DR寄存器输出高低电平了。

哦对了还有个问题,这些寄存器只是偏移地址,哪里去看基地址?在第一张的address mapping里面找一下就好了

控制rk3288 power_led的伪代码如下:

//定义虚拟地址指针
static volatile unsigned int *GPIO8_CLKGATE_CON;
static volatile unsigned int *GPIO_PORT_DR;
static volatile unsigned int *GPIO_PORT_DDR;
static volatile unsigned int *GRF_GPIO8A_IOMUX;

//申请虚拟地址
GPIO8_CLKGATE_CON = ioremap(0xFF760000+0x0198,4);	//GPIO8A clk 控制
GRF_GPIO8A_IOMUX  = ioremap(0xFF770000+0x0080,4);	//GPIO8A复用控制
GPIO_PORT_DDR     = ioremap(0xFF7F0000+0x0004,4);	//input/output控制
GPIO_PORT_DR	  = ioremap(0xFF7F0000+0x0000,4);	//data output

//IO初始化,使能时钟,复用配置为io,方向为output
*GPIO8_CLKGATE_CON = (1<<(16+8))|(0<<8);	//31:16 write mask :8 gpio8 clk gate,0:enable
*GRF_GPIO8A_IOMUX = (1<<(16+4))|(~(1<<4));//31:16 write mask :4 0:fuc gpio
*GPIO_PORT_DDR |= (1<<2);	//gpio8_A2 set output

//IO控制
*GPIO_PORT_DR &= ~(1<<2);	//	0点亮
*GPIO_PORT_DR |= (1<<2);	//1 熄灭

 

 

 

 

 

 

 

         

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SmartFusion是一款集成了FPGA和ARM处理器的可编程逻辑器件。在使用SmartFusion进行FPGA到ARM的衔接过程中,首先我们可以通过MSS(Microcontroller Subsystem)模块的GPIO(General Purpose Input/Output)功能来实现点灯。 MSS是SmartFusion芯片中的一个微控制器子系统,它包含了ARM Cortex-M3处理器以及与之相关的外设。GPIO是MSS提供的一种功能,它允许我们通过配置相关引脚的输入输出状态来进行数字信号的输入输出。 在使用MSS_GPIO点灯的过程中,首先我们需要使用SmartFusion的设计工具进行硬件电路的设计。接着,我们需要在软件开发环境中编写ARM处理器的代码来控制MSS_GPIO。 在代码中,我们需要进行以下步骤来实现点灯功能: 1. 配置MSS_GPIO控制的引脚作为输出引脚。我们可以通过设置相应的寄存器来实现这一步骤。例如,我们可以将寄存器的特定位设置为1来将某个引脚设置为输出模式。 2. 设置输出引脚的电平状态。通过编写相应的代码,我们可以将输出引脚的电平配置为高电平或低电平。这将决定LED是否点亮。 3. 可以加入延时函数来控制点亮和熄灭的时间间隔,以及闪烁的频率。 以上就是使用SmartFusion的MSS_GPIO模块实现点灯的简要过程。通过编写ARM处理器的代码,配置相关的寄存器,我们可以通过控制MSS_GPIO模块的引脚状态来实现LED的点亮和熄灭。这个简单的示例展示了SmartFusion芯片中FPGA和ARM之间的协同工作能力,为我们实现更复杂的功能提供了基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值