FS4412简介

  • FS4412简介
  • FS4412点灯

FS4412简介

FS4412点灯

  • FS4412简介
  • FS4412点灯

前几天拿到了一块板子FS4412是基于samsung的arm Cortex-A9的Exynos4412的板子,Exynos4412采用了32nm HKMG工艺,是samsung的第一款四核芯片,Exynos 4412有两种封装SCP和POP;Exynos 4412处理器当前sanmung推出了两个封装版本(PoP和SCP),其中PoP封装主要是针对智能手机等产品体积要求严格的项目中使用。由于采用了DDR和处理器叠层的焊接工艺,使得设计者对于DDR部分的LAYOUT节省了大量的工程周期,且解决了EMI等复杂电气问题,但同时也导致其他有一些问题呈现出来。

1, Exynos 4412的PoP版本当前大DDR为1GB, 如果客户有内存扩容的可能,将后悔莫及;

2, Exynos 4412的BGA间距为0.4mm,这是当前焊接工厂的极限能力,客户在生产工厂的选择上增加了难度,且成品的报废率明显上升;

3, 由于BGA间距太小,PCB布线方面通常需要二阶盲埋孔的HDI板才能完成,使得PCB的成本和周期大大增加;

4, Exynos 4412的PoP版本官方不再对大众用户做进一步的技术支持和文档的开放。


因此FS4412采用了SCP封装。



FS4412开发板硬件:


FS4412点灯

【实验内容】编写GPIO模块程序,点亮FS_4412开发板上的LED灯。【实验目的】熟悉开发环境的使用掌握Exynos4412处理器GPIO功能【实验平台】FS_4412 Cortex-A9开发板、FS_Jtag仿真器、Eclipse


代码:

#define GPX2CON (volatile unsigned int *)0x11000c40
#define GPX2DAT (volatile unsigned int *)0x11000c44int main()
{*GPX2CON &= ~(0xf<<28);*GPX2CON |=(1<<28);//设置管脚为输出*GPX2DAT &=~(1<<7); //关闭LED2while(1); //让程序在这里循环,防止跑飞return 0;
}

FS4412的工程模板:link

如果要编译上述代码,需要安装ARM架构的编译器
ARM架构的编译器文件:gcc-4.6.4.tar
安装这个编译器——ARM
这还需要FS4412手册和原理图文件——见我空间资源有

就像上面一样

给你再演示一个:
先看原理图:

LED2=GTX2
LED3=GTX1
LED4=GTX3
LED5=GTX3

从手册中查找LED3的GTX1_0



设置管脚输出:
像上面的一样:

#define LED3CON (volatile unsigned int *)0x11000c20
#define LED3DAT (volatile unsigned int *)0x11000c24//led3设置为输出*LED3CON &=~(0xf<<0);*LED3CON |= (1<<0);//关闭led3*LED3DAT &=~(1<<0);

LED4的为:

#define LED4CON (volatile unsigned int *)0x114001e0
#define LED4DAT (volatile unsigned int *)0x114001e4//led4设置为输出*LED4CON &= ~(0xf<<16);*LED4CON |= (1<<16);//关闭led4*LED4DAT &= ~(1<<4);

LED5与LED4的寄存器相同

#define LED5CON (volatile unsigned int *)0x114001e0
#define LED5DAT (volatile unsigned int *)0x114001e4
//led5设置为输出*LED5CON &= ~(0xf<<20);*LED5CON |= (1<<20);//关闭led5*LED5DAT &= ~(1<<5);

延时代码:

void delay_ms(int z)
{int x,y;for(x=z;x>0;x--)for(y=2500;y>0;y--);
}

总体代码:

#define LED2CON (volatile unsigned int *)0x11000c40#define LED2DAT (volatile unsigned int *)0x11000c44#define LED3CON (volatile unsigned int *)0x11000c20#define LED3DAT (volatile unsigned int *)0x11000c24#define LED4CON (volatile unsigned int *)0x114001e0#define LED4DAT (volatile unsigned int *)0x114001e4#define LED5CON (volatile unsigned int *)0x114001e0#define LED5DAT (volatile unsigned int *)0x114001e4void delay_ms(int z){int x,y;for(x=z;x>0;x--)for(y=2500;y>0;y--);}int main(){//led2设置为输出*LED2CON &= ~(0xf<<28);*LED2CON |= (1<<28);   //设置管脚为输出//关闭led2*LED2DAT &=~(1<<7);   //关闭LED2//led3设置为输出*LED3CON &=~(0xf<<0);*LED3CON |= (1<<0);//关闭led3*LED3DAT &=~(1<<0);//led4设置为输出*LED4CON &= ~(0xf<<16);*LED4CON |= (1<<16);//关闭led4*LED4DAT &= ~(1<<4);//led5设置为输出*LED5CON &= ~(0xf<<20);*LED5CON |= (1<<20);//关闭led5*LED5DAT &= ~(1<<5);while(1){*LED2DAT |= (1<<7); //灯亮delay_ms(1000);*LED2DAT &=~(1<<7); //灯灭delay_ms(1000);*LED3DAT |= (1<<0); //灯亮delay_ms(1000);*LED3DAT &=~(1<<0); //灯灭delay_ms(1000);*LED4DAT |= (1<<4); //灯亮delay_ms(1000);*LED4DAT &=~(1<<4); //灯灭delay_ms(1000);*LED5DAT |= (1<<5); //灯亮delay_ms(1000);*LED5DAT &=~(1<<5); //灯灭delay_ms(1000);}return 0;}

优化代码:

#define LED2CON (volatile unsigned int *)0x11000c40
#define LED2DAT (volatile unsigned int *)0x11000c44
#define LED3CON (volatile unsigned int *)0x11000c20
#define LED3DAT (volatile unsigned int *)0x11000c24
#define LED4CON (volatile unsigned int *)0x114001e0
#define LED4DAT (volatile unsigned int *)0x114001e4
#define LED5CON (volatile unsigned int *)0x114001e0
#define LED5DAT (volatile unsigned int *)0x114001e4#define LED2 2
#define LED3 3
#define LED4 4
#define LED5 5#define ON 1
#define OFF 0void delay_ms(int z)
{int x,y;for(x=z;x>0;x--)for(y=2500;y>0;y--);
}void led_init()
{//led2设置为输出*LED2CON &= ~(0xf<<28);*LED2CON |= (1<<28);   //设置管脚为输出//关闭led2*LED2DAT &=~(1<<7);   //关闭LED2//led3设置为输出*LED3CON &=~(0xf<<0);*LED3CON |= (1<<0);//关闭led3*LED3DAT &=~(1<<0);//led4设置为输出*LED4CON &= ~(0xf<<16);*LED4CON |= (1<<16);//关闭led4*LED4DAT &= ~(1<<4);//led5设置为输出*LED5CON &= ~(0xf<<20);*LED5CON |= (1<<20);//关闭led5*LED5DAT &= ~(1<<5);
}void led_set_value(int which,int status)
{switch(which){case LED2:status?(*LED2DAT|=(1<<7)):(*LED2DAT&=~(1<<7));break;case LED3:status?(*LED3DAT|=(1<<0)):(*LED3DAT&=~(1<<0));break;case LED4:status?(*LED4DAT|=(1<<4)):(*LED4DAT&=~(1<<4));break;case LED5:status?(*LED5DAT|=(1<<5)):(*LED5DAT&=~(1<<5));break;}}void led_set_blink(int which,int dms)
{led_set_value(which,ON);delay_ms(dms);led_set_value(which,OFF);delay_ms(dms);
}int main()
{//init all ledled_init();while(1){led_set_blink(LED2,1000);led_set_blink(LED3,1000);led_set_blink(LED4,1000);led_set_blink(LED5,1000);}return 0;
}

编译的过程

【2】LED灯代码编写(ARM)将这个压缩包demo.tar.gz拷贝到ubuntu中并解压(工程模板)start/   ===>系统的启动代码map.lds  ===>链接脚本,在编译和执行的时候会用到 *Makefile ===>编译代码的脚本*interface.c ===>你需要编写的文件common  ===>移植好的代码(printf)interface.c#define GPX2CON (volatile unsigned int *)0x11000c40#define GPX2DAT (volatile unsigned int *)0x11000c44int main(){*GPX2CON &= ~(0xf<<28);*GPX2CON |= (1<<28);   //设置管脚为输出*GPX2DAT &=~(1<<7);   //关闭LED2while(1);  //让程序在这里循环,防止跑飞return 0;}如果要编译上述编写好的代码,需要安装ARM架构的编译器gcc-4.6.4.tar.xz
【3】如何安装交叉编译器1.将ARM架构的编译拿到ubuntu中将编译器从windows直接拖到ubuntu的终端上mv   xxxxxxxxxxx/gcc-4.6.4.tar.xz   .2.在用户的家目录下创建toolscdmkdir toolsmv ~/gcc-4.6.4.tar.xz  ~/toolscd tools3.解压tar -xvf gcc-4.6.4.tar.xz解压后生成===>gcc-4.6.44.安装交叉编译器sudo vi /etc/environmentPATH=xxxxxxxxx:/home/edu/tools/gcc-4.6.4/bin/"保存退出后5.重启ubuntu让编译器生效sudo reboot6.验证arm-linux-gcc -v如果能看到gcc 4.6.4说明安装成功了【4】如何编译代码vi MakefileCROSS_COMPILE = arm-linux-    保存退出编译:make  ===========>interface.bin清楚编译:make clean
【5】如何下载程序到开发板上FS4412 # loadb 0x40008000   (下载二进制文件到0x40008000内存上)## Ready for binary (kermit) download to 0x40008000 at 115200 bps...将二进制文件通过串口软件发送给开发板Transfer->send kermit-->找到.bin文件点击OK跳转到40008000内存地址执行即可


初学FS4412——简介和点灯相关推荐

  1. 51单片机学习笔记-1简介及点灯

    51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...

  2. 激光SLAM入门学习笔记

    激光SLAM入门学习笔记 激光SLAM入门学习笔记 一.推荐阅读书籍 二.推荐公众号.知乎.博客 1.公众号 2.知乎 3.博客 三.推荐阅读论文&代码(参考泡泡机器人) 2D激光SLAM 3 ...

  3. 初学Java多线程:线程简介

     Java多线程初学者指南系列教程http://developer.51cto.com/art/200911/162925.htm 初学Java多线程:线程简介 2009-06-29 17:49 ...

  4. FS4412开发板简介

    FS4412开发板介绍 <1>简介 FS4412 采用的处理器使用Samsung 最新的ARM Cortex-A9 四核CPU 的Exynos4412, 主频达到1.4~1.6GHz.该芯 ...

  5. 初学Verilog语言基础笔记整理(实例点灯代码分析)持续更新~

    实例:点灯学习 一.Verilog语法学习 1. 参考文章 刚接触Verilog,作为一个硬件小白,只能尝试着去理解,文章未完-持续更新. 参考博客文章: Verilog语言入门学习(1) Veril ...

  6. 初学STM32,使用HAL库点灯全过程

    本文用于记录学习过程,如果有写错的地方,还请各位看官指出来 使用的软件:keil5,STM32cubeMX,网易有道翻译 老样子,这次要点亮的灯还是PE^5; 然后打开STM32cubeMX 选着第一 ...

  7. Day1--FreeRTOS简介及多任务点灯、多任务传参、Mutex

    实时操作系统(Real Time Operating System,简称RTOS) Arduino任务执行流程:单线程执行任务 RTOS:可以同时执行所有Task,每个任务都有自己的循环 操作系统排行 ...

  8. Python初学15——wordcloud库简介与使用

    目录 一.wordcloud库基本介绍 二.wordcloud库使用说明( .WordCloud(width= ,height=, min_font_size=, max_font_size=, fo ...

  9. Python初学13——jieba库简介与使用

    目录 一.jieba库基本介绍 二.jieba库的使用说明(三种模式.lcut().lcut_for_search().add_word() ) 三."文本词频统计"实例 一.ji ...

最新文章

  1. ROS关于cv_brige的使用
  2. Mac 技术篇-设置Finder文件管理显示文件路径
  3. mongodb 安装启动
  4. linux源代码安装程序
  5. 开源JVM Sampling Profiler
  6. Solidity 官方文档中文版 2_Ethereum 智能合约介绍
  7. Style主题Theme风格Android
  8. 梦幻西游五虎将访谈系列:主策划小白
  9. Python分析《哈哈哈哈哈》4万弹幕
  10. 基于阶梯灰度图法的空间光调制器相位延迟测量
  11. docker部署微服务
  12. 处理eclipse项目左下角有个红叉的问题
  13. eclipse开发android入门学习
  14. 手机制作安卓apk和android studio一样
  15. stay hungary stay foolish
  16. 【乐逍遥网站设计】带你了解2022年网站设计流行趋势
  17. HTML5播放器杂音,HTML5 P5.js使用噪音算法实现的超炫彩虹曲线
  18. 2019软件测试工程师面试题集锦
  19. 你不可不知的网站:stackoverflow
  20. 用安卓手机看epub电子书用什么阅读软件好?

热门文章

  1. aerospike_install_sql
  2. c语言与汇编语言混合编程
  3. JavaWeb前端技术总结
  4. 重庆计算机一级考试上机试题,重庆计算机一级考试B上机试题
  5. 第五周学习博客(CSS)
  6. 【Word】删除页眉底部横线
  7. ie中绝对定位后的bug
  8. 【LeetCode】IPO(使用贪心求解)
  9. 二级C语言操作例题(二)
  10. 计算机基础大纲及试题答案,计算机基础考试大纲与模拟试题.doc