CPLD被STM32读写VHDL程序

发布者:cxd88988最新更新时间: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程序

推荐帖子

电磁干扰抑制技术全面概述
提起电磁干扰(EMI)这个词,人们或许还感陌生,但EMI的影响却是几乎每个人都曾身经历过的。例如,观看电视时,附近有人使用电钻、电吹风等电器,会使电视画面出现雪花点,所声器里发出剌耳的噪声这类现象人们早已司空见惯、习以为常了,但是电磁干扰的危害却远不止如此。事实上,电磁干扰已使民航系统失效、通信不畅、计算机运行错误、自控设备误动作等,甚至危及人身安全。因此,加强电磁容性(EMC)知识的普及,提高EMI抑制技术,已成为当务之急。  所谓电磁兼容性是指电子线路、系统相互不影响,在电磁方面
fish001 模拟与混合信号
两种无线数字调制解调器的设计对比
作者:中国人民解放军94569部队白欣摘要:本文介绍了分别基于CMX469A和MSM7512B设计实现的两种无线数字MODEM,说明了系统关键部分的硬件实现方法和软件设计,并对两种设计方案进行了对比分析。关键词:调制解调器;FSK;双工CMX469A和MSM7512B分别为CML公司和OKI公司生产的单片调制解调器芯片,本文分别采用这两种芯片,设计实现了应用于无线安防监控等领域的数字调制解调器,并对两种方案做了对比分析。图1CMX469A与单片机接口连接关系
fighting RF/无线
全志R128 SDK HAL 模块开发指南——HW Spinlock
#HWSpinlock##模块介绍hwspinlock提供一种硬件同步机制,lock操作可以防止多处理器同时处理共享数据。保证数据的一致性。##源码结构```├──hal_hwspinlock.c├──hwspinlock.h├──Kconfig├──Makefile├──platform│├──hwspinlock-sun20iw2.h└──platform-hwspinlock.h```##模块配置配置路径如下:```Ther
aleksib 国产芯片交流
再说MSP430单片机的时钟问题
MSP430根据型号的不同最多可以选择使用3个振荡器。我们可以根据需要选择合适的振荡频率,并可以在不需要时随时关闭振荡器,以节省功耗。这3个振荡器分别为:  (1)DCO数控RC振荡器。它在芯片内部,不用时可以关闭。DCO的振荡频率会受周围环境温度和MSP430工作电压的影响,且同一型号的芯片所产生的频率也不相同。但DCO的调节功能可以改善它的性能,他的调节分为以下3步:a:选择BCSCTL1.RSELx确定时钟的标称频率;b:选择DCOCTL.DCOx在标称频率基础上分段粗调
Jacktang 微控制器 MCU
手机小常识
Felix 移动便携
【翌创ET6001测评】串口通讯与MP3播放模块控制
由资料可知ET6001配有8个UART,借助UART不但可以实现串行通讯,还可以控制具有相应功能的串口设备,如串口屏、双PWM调节模块、超声波测距仪、温度调控器、数据记录模块等。为便于使用,这里是用J9接口的UART0来控制一款具有串口控制功能的MP3播放模块。图1J9接口在具体实现MP3播放模块控制前,先要解决UART0的数据发送功能。由于MP3播放模块的波特率9600bps,故UART0的初识化函数为:staticvoidUART0_init(
jinglixixi 国产芯片交流
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved