Ti437x LED裸机程序全解
来源:互联网 发布:网络大电影演员演出费 编辑:程序博客网 时间:2024/06/05 02:20
- 最近在玩AM437X,记录下一些学习过程。分为裸机和驱动。
转载:http://www.hceng.cn
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外设时钟;
PRCM_CM_PER_GPIO5_CLKCTRL = (0x01<<1);
2.设置GPIO模式(默认使能了上拉,且为GPIO模式);
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模式,设置上拉
3.设置为输出;
GPIO5->OE &= ~(0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);
4.设置允许输出位;
GPIO5->SETDATAOUT |= (0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);
5.设置输出值;
GPIO5->DATAOUT |= (0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);//高GPIO5->DATAOUT &= ~(0x01<<0 | 0x01<<1 | 0x01<<2 | 0x01<<3);//低
6.封装成函数;
将前面的1-4步,封装为void led_init(void);
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);}
将前面的第5步根据需求,封装成分别操作每个灯;
总开关(1开0关):
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);}
- 每个灯的独立开关(1开0关):
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);}
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登陆执行脚本即可。关于工作流的想法,后面找个时间写写。
{ [hceng_am437x_create_MLO.sh] https://github.com/hceng/learn/blob/master/shell/hceng_am437x_create_MLO.sh}
#!/bin/bashmyPath="/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#生成MLOfunction 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 "${GREEN_COLOR}======MLO OK!======${RES}"\ || echo -e "${RED_COLOR}======MLO ERROR!======${RES}" sync}#判断U盘路径是否存在;#存在则生成MLO、拷贝,不存在则提示报错if [ ! -d "$myPath" ];then echo -e "${RED_COLOR}======Check USB Disk!======${RES}" else creat_MLO fi syncexit
阅读全文
0 0
- Ti437x LED裸机程序全解
- Ti437x LED总线驱动模型程序+设备树
- LED裸机程序(IAR)
- mini2440裸机程序LED
- OK6410裸机程序 ----led
- s3c2440裸机程序之----LED
- 中断控制LED裸机程序
- 裸机程序-led流水灯
- mini 2440裸机 LED程序
- TX2440裸机程序之-LED
- S3C6410 LED裸机程序分析
- 【OK6410裸机程序】点亮LED
- arm裸机程序--LED程序设计
- 2440裸机程序分析之led
- ok6410-第06篇-裸机led程序
- S3C2440裸机程序开发点亮LED
- tiny6410的led裸机程序源代码
- mini2440裸机程序测试第一部-LED
- MNIST机器学习入门
- windows与Ubuntu双系统的安装
- openjudge 求逆序对数(线段树+离散化)
- Tomcat修改更换默认欢迎页面
- Ch_03 表、栈和队列
- Ti437x LED裸机程序全解
- ImageLoader加载图片
- 触摸[6] OverScroller
- 一个强悍而优美的Android视频播放器
- Android实现帧动画
- git将项目代码上传到github
- jsp的工作原理
- Action View
- 堆排序算法(java版)