CPLD被STM32读写VHDL程序

最新更新时间:2021-10-19来源: eefocus关键字:CPLD  STM32 手机看文章 扫描二维码
随时随地手机看文章

  1  

  2 

  3 --本程序用来测试STM32对CPLD的读写操作

  4 

  5 --测试功能如下:

  6 

  7 --向0x05地址写入0x01,LED灯停止闪烁,写入其他数据闪烁继续

  8 

  9 --0x03,0x04寄存器为定值,可以通过STM32读取然后使用串口输出看看是否一致

 10 

 11  

 12 

 13 --文件名:AD.vhd

 14 

 15 library ieee;

 16 

 17 use ieee.std_logic_1164.all;

 18 

 19 use ieee.std_logic_unsigned.all;

 20 

 21  

 22 

 23 entity AD is

 24 

 25 port(

 26 

 27 -- 系统信号线

 28 

 29     CLK:         in      std_logic;

 30 

 31 LED: out std_logic;

 32 

 33 -- ARM相连的信号线

 34 

 35     Adr_L:       in      std_logic_vector(7 downto 0); --A7...A0,只使用了低八位地址线

 36 

 37     D:           inout   std_logic_vector(7 downto 0); --只使用了低八位数据线

 38 

 39     FSMC_NE4:    in      std_logic;  

 40 

 41     FSMC_NOE:    in      std_logic;

 42 

 43     FSMC_NWE:    in      std_logic

 44 

 45 );

 46 

 47 end AD;

 48 

 49  

 50 

 51 architecture art of AD is

 52 

 53 --设置存储数据的寄存器

 54 

 55 signal AD0_H_data,AD0_L_data,AD1_H_data,AD1_L_data,LED_ctrl:  std_logic_vector(7 downto 0); 

 56 

 57 --数据缓冲寄存器

 58 

 59 signal data_buf: std_logic_vector(7 downto 0);

 60 

 61 --数据输出控制

 62 

 63 signal data_outctl: std_logic;

 64 

 65 signal datacnt:integer range 0 to 4000000;--分频计数

 66 

 67 --LED闪烁使能

 68 

 69 signal LED_flag: std_logic;

 70 

 71  

 72 

 73  

 74 

 75 --统一编址,地址线数据线为八位,每个地址数据宽度8位

 76 

 77 --"00000001" AD0_H_data0x01

 78 

 79 --"00000010" AD0_L_data0x02

 80 

 81 --"00000011" AD1_H_data0x03

 82 

 83 --"00000100" AD1_L_data0x04

 84 

 85 --"00000101" LED_ctrl0x05

 86 

 87  

 88 

 89 begin

 90 

 91  

 92 

 93 AD1_H_data <="10100001";

 94 

 95 AD1_L_data <="00010001";

 96 

 97 --LED 闪烁,用作CPLD运行指示

 98 

 99  

100 

101 process(LED_ctrl) is

102 

103 begin

104 

105 if(LED_ctrl="00000001") then

106 

107 LED_flag <= '0';

108 

109 else

110 

111 LED_flag <= '1';

112 

113 end if;

114 

115 end process;

116 

117  

118 

119 process(CLK)is

120 

121 begin

122 

123  

124 

125  

126 

127 if(CLK'event and CLK='1') then

128 

129 if(LED_flag='1') then

130 

131 datacnt<=datacnt+1;

132 

133 if (datacnt>2000000) then

134 

135 LED <= '1';

136 

137 end if;

138 

139 if (datacnt>=4000000) then

140 

141 LED <='0';

142 

143 datacnt <=0;

144 

145 end if;

146 

147 end if;

148 

149 end if;

150 

151 end process;

152 

153  

154 

155 --当读取CPLD数据时用来判断何时向总线上输出数据

156 

157 data_outctl <= (not  FSMC_NE4) and (not FSMC_NOE) and (FSMC_NWE);  

158 

159 D <=  data_buf when (data_outctl='1') else "ZZZZZZZZ";--向数据线输出数据,否则保持为高阻态

160 

161  

162 

163 -- 写操作,模式1,时序图在数据手册P331

164 

165 process(FSMC_NE4,FSMC_NWE,Adr_L,FSMC_NOE) is  --,FSMC_NBL,D,RESET

166 

167 begin

168 

169 if(FSMC_NWE'event and FSMC_NWE='1') then

170 

171 if((FSMC_NOE and (not FSMC_NE4))='1') then

172 

173 case (Adr_L) is

174 

175 when "00000001" =>  

176 

177 AD0_H_data<= D; --0x01

178 

179 when "00000010" =>  

180 

181 AD0_L_data<= D; --0x02

182 

183 when "00000101" =>  

184 

185 LED_ctrl<= D;--0x05

186 

187 when others =>

188 

189 AD0_H_data<= AD0_H_data;

190 

191 AD0_L_data<= AD0_L_data;

192 

193 end case;

194 

195 end if;

196 

197 end if;

198 

199 end process;

200 

201  

202 

203 --读操作,模式1,P331

204 

205 process(FSMC_NE4,FSMC_NWE,Adr_L,FSMC_NOE) is 

206 

207 begin

208 

209 if(FSMC_NOE='0' and FSMC_NOE'event) then --直接在NOE的下降沿更新数据

210 

211 case (Adr_L) is

212 

213 when "00000001" =>   

214 

215 data_buf <= AD0_H_data; --0x01

216 

217 when "00000010" =>  

218 

219 data_buf <= AD0_L_data; --0x02

220 

221 when "00000011" =>  

222 

223 data_buf <= AD1_H_data; --0x03

224 

225 when "00000100" => 

226 

227 data_buf <= AD1_L_data; --0x04

228 

229 when others =>  data_buf <= "ZZZZZZZZ";

230 

231 end case; 

232 

233 end if;

234 

235 end process;

236 

237 end;

238 

239  

240 

241  

242 

243  


关键字:CPLD  STM32 编辑:什么鱼 引用地址:CPLD被STM32读写VHDL程序

上一篇:STM3210XX中读写Flash的操作
下一篇:TLC2543和TLV5614的STM32程序

推荐阅读

STM32入门系列-开发工具keil5安装
主要介绍如下三部分内容:keil5软件获取keil5安装安装STM32芯片包软件获取可以通过搜索引擎搜索关键字“KEIL5下载”,找到其官方网站http://www.keil.com。我们这里使用MDK5.14版本,如果后面出了更高的版本选择性升级即可,不过也没有必要什么都追求最新的,这一个软件用着习惯就行。登录armkeil官方网站,网站首页有软件下载连接,在这里我们选择MDK-Arm。会让你先注册,注册完成之后就可以开始下载了。软件安装安装此软件时一定要注意以下几点:安装路径不能带中文,必须是英文路径。安装目录不能跟51的KEIL或者KEIL4冲突,三者目录必须分开。KEIL5的安装比起KEIL4多了一个步骤,必须添加芯片包,不
发表于 2022-11-18
<font color='red'>STM32</font>入门系列-开发工具keil5安装
STM32入门系列-存储器与寄存器介绍
介绍两部分内容:什么是存储器映射什么是寄存器及寄存器映射为了让大家对存储器与寄存器有一个更清楚的认识,并且为之后使用 C 语言来访问 STM32 寄存器内容打下基础。等明白了如何使用 C 语言封装底层寄存器,也就为后面学习库函数的开发做好了铺垫。什么是存储器映射程序存储器、数据存储器、寄存器和I/O端口排列在同一顺序的4GB地址空间内。这就是我们曾提到过的被控总线的连接部分,而编程时就是操作这一块地方。存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射。 STM32F103ZET6 数据手册中存储器映射图如下所示。从上图中可以看到 ARM 把这 4GB 的存储
发表于 2022-11-18
STM32入门系列-GPIO概念介绍
GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出。STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。不过 GPIO 最简单的应用还属点亮 LED 灯了,只需通过软件控制 GPIO 输出高低电平即可。当然 GPIO 还可以作为输入控制,比如在引脚上接入一个按键,通过电平的高低判断按键是否按下。其中STM32F103xC、STM32F103xD和STM32F103xE有144个引脚的芯片如下图所示。那么是不是所有引脚都是 GPIO 呢?当然不是,STM32 引脚可以分为这么几大类:电源引脚:引脚图中的 VDD、V
发表于 2022-11-18
STM32入门系列-GPIO结构
已经了解了STM32 GPIO的基本概念及引脚分类。现在来看下STM32 GPIO内部的结构是怎样的。IO端口位的基本结构如下图所示。从图中可以看出GPIO内部结构还是比较复杂的,只要将这张GPIO结构图理解好,那么关于GPIO的各种应用模式将非常清楚。图中最右端I/O端口就是STM32芯片的引脚,其它部分都在STM32芯片内部。上图中我们将每部分都用红色数字标号了,按照顺序我们逐一讲解。保护二极管引脚内部加上这两个保护二级管可以防止引脚外部过高或过低的电压输入,当引脚电压高于VDD_FT或VDD时,上方的二极管导通吸收这个高电压,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。尽管STM32芯片内部有
发表于 2022-11-18
<font color='red'>STM32</font>入门系列-GPIO结构
STM32入门系列-创建寄存器模板
介绍如何使用 KEIL5 软件创建寄存器模板, 方便之后使用寄存器方式来操作STM32开发板上的LED,让大家创建属于自己的寄存器工程模板。获取工程模板的基础文件首先我们在电脑任意位置创建一个文件夹,命名为“寄存器模板创建”,然后在其下面新建 2 个文件夹,如下:Obj 文件夹: 用于存放编译产生的 c/汇编/链接的列表清单、 调试信息、hex文件、预览信息、封装库等文件。User 文件夹: 用于存放用户编写的 main.c、 STM32F1 启动文件、stm32f10x.h头文件。我们需要将寄存器工程模板所需的基础文件 main.c、STM32F1 启动文件及stm32f10x.h 头文件放入到 User 文件夹内。在工程实例的U
发表于 2022-11-18
<font color='red'>STM32</font>入门系列-创建寄存器模板
STM32入门系列-使用C语言封装寄存器
前面介绍了存储器映射、寄存器和寄存器映射,这些都是为了介绍使用 C语言封装寄存器做铺垫。这里我们通过一个实例来对 C 语言封装寄存器进行介绍。具体实例:控制 GPIOC 端口的第 0 管脚输出一个低电平。首先我们需要知道GPIOC 端口外设是挂接在哪个总线上的,然后根据总线基地址和本身的偏移地址得到 GPIOC 外设基地址,最后通过这个外设基地址得到里面各种寄存器基地址。总线和外设基地址封装根据寄存器的概念,我们可以使用 C 语言中的宏定义对寄存器进行定义。具体代码如下://定义外设基地址#define PERIPH_BASE ((unsigned int)0x40000000) 1)//定义 APB2 总线基地址#define A
发表于 2022-11-18

推荐帖子

TI AM335x开发板 如何烧写?BBB的Debian系统
本文主要描述如何在AM335x开发板上(EMMC启动方式)上使用BBB官方的Debian系统,实现开发板与BBB的系统兼容。需要注意的是,由于BBB官方提供的Debian系统是一个镜像文件,直接将BBB的Debian镜像文件烧写到TF卡或者EMMC上都是不能正常启动系统的(COM335X的uboot和内核与BBB不同导致),因此需要先将该镜像文件烧写到TF卡上,再将TF卡上的文件系统压缩打包,然后将压缩包根据开发板EMMC的烧写方法,将文件系统烧录到EMMC中。以下是操作步骤:
szypf2011 TI技术论坛
给初学Qt者的小TIP
1、Hello,Qt! 我们以一个非常简单的Qt程序开始Qt的学习。我们首先一行行的分析代码,然后我 们将会看到怎样编译和运行这个程序。 1#include<QApplication> 2#include<QLabel> 3intmain(intargc,char*argv[]) 4{ 5QApplicationapp(argc,argv); 6QLabel*label=newQLabel("
fish001 DSP 与 ARM 处理器
VICOR DCM™ DC-DC 转换器模块相关评估板免费申请啦!
支持所有标准行业输入电压的高功率转换器DCMChiP是一款隔离稳压DC-DC转换器,可在未稳压宽范围输入运行,以产生隔离输出。凭借其高频零电压开关(ZVS)拓扑结构,DCM转换器为其各种输入电压范围提供高效率。DCM模块转换器和下游负载点(PoL)产品支持高效配电,为一系列非稳压电源到负载点提供卓越的电源系统性能和连接性。DCM系列包括多种规格,支持±1%精度的稳压调节。采用VIA封装的DCM模块可利用集成的EMI滤波、精确的稳压输出和副边地的控制接口提供更高级的功能。&g
eric_wang 模拟电子
分压偏置式共射极放大电路
分压偏置式共射极放大电路 1、元器件的作用、电路的用途、电压放大倍数、输入和输出的信号电压相位关系、交流和直流等效电路图。   2、电流串联负反馈过程的分析,负反馈对电路参数的影响。   3、静态工作点的计算、电压放大倍数的计算。 分压偏置式共射极放大电路
fish001 模拟与混合信号
大家看下面两种MP3哪种布局好?
希望大家建议建议,哪种布局好,准备做板了,VS1053已经拿到,另外开贴晒晒。 大家看下面两种MP3哪种布局好?
zhaojun_xf NXP MCU
电路基础(原书第6版)
本书第6版延续了第5版内容简明易懂的风格。介绍了六步解决问题的方法,并在实践中的问题和实践问题,结合了超过468个新的或改变家庭作业问题。第6版涵盖了全面的线性电路分析的方法,并保留了“设计一个问题”的功能,这有助于学展他们的设计技能,有学展的问题,以及解决方案。本书中有100多个“设计问题”习题集。http://download.eeworld.com.cn/detail/sigma/624617 电路基础(原书第6版)
arui1999 下载中心专版
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved