CSDN仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。
本博文对应地址: https://hceng.cn/2017/07/28/AM437x——LED裸机/#more
最近在玩AM437X,记录下一些学习过程。分为裸机和驱动。


0.准备文件

  • AM437x EVM Schematic(后称原理图YP)
  • am4378(后称芯片手册SP)
  • spruhl7g(后称参考手册CP)

1.分析原理图

四个LED灯,单片机通过控制三极管的通断,从而控制灯的亮灭。
单片机高电平,三极管打通,灯亮,反之低电平,LED灭。
D7_Blue 对应uart3_txd(GPIO5_3);
D8_Blue 对应uart3_rxd(GPIO5_2);
D9_Green 对应uart3_rtsn(GPIO5_1);
D10_Red 对应uart3_ctsn(GPIO5_0);


2.编写程序

1.使能GPIO外设时钟;
{% codeblock lang:c%}
PRCM_CM_PER_GPIO5_CLKCTRL = (0x01<<1);
{% endcodeblock %}

2.设置GPIO模式(默认使能了上拉,且为GPIO模式);
{% codeblock lang:c%}
CTRL_CONF_UART3_RXD &= ~(0x7<<0 | 0x01<<16 | 0x01<<17 | 0x01<<18);//使能上/下拉、关闭输入
CTRL_CONF_UART3_RXD |= (0x7<<0 | 0x01<<17);//IO模式,设置上拉
CTRL_CONF_UART3_TXD &= ~(0x7<<0 | 0x01<<16 | 0x01<<17 | 0x01<<18);//使能上/下拉、关闭输入
CTRL_CONF_UART3_TXD |= (0x7<<0 | 0x01<<17);//IO模式,设置上拉
CTRL_CONF_UART3_RTSN &= ~(0x7<<0 | 0x01<<16 | 0x01<<17 | 0x01<<18);//使能上/下拉、关闭输入
CTRL_CONF_UART3_RTSN |= (0x7<<0 | 0x01<<17);//IO模式,设置上拉
CTRL_CONF_UART3_CTSN &= ~(0x7<<0 | 0x01<<16 | 0x01<<17 | 0x01<<18);//使能上/下拉、关闭输入
CTRL_CONF_UART3_CTSN |= (0x7<<0 | 0x01<<17);//IO模式,设置上拉
{% endcodeblock %}

3.设置为输出;
{% codeblock lang:c%}
GPIO5->OE &= ~(0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);
{% endcodeblock %}

4.设置允许输出位;
{% codeblock lang:c%}
GPIO5->SETDATAOUT |= (0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);
{% endcodeblock %}

5.设置输出值;
{% codeblock lang:c%}
GPIO5->DATAOUT |= (0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);//高
GPIO5->DATAOUT &= ~(0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);//低
{% endcodeblock %}

6.封装成函数;
将前面的1-4步,封装为void led_init(void);
{% codeblock lang:c%}
void led_init(void)
{
PRCM_CM_PER_GPIO5_CLKCTRL = (0x01<<1);

CTRL_CONF_UART3_RXD  &= ~(0x7<<0 | 0x01<<16 | 0x01<<17 | 0x01<<18);
CTRL_CONF_UART3_RXD  |=  (0x7<<0 | 0x01<<17);
CTRL_CONF_UART3_TXD  &= ~(0x7<<0 | 0x01<<16 | 0x01<<17 | 0x01<<18);
CTRL_CONF_UART3_TXD  |=  (0x7<<0 | 0x01<<17);
CTRL_CONF_UART3_RTSN &= ~(0x7<<0 | 0x01<<16 | 0x01<<17 | 0x01<<18);
CTRL_CONF_UART3_RTSN |=  (0x7<<0 | 0x01<<17);
CTRL_CONF_UART3_CTSN &= ~(0x7<<0 | 0x01<<16 | 0x01<<17 | 0x01<<18);
CTRL_CONF_UART3_CTSN |=  (0x7<<0 | 0x01<<17);GPIO5->OE &= ~(0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);GPIO5->SETDATAOUT |= (0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);

}
{% endcodeblock %}
将前面的第5步根据需求,封装成分别操作每个灯;
总开关(1开0关):
{% codeblock lang:c%}
void led_switch(unsigned char on_off)
{
if(on_off)
GPIO5->DATAOUT |= (0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);
else
GPIO5->DATAOUT &= ~(0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);
}
{% endcodeblock %}

每个灯的独立开关(1开0关):
{% codeblock lang:c%}
void led0_switch(unsigned char on_off)
{
if(on_off)
GPIO5->DATAOUT |= (0x01<<0);
else
GPIO5->DATAOUT &= ~(0x01<<0);
}

void led1_switch(unsigned char on_off)
{
if(on_off)
GPIO5->DATAOUT |= (0x01<<1);
else
GPIO5->DATAOUT &= ~(0x01<<1);
}

void led2_switch(unsigned char on_off)
{
if(on_off)
GPIO5->DATAOUT |= (0x01<<2);
else
GPIO5->DATAOUT &= ~(0x01<<2);
}

void led3_switch(unsigned char on_off)
{
if(on_off)
GPIO5->DATAOUT |= (0x01<<3);
else
GPIO5->DATAOUT &= ~(0x01<<3);
}
{% endcodeblock %}

3.下载设置

AM437X支持多种方式启动,比如:flash memory, memory cards and UART, USB, or Ethernet.以后估计使用U盘和SD卡的情况居多。
U盘和SD卡启动对image有一定的格式要求,需要加个头信息。该部分在参考手册5.2.9 Image Format有介绍,后面有时间再分析。

这里直接用现成的tiimage.c进行加头操作。tiimage.c和程序的交叉编译,都是在Linux进行的,需要做如下步骤:
1.清理,交叉编译;
2.编译,加头;
3.重命名;
4.复制到SD卡(U盘);

为了方便,写了脚本完成以上操作,只需要插上U盘(Windows下),然后ssh登陆执行脚本即可。关于工作流的想法,后面找个时间写写。

{% codeblock lang:bash [hceng_am437x_create_MLO.sh] https://github.com/hceng/learn/blob/master/shell/hceng_am437x_create_MLO.sh%}
#!/bin/bash

myPath="/mnt/hgfs/windows/" #利用虚拟机"文件共享"WindowsU盘的路径
RED_COLOR=’\E[1;31m’ #红
GREEN_COLOR=’\E[1;32m’ #绿
YELOW_COLOR=’\E[1;33m’ #黄
BLUE_COLOR=’\E[1;34m’ #蓝
PINK=’\E[1;35m’ #粉红
RES=’\E[0m’ #END

#生成MLO
function creat_MLO()
{
rm -f /mnt/hgfs/windows/MLO
make clean
make
gcc ./image_tool/tiimage.c -o tiimage.out
./tiimage.out 0x40300000 MMCSD am437x_hardware.bin /mnt/hgfs/windows/MLO
rm -f *.dis *.bin *.o *_elf tiimage.out
ls /mnt/hgfs/windows/MLO -l && echo -e “GREENCOLOR======MLOOK!======{GREEN_COLOR}======MLO OK!======GREENC​OLOR======MLOOK!======{RES}”
|| echo -e “REDCOLOR======MLOERROR!======{RED_COLOR}======MLO ERROR!======REDC​OLOR======MLOERROR!======{RES}”
sync
}

#判断U盘路径是否存在;
#存在则生成MLO、拷贝,不存在则提示报错
if [ ! -d “myPath&quot;];thenecho−e&quot;myPath&quot; ];then echo -e &quot;myPath"];thenecho−e"{RED_COLOR}Check USB Disk!${RES}”
else
creat_MLO
fi
sync
exit
{% endcodeblock %}

AM437x——LED裸机相关推荐

  1. iar 连接linux开发板,LED裸机程序(IAR)

    LED裸机程序(IAR) 一.实验环境 开发环境:IAR5.30 开发板:UT-S3C6410 开发工具:JLINK V8 二.实验目的 在无操作系统的开发板上,运行程序,掌握裸机程序的开发过程,熟悉 ...

  2. Ti437x LED裸机程序全解

    最近在玩AM437X,记录下一些学习过程.分为裸机和驱动. 转载:http://www.hceng.cn 0.准备文件 AM437x EVM Schematic(后称原理图YP) am4378(后称芯 ...

  3. u-boot-2014.10移植第3天----LED裸机程序

    硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 在移植u-boot之前我 ...

  4. 一灯大师之点亮OK6410开发板上4个LED裸机程序---嵌入式回归第十篇

    接着上一篇关闭mmu和cache后,这一篇来点亮开发板上的一盏LED小灯,前面所作的初始化工作基本看不到效果,其实这一段也是最麻烦的!如果有问题调试很麻烦!点亮了LED之后就可以用LED来看程序是否如 ...

  5. RK3399——裸机大全

    CSDN仅用于增加百度收录权重,排版未优化,日常不维护.请访问:www.hceng.cn 查看.评论. 本博文对应地址: https://hceng.cn/2018/08/16/RK3399--裸机大 ...

  6. ARM嵌入式裸机程序学习(一)

    这里不用ADS集成开发环境,因为ads兼容性存在问题,而且通过自己手动编译\链接对学习有好处,所以我们下面都在linux环境下进行ARM开发. 开发环境:Linux操作系统(Ubuntu) 开发工具: ...

  7. 【正点原子Linux连载】第一章 应用编程概念-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  8. 【开源共享】全网最简单易用的imx6ull烧写工具设计初衷工作原理设计前的思考

    在线课堂:https://www.100ask.net/index(课程观看) 论  坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taoba ...

  9. linux 下搭建yolov3错误,yolov3---报段错误的可能原因及解决方法

    参考: ************************************************************************************************ ...

  10. Tiny4412——Android灯光系统

    CSDN仅用于增加百度收录权重,排版未优化,日常不维护.请访问:www.hceng.cn 查看.评论. 本博文对应地址: https://hceng.cn/2019/05/09/Tiny4412--A ...

最新文章

  1. linux php环境升级,php5.6升级到php7.1.10(Linux环境)
  2. 多迪将企业的Python工程师定位成哪几类?
  3. RHEL5.3下搭建LAMP+Django环境(二)
  4. python笔记之序列(tuple的基本使用和常用操作)
  5. win10 4k分屏 eclipse等工具打开后按钮图标大小问题解决方案
  6. git日常使用的常用命令总结
  7. Ubuntu 18.04下Couldn't connect to Docker daemon at http+docker://localunixsocket解决办法
  8. Linux命令:more
  9. python免费 爬取原创力文档并转换成pdf(部分版)
  10. 数据结构与算法笔记——用Go语言描述
  11. python中输出编码问题,pyspark、spark.show、
  12. 落花已去,相思成冢。十月的杜鹃雨,下得纷纷扬扬。我走在花瓣雨下,回忆我们曾经的甜蜜温馨,一回首,一抬头,仿佛你就在灯火阑珊处。那些掉落在地上的杜鹃,成了相思的墓,也许是为了祭奠我们曾经的美好。 杜鹃
  13. 阿里千万级实时监控系统技术揭秘TSDB时序业务场景
  14. emacs常用操作笔记
  15. springboot vue电影购票选座网站源码
  16. 如何管理好仓库/库房?
  17. JavaScript实现猫吃鱼小游戏
  18. 智领云彭锋受邀参加2022数字经济领航者峰会,深度探讨“云原生时代的数据赋能”...
  19. COSMIC案例:发票处理功能的规模度量
  20. 安卓去除虚拟按键(home键,返回键,列表键)

热门文章

  1. 高等数学考研笔记(九)
  2. Java面试知识点汇总
  3. 研发团队管理实践总结
  4. Redis 哨兵(Sentinel)相互监控、判断Master是否下线、处理Master故障(Automatic Failover:自动故障转移)、Sentinal总结
  5. python怎么编辑浏览器_怎样修改anaconda默认浏览器
  6. C++实现简单数独游戏
  7. 为什么我们现在不再需要杀毒软件了?
  8. ArcGIS 关于三维立体地图 简单使用,里面的资源就在 arcgis 的demo里面有
  9. 从C++11到C++23(一) C++20圆周率、常数e和常见对数
  10. 可以用的网上图片地址(转载)