怎样利用am335x点亮一个led

怎样利用am335x点亮一个led。有人看到这个题目会觉得这是不so easy么,调用个操作gpio的函数不就搞定了。然我们今天要说的是通过寄存器地址直接去控制gpio达到点亮LED。主要用于在uboot的调试过程中当系统还不能打印log时,可以用过点亮led的方法来调试。在这记录下来的另一个好处也是为了在需要时能直接拿去用就行,而不用在画时间去研究。好了闲话不说了直接上干货。
这个led接在GPIO1_16引脚上,电路如下,引脚低电平是led点亮
在这里插入图片描述
资料《AM335x and AMIC110 Sitara™ Processors.pdf》
第一步:配置引脚为GPIO模式(gpmc_a0和GPIO1_16引脚复用),类似于dts中pin的配置
在这里插入图片描述
在这里插入图片描述
从上面的Control_Module基地质和GPMC_A0的偏移量可以算出复用功能的寄存器地址为0x44E1 0840
在这里插入图片描述
可以看到通过这个寄存器可以设置引脚的上下拉及复用模式,这里查资料可以知道你模式7为通过GPIO模式。这里我们不设置上下拉;代码如下

#define CTRL_MOD_GPIO116 (*(volatile unsigned int *)0x44E10840)
	CTRL_MOD_GPIO116 = 0x0f; //disable上下拉,设置模式7(GPIO)

第二步:设置GPIO 为输出低
GPIO1 基地址0x4804 C000

GPIO相关寄存器的offset
在这里插入图片描述
GPIO_OE为输出使能寄存器 地址为GPIO1基地址+offset = 0x4804 C134
GPIO_DATAOUT为数据输出的寄存器 地址为GPIO1基地址+offset = 0x4804 C13C
下面给出两个寄存器定义,可以看到利用32位分别代表了GPIO1_0到GPIO1_31的32个引脚。

在这里插入图片描述
在这里插入图片描述
代码如下:

#define OUT_OE_GPIO116 (*(volatile unsigned int *)0x4804C134)
#define DATA_OUT_GPIO116 (*(volatile unsigned int *)0x4804C13C)
	OUT_OE_GPIO116 &= ~(1<<16);
	DATA_OUT_GPIO116 &= ~(1<<16);

完整代码:

#define CTRL_MOD_GPIO116 (*(volatile unsigned int *)0x44E10840)
#define OUT_OE_GPIO116 (*(volatile unsigned int *)0x4804C134)
#define DATA_OUT_GPIO116 (*(volatile unsigned int *)0x4804C13C)
	CTRL_MOD_GPIO116 = 0x0f;//0x17;
	OUT_OE_GPIO116 &= ~(1<<16);
	DATA_OUT_GPIO116 &= ~(1<<16);

这里顺道说一下GPIO_CLEARDATAOUT(offset=190h)和GPIO_SETDATAOUT(offset=194h)这两个寄存器。资料上说通过设置设两个寄存器也是达到设置GPIO_DATAOUT的目的GPIO_CLEARDATAOUT=1相当于GPIO_DATAOUT=0,GPIO_SETDATAOUT=1相当于GPIO_DATAOUT=1.我自己没有测试过。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飘忽不定的bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值