关于ADS V1.2开发环境

从开始用freescale 的CodeWarrior起到这个ADS V1.2 ,一直认为这个开发环境做得不好。有几个问题。 1.当make完之后在xx.o文件报错有不明物体,双击这条error, 它没帮你定位到xx.c里。以至于你还得打开xx.c CTRL+F,找出这个不明物体。这很烦,有时候会觉得这个编译器很无语。 2.ADS V1.2的工程管理不能靠边?dock,至今没找到这个功能。。以至于窗口管理乱糟糟的。    

嵌入式开学-先认识硬件

这里使用的是TQ2440开发板,CPU 一般运行在400M的时钟频率。核心板载有两片Hynix(海力士,又叫现代内存)256Mb的SDRAM合64MB的内存,256MB SAMSUNG 的Nand flash,2MB 的Eon(宜扬) 的Nor flash。 首先,Nor flash 和 Nand flash 的区别? Nor flash的有自己的地址线和数据线,操作以字为单位,可以采用类似于memory的随机访问方式,在nor flash上可以直接运行程序,所以nor flash可以直接用来做boot,采用nor flash启动的时候会把地址映射到0x00上。类似于计算机内BIOS的存放位置。 Nand flash是IO设备,类似于计算机的硬盘,数据、地址、控制线都是共用的,需要软件区控制读取时序,更无法挂在ARM的程序空间,所以不能像nor flash、内存一样随机访问,不能EIP(片上运行),因此不能直接作为boot。一般Nand flash 用来存储系统程序,系统上电后由Nor flash中的BootLoader将系统加载进RAM中的可执行地址中运行,然后跳到主程序中运行。(这有点像冯.诺伊曼架构,程序和数据都在RAM中)。Nand flash在读取数据量较大的成块数据时,速度较快。

基于Altera FPGA的 摄像头+LCD DIY

        前些日子买了个大家玩得很火的OV7670来玩玩,由于之前没玩过摄像头,也听说不带FIFO的摄像头采集起来是那么困难,所以就买了个不带FIFO的来尝尝鲜。后来看了资料才知道,一幅QVGA的图像按320*240*2Byte来算,也要153.6KB内存,对单片机来说是一比不小的开销。更何况单片机的速率才多少M,就按50M主频来说,捕捉一个8M左右的像素时钟也是相当困难的。当然后面也用STM32F103ZET6来尝试捕捉了一下,结果也是不尽人意。 考虑到时钟的捕捉,当然是用FPGA的硬件电路来实现才是王道了。又想想摄像头和液晶屏的初始化也是相当麻烦的,如果也用硬件电路来实现,那写起代码来就是一大串了,而且改起来也不方便。于是乎,脑子里一直存在的一个想法在这里就能得到真正的应用和实现了。那就是MCU与FPGA结合的方案。手上正有一款Altera 的EP2C8Q208C的开发板。那么我们的DIY就开始了。           首先要准备的东西就是 一个OV7670摄像头,一块TFT液晶屏,一块FPGA核心板。使用Nios II做为主控MCU会使你的DIY简洁很多。系统主要的结构就如下:           一个Nios II MCU,一个VGA转8080并口的模块VGA_8080,一个MCU与VGA_8080模块分别对LCD控制的总线切换模块。模块分工,MCU负责初始化液晶屏和OV7670。 VGA_8080负责OV7670的VGA输出时序转换成LCD的16bit的8080并口时序 。由于我的LCD是320*240的,所以我们只 使用QVGA输出,并且LCD使用的是565的像素格式,我们也将OV7670配置成565像素格式,这样能够使我们的编程方便很多。 我们的主要任务分为以下几块:1.nios ii MCU的搭建; 2.nios ii软件程序的编写;3.fpga硬件代码的编写。 一、NIOS ii MCU搭建可参考《NIOS ii 那些事儿》,硬件上要求板子上带有SDRAM, 否则内存不够会很麻烦。等系统整体编译通过后可以把代码写入flash当中,这样每次掉电后开机就能直接运行了。主要配置一个LCD的控制口,SDRAM的控制口,OV7670的SCCB控制口。这里有几个注意点:1.FPGA的双向口处理,由于SCCB的SIOD数据口是双向的,所以在配置时要配置成双向口,画顶层Pin时也要用bidir。2.本来液晶屏的数据口也是双向的,但是在FPGA内部没有三态门,按顶层那样的连接无法实现双向,要实现的话只能通过将IO口引出来,再把IO口连接到其它pin脚输入,不过这样很麻烦,就省了,LCD代码中要改动LCD读数据的部分。(不知道各位还有什么好办法能实现内部的双向口?) 二、然后就是LCD代码,和OV7670初始化代码的移植,之前都是在STM32上跑的,想办法把它们移植到NIOS ii当中,基本上只需修改IO口读写部分的代码就行了。 三、关键部分就是FPGA硬件上实现 OV7670的QVGA时序到液晶屏读写时序的转换。Bus_Switcher就是个2选一的多路选择器,负责切换LCD的控制总线。在主MCU初始化液晶屏和OV7670之后,就把液晶屏的控制总线交给VGA_8080控制模块,直接将OV7670的QVGA时序写入到液晶屏的GRAM当中,这样显示的帧频就能达到很高,画面非常流畅。在后期设计中可以再设置一个存储器,将图片保存下来。这里仅仅实现的摄像头信号的高速显示。这里的代码基本上可达到要求了,还有些小细节要优化,后期还可以添加一系列按钮调整OV7670的各种参数,非常之方便。 module VGA_8080(iclk, rst_n, XCLK, HREF, VSYNC, PCLK, C_DATA, LCD_CS, LCD_WR, LCD_RD, LCD_RS, LCD_RST, LCD_DATA); input rst_n; input iclk; // camera IO; output XCLK; input HREF, VSYNC, […]