inout 用法
摘要:芯片外部引脚很多都使用inout类型的,为的是节省管腿。一般信号线用做总线等双向数据传输的时候就要用到INOUT类型了。就是一个端口同时做输入和输出。 inout在具体实现上一般用三态门来实现。三态门的第三个状态就是高阻'Z'。 当inout端口不输出时,将三态门置高阻。这样信号就不会因为两端同时输出而出错了,更详细的内容可以搜索一下三态门tri-state的资料.1 使用inout类型数据,可以用如下写法:inout data_inout;input data_in;reg data_reg;//data_inout的映象寄存器reg link_data;assign dat
阅读全文
posted @
2012-08-25 13:20
啊德Blog
阅读(2540)
推荐(0)
自己写的还有问题的SD卡IP
摘要:module LDM_SDCARD( //Avalon Clock input csi_clk, input csi_rst_n, //Avalon-MM input avs_chipselect, input [1:0] avs_address, //multiple of 4// input [1:0] avs_byteenable_n, //1,2,4,8,16,54,128 input avs_write, input [31:0] avs_writedata, //32bit cpu input avs_read, output reg [31:0] avs_readdata, /.
阅读全文
posted @
2012-08-25 00:07
啊德Blog
阅读(572)
推荐(0)
LCD1602 IP Design
摘要:Avalon-MM____LCD1602 IP Design(1)verilog代码/********************************************************************* Module Name : Crazy_LCD1602* Author : Crazy Bingo* Device : EP2C8Q208C8 * Version : Quartus II 10.1* Date : 2011-3-3* Description : *******************************************************
阅读全文
posted @
2012-08-23 00:42
啊德Blog
阅读(481)
推荐(0)
NIOS II常用函数整理【转】
摘要:IO操作函数函数原型:IORD(BASE, REGNUM) 输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量函数说明:从基地址为BASE的设备中读取寄存器中偏移量为REGNUM的单元里面的值。寄存器的值在地址总线的范围之内。返回值: -函数原型:IOWR(BASE, REGNUM, DATA)输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量,DATA为要写入的数据函数说明:往偏移量为REGNUM寄存器中写入数据。寄存器的值在地址总线的范围之内。返回值: -函数原型:IORD_32DIRECT(BASE, OFFSET) (注意:类似 IOxx_xDIRECT的.
阅读全文
posted @
2012-08-23 00:28
啊德Blog
阅读(641)
推荐(0)
基于DE0的数字钟【SOPC+NIOS】
摘要:http://www.ceet.hbnu.edu.cn/bbs/viewthread.php?tid=7281&extra=page%3D2写在前面的话:最近两天在写这个东西,一直没写出来,最终在一个FPGA研究群里受人指点: #define seg1*(volatile unsigned char *) SEG_1_BASE 这种寄存器映射如果CPU等级选在F型的话,就不能映射,所以我改为S型的。 至于为什么,我也没弄清楚,一会把原因发给大家,我把C程序给大家看。#include "system.h" //包含基本的硬件描述信息#include "alt
阅读全文
posted @
2012-08-23 00:26
啊德Blog
阅读(969)
推荐(0)
NIOS 寄存器的三种映射方式
摘要:http://www.ceet.hbnu.edu.cn/bbs/viewthread.php?tid=7325alt寄存器赋值三种方式:一、#ifdef CRAZY_LED_DATA#define LED_DATA_ADDR (LED_DATA_BASE | (1<<31))#define LED_DATA (*(volatile unsigned int*)LED_DATA_ADDR)#endif二、用API函数 IOWR,IORD…三、用结构体#ifdef CRAZY_LCD1602#define LCD1602_ADDR (LCD1602_BASE | (1<<3
阅读全文
posted @
2012-08-23 00:17
啊德Blog
阅读(715)
推荐(0)
NIOS 寄存器映射方法
摘要:此处以我所写的MAX7219为范例,从HDL接口描述到C语言软件编程,分析两种表面不一样、但实质是一样的寄存器映射方法,找出其中联系与区别。http://www.cnblogs.com/yuphone/archive/2010/04/22/1717779.html方法1 使用Altera提供的API1. 使用HDL描述Avalon-MM接口代码1 Amy_S_max7219_avalon_interface.v?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505
阅读全文
posted @
2012-08-23 00:10
啊德Blog
阅读(754)
推荐(0)
SOPC 8位数码管动态扫描的定制IP
摘要:SOPC 8位数码管动态扫描的定制IPhttp://www.cnblogs.com/Neddy/archive/2010/07/08/1773983.html8位数码管的IP,是动态扫描的//SEG.vmodule SEG(clk,reset_n,address,write,writedata,SEG,COM); input clk; input reset_n; input address; input write; input [31:0] writedata; output [7:0] SEG; //共阳极数码管的段码output [7:0] COM; //位码reg [31:0] da
阅读全文
posted @
2012-08-22 23:48
啊德Blog
阅读(530)
推荐(0)
原创:最近做简易数码相机,基本成功,上图
摘要:SD+ZNFAT+NIOS II + OV7670 +FIFO电路板图片拍摄的照片:
阅读全文
posted @
2012-08-22 14:15
啊德Blog
阅读(404)
推荐(0)
Avalon-MM____SD_CARD IP Design
摘要:http://www.cnblogs.com/crazybingo/archive/2011/03/03/1970151.html(1)verilog代码/********************************************************************* Module Name : Crazy_SDCARD* Author : Crazy Bingo* Device : EP2C8Q208C8 * Version : Quartus II 10.1* Date : 2011-3-3* Description : *********************
阅读全文
posted @
2012-08-21 23:17
啊德Blog
阅读(330)
推荐(0)
转:在SOPC定制自己的IP
摘要:http://www.cnblogs.com/kingst/archive/2010/06/05/1752363.htmlNIOS II是一个建立在FPGA上的嵌入式软核处理器,除了可以根据需要任意添加已经提供的外设外,用户还可以通过定制用户逻辑外设和定制用户指令来实现各种应用要求。这节我们就来研究如何定制基于Avalon总线的用户外设。SOPC Builder提供了一个元件编辑器,通过这个元件编辑器我们就可以将我们自己写的逻辑封装成一个SOPC Builder元件了。下面,我们就以PWM实验为例,详细介绍一下定制基于Avalon总线的用户外设的过程。 我们要将的PWM是基于Avalon总线中
阅读全文
posted @
2012-08-21 22:34
啊德Blog
阅读(1812)
推荐(1)
STM32 FatFS 移植经验分享
摘要:STM32中 FatFS移植http://www.amobbs.com/forum.php?mod=viewthread&tid=5464257&highlight=STM32%2BFatFS%2B%E7%A7%BB%E6%A4%8D%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB前言与废话 做项目时网找资料,不会的东西上网查阅一下多半可以解决,一些尚未解决的问题也会有所启发。最近由于项目的需要,仔细阅读了SD卡相关内容,顺藤摸瓜学习FatFS。网上关于SD卡和FatFS的内容非常的多,重复的部分我就不介绍了,我把移植和使用部分的经验和大家分享一下。刚开
阅读全文
posted @
2012-08-20 12:57
啊德Blog
阅读(8423)
推荐(2)
STM32的FATFS文件系统移植笔记
摘要:STM32的FATFS文件系统移植笔记一、序言 经常在网上、群里看到很多人问关于STM32的FATFS文件系统移植的问题,刚好自己最近也在调试这个程序,为了让大家少走弯路,我把我的调试过程和方法也贡献给大家。二、FATFS简介 FatFs Module是一种完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,可以移植到8051、PIC、AVR、SH、Z80、H8、ARM等系列单片机上而只需做简单的修改。它支持FATl2、FATl6和FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对8位单片机和1..
阅读全文
posted @
2012-08-20 12:16
啊德Blog
阅读(36736)
推荐(7)
FatFS文件系统详解-附移植建议
摘要:http://blog.csdn.net/juana1/article/details/6867829最近做的spi flash,本打算弄个文件系统,由于之前用过了JFFS、YAFFS和TrueFFS,代码量都相当的大,这次想找款代码量不那么吓人的,学习一下,听说配置会相对复杂一些。选来选去,最终选定了FatFS,代码量足够的小,最新的R0.09版本只有1个.c文件(当然,还有一个底层的要自己写,option文件夹里的无视),老点版本就更小了。而且更新很频繁,用户量也够大,就选定它了。尽管最后由于硬件和项目原因未能实际的移植它到vxWorks,但学过的还是要记录下。 在这里http://elm
阅读全文
posted @
2012-08-20 10:36
啊德Blog
阅读(9849)
推荐(2)
NIOS 常用头文件
摘要:#ifndef TERASIC_INCLUDES_H_#define TERASIC_INCLUDES_H_#include <stdio.h>#include <stdlib.h> // malloc, free#include <string.h>#include <stddef.h>#include <unistd.h> // usleep (unix standard?)#include "sys/alt_flash.h"#include "sys/alt_flash_types.h"#
阅读全文
posted @
2012-08-20 00:32
啊德Blog
阅读(2520)
推荐(0)
c语言字符串与整数之间的转换
摘要:在c语言中,我们经常面临需要将字符串转换为整型,以及将整型转化为字符串的问题。将字符串转换为整数的函数在stdlib.h中定义:int atoi(const char *str);atoi函数会跳过str中前面出现的空格,从第一个数字开始转换。下面是我的实现:[cpp] view plaincopyprint?intmy_atoi(constchar*str){//argumentcheckfirst! assert(NULL!=str);intret=0,sign=1;//skiptabandspace for(;*str==''||*str=='\t';st
阅读全文
posted @
2012-08-19 15:51
啊德Blog
阅读(69429)
推荐(3)
SD卡调试关键点
摘要:SD卡调试关键点: SD调试注意点1.上电时要延时足够长的时间给SD卡一个准备过程,在我的程序里是5秒,根据不同的卡设置不同的延时时间。SD卡初始化第一步在发送CMD命令之前,在片选有效的情况下首先要发送至少74个时钟,否则将有可能出现SD卡不能初始化的问题。2.SD卡发送复位命令CMD0后,要发送版本查询命令CMD8,返回状态一般分两种,若返回0x01表示此SD卡接受CMD8,也就是说此SD卡支持版本2;若返回0x05则表示此SD卡支持版本1。因为不同版本的SD卡操作要求有不一样的地方,所以务必查询SD卡的版本号,否则也会出现SD卡无法正常工作的问题。3.理论上要求发送CMD58获得SD卡电
阅读全文
posted @
2012-08-19 15:24
啊德Blog
阅读(686)
推荐(0)
指针相关运用
摘要:指针相关运用转自:http://blog.csdn.net/snowq/archive/2008/01/17/2050129.aspx最近写了一个小程序,遇到一点小问题,是关于指向字符串的指针的。由此一发不可收拾,好奇心驱使我决定研究一下指针的初始化和赋值规则。略有所得之后,执笔记下,以备后用。1、指针的初始化初看起来,指针的初始化和赋值好像很混乱,又是*,又是&,时不时又出来一个数组。其实总结起来很简单:int *p;int a=25;int b[10];int *m=&a;int *n=b;int *r=&b[0];指针的定义如上所示,以*打头的变量代表该变量为指针
阅读全文
posted @
2012-08-19 15:22
啊德Blog
阅读(197)
推荐(0)
字符串 转换大全
摘要:字符串 转换大全c语言字符串 数字转换函数大全最近学数据结构老是做实验常用到字符串和数字的转换想找却发现网上的资料太散所以搜集整理一下 方便以后再用atof(将字符串转换成浮点型数)atoi(将字符串转换成整型数)atol(将字符串转换成长整型数)strtod(将字符串转换成浮点数)strtol(将字符串转换成长整型数)strtoul(将字符串转换成无符号长整型数)toascii(将整型数转换成合法的ASCII 码字符)toupper(将小写字母转换成大写字母)tolower(将大写字母转换成小写字母) atof(将字符串转换成浮点型数)相关函数 atoi,atol,strtod,strtol
阅读全文
posted @
2012-08-19 15:13
啊德Blog
阅读(394)
推荐(0)
详解C中volatile关键字
摘要:详解C中volatile关键字volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:shortflag;voidtest(){do1();while(flag==0);do2();}这段程序等待内存变量flag的值变为1(怀疑此处是0,有点疑问,)之后才运行do2()。变量flag的值由
阅读全文
posted @
2012-08-19 15:08
啊德Blog
阅读(302)
推荐(0)
单片机实现软件复位(软复位)的方法及讨论(转)
摘要:单片机实现软件复位(软复位)的方法及讨论(转)http://hi.baidu.com/wxdpj/blog/item/9707c7823631cdab0cf4d2a7.html单片机软复位有什么好的方法?如从机收到复位命令(软件命令),程序怎么使机器复位?虽然要使软件始终处于可控状态,最好不要用"复位",因为复位是纯硬件过程,软件是不可控的.但是我们还是要讨论方法,一般流传的方法如下:1、放狗;2、((void(code*)(void))0x0000)();3、用单片机一个引脚控制点一下RSTRST;4、用单片机一个引脚控制重新加电;5、用单片机自带的软件复位指令或内狗指令
阅读全文
posted @
2012-08-19 15:03
啊德Blog
阅读(8740)
推荐(0)
复位电路的几种设计
摘要:复位电路的几种设计http://hi.baidu.com/wxdpj/blog/item/bde5b97fe948d50e28388ac6.html复位源是导致单片机内部复位操作的源泉,大致可分为七种:上电复位(POR)﹑人工复位(MRST)﹑电源欠电压复位(LVR)﹑看门狗复位(WDR)﹑软件复位(SWR)﹑软硬件复位(SHR)﹑和非法地址复位(IAR)。一﹑上电复位电路上电复位的实质是上电延时复位,也就是在上电延时期间把CPU锁定在复位状态上,就是为了弥补由于电源滤波电容存在使单片机电源由低到高逐渐上升的时间。如下图示就是利用RC支路的充电时间而形成的常用的上电复位电路。在每次单片机断电之
阅读全文
posted @
2012-08-19 14:58
啊德Blog
阅读(6340)
推荐(0)
data,bdata,idata,pdata,xdata,code存储类型与存储区
摘要:data,bdata,idata,pdata,xdata,code存储类型与存储区bit是在内部数据存储空间中20H..2FH区域中一个位的地址,或者8051位可寻址SFR的一个位地址。code是在0000H..0FFFFH之间的一个代码地址。data是在0到127之间的一个数据存储器地址,或者在128..255范围内的一个特殊功能寄存器(SFR)地址。idata是0to255范围内的一个idata存储器地址。xdata是0to65535范围内的一个xdata存储器地址。指针类型和存储区的关系详解一、存储类型与存储区关系data--->可寻址片内rambdata--->可位寻址的片
阅读全文
posted @
2012-08-19 14:55
啊德Blog
阅读(6102)
推荐(0)
SD/MMC SPI模式下命令集
摘要:1) class1,class3,class9:SPI模式不支持!2) 继SD1.1之后又推出了SD2.0,主要特性是支持更大容量。SD1.1中卡容量存放于CSD寄存器中, 而由于其规范中相关域的值较小,固最大只能表示2G地址。随着Nand容量的大大提高, SD1.1已经不适合潮流,因而推出了SD2.0。 初始化流程大同小义,只需要CMD0之后再加上CMD8命令的识别。SD1.1不支持CMD8, 而SD2.0的CMD8能读到卡的接口信息。如果卡响应CMD8为无效命令,则走SD1.1的流程, 可能是SD1.1或MMC。如CMD8响应正确,则很可能是SD2.0了。3) SD卡具有安全加密功能,内置
阅读全文
posted @
2012-08-19 11:36
啊德Blog
阅读(764)
推荐(0)
LED PWM调光C程序
摘要:#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit LED1 = P2^0; sbit LED = P2^1; //定义LED灯,通过LED显示调光效果 sbit LED2 = P2^2; unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms unsigned char PWM_ON ;//定义高电平时间 /******************************************************************/ /* 延时函数
阅读全文
posted @
2012-08-18 17:41
啊德Blog
阅读(8231)
推荐(1)
FAT文件系统整体概述
摘要:FAT文件系统整体概述MBR:0扇区,分区记录,不一定每个磁盘都有MBR.DBR:可能位于0扇区,若不在0扇区则由MBR计算得到他的位置,以0XEB开始,记录该分区重要参数保留扇区:可能是32个扇区,也有可能不是。第一个FAT表:存储了目录与文件数据的链式存储结构第二个FAT表:作为第一个FAT的备份,防止损坏第二簇:第一个目录所在的簇号,以下顺序是第三簇第四簇第三簇开始:记录了目录和文件数据,存储单位是簇,簇与簇之间不一定联系,链式关系要参照FAT表。。。。。。。。第n簇MBR结构:00020C000B38F8B889000000779F3A0000000000000000000000000
阅读全文
posted @
2012-08-18 17:39
啊德Blog
阅读(2314)
推荐(0)
转特权:NIOS2下的SDHC调试
摘要:NIOS2下的SDHC调试 本想自己做个简单易用的SPI控制器IPcore挂在NIOS2处理器上,整理半天却发现组件库里有3wire SPI外设,看看软件说明书配置一下也是很easy的,于是放弃了自己DIY组件的打算。 这两天调试了一下,之前用SF-EP1C板调试过2G以下的SD卡。这下面对SDHC卡,由于之前的经验,配合官方又臭又长的2.0的规格书(话说回来,最终帮大忙的还是这个spec,还是很享受那句话“忠于原文”),今天把SDHC的底层驱动函数稍微都整理好了,过阵子可以交给同事继续软件开发工作了。 这个SDHC的调试过程还有那么些讲究,这里特权同学也啰嗦一下,也许能给读者您带来一点灵感。
阅读全文
posted @
2012-08-18 17:26
啊德Blog
阅读(534)
推荐(0)
转:SDHC卡驱动及初始化
摘要:2012-05-04 11:07【转】SDHC卡驱动及初始化瞎忙了几天终于让4G的SDHC卡在STC90C516的SPI模式下跑了起来,因为当初找资料的时候遇到了太多的困难,最后是在IH YFF的帮助下,看了E文的SD2.0协议才有点小明白的.最初的想法是弄一个数码相框玩玩,试跑了一个A例程,结果没有成功.到网上搜了很多相关的例程,结果发现和A例程的代码大同小异都是针对小于2G的SD卡写的.虽然网上有人说SD卡的协议写得很那个,但是实在没有办法了.后来看了协议才知道那实在是个误解.呵呵.SD卡的协议有V1.0和V2.0之分,A例程和网上流传的各种例程都是V1.0的,而我的SDHC(金士顿4G的
阅读全文
posted @
2012-08-18 17:20
啊德Blog
阅读(2822)
推荐(1)
转载:NIOS II spi详解
摘要:【笔记】NIOS II spi详解NIOS II spi详解1、说明本文是依据笔者阅读《Embedded Peripherals (ver 9.0, Mar 2009, 4 MB).pdf》参考文档所作的个人理解,可以看做是笔记吧。本文只讲NIOSII嵌入式外设SPI的原理与使用,关于IP-CORE的使用,请读者参考 《SPI Slave JTAG to Avalon Master.pdf》。在下一篇文章中将用实例说明如何用SPI驱动ADS1256。2、功能描述Spi通讯包括两条数据线(进、出)、一条同步时钟线和一条控制线。(1)Master Out Slave In (mosi)—主设备输入
阅读全文
posted @
2012-08-17 22:07
啊德Blog
阅读(5283)
推荐(0)
转载:NIOS2 SD卡 SPI操作函数
摘要:unsigned char CS_EN,DI_EN ;void delay(int i){ while(i>0) { i--; }}unsigned char Write_Cmd(unsigned char *cmd,unsigned char lres){ unsigned char rddata[1],time=0; do { time=0; IOWR_ALTERA_AVALON_PIO_DATA(CS_EN_BASE,0); IOWR_ALTERA_AVALON_PIO_DATA(DI_EN_BASE,0); alt_avalon_spi_command(SPI_BASE,0,6,
阅读全文
posted @
2012-08-17 22:04
啊德Blog
阅读(1957)
推荐(0)