CPLD被STM32读写VHDL程序

发布者:omicron25最新更新时间:2017-01-05 来源: eefocus关键字:CPLD  STM32  读写VHDL 手机看文章 扫描二维码
随时随地手机看文章

  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  读写VHDL 引用地址:CPLD被STM32读写VHDL程序

上一篇:TLC2543和TLV5614的STM32程序
下一篇:Arm设计思想与高效C语言编程联系

推荐阅读最新更新时间:2024-03-16 15:28

STM32 串口通信识别程序
代码现象:从串口发一个数据,串口能够返回相应的值, #include stm32f10x.h #include stm32f10x_gpio.h #include stm32f10x_rcc.h #include stm32f10x_usart.h #include misc.h #include string.h #define RX_BUF_SIZE 80 volatile char RX_FLAG_END_LINE = 0; volatile char RXi; volatile char RXc; char RX_BUF = {''}; //此处我删去了vola
[单片机]
关于STM32中PA15引脚作为普通io的使用
最近做一个项目,调试的时候,发现PA15引脚无论配置输出高还是低或者输入,均只能输出3.3V的高电平。 前提说明,目前STM的硬件调试有两种方法,JTAG和SW的方式,目前个人认为最好的方式就是SW,因为它只占用PA13和PA14两个io。而JTAG还要多占用PB3,PB4,PA15三个io口。很浪费资源。 本人使用SW的方式,但是STM默认会启用SW和JTAG两种。也就是说,默认情况下,PA13、PA14、PB3、PB4、PA15均不能作为普通io使用。 因为本人没用JTAG,所以为了让PB3,PB4,PA15这三个IO变为普通io,必须要进行如下的配置: *RCC_APB2PeriphClockCmd(RCC_APB2Per
[单片机]
STM32 J-LINK SW 调试常见问题
STM32 支持 SW 调试,只需用占用两个端口 SWDIO/SWCLK 及 VCC/GND,最多四条线就可以调试。 SWDIO/SWCLK 不需要上拉或下拉电阻。 调试时常见 No Cortex-M SW Device Found 问题,可以尝试以下方法: 1、可能软件设置了JTAG_SW_DISABLE,请将BOOT0接到VCC然后复位 2、VCC电压过低,可以尝试降低 JLINK/JTRACE Cortex-M Driver Setup 中的 Max Clock,找到合适的时钟频率 3、提示找不到J-LINK,检查是否板子是否没有上电
[单片机]
STM32 GPIO输入输出模式比较
有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别及上拉输入、下拉输入、浮空输入、模拟输入的区别 最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出 (8)GPIO_Mode_AF_PP 复用推挽输出 对于刚入门
[单片机]
<font color='red'>STM32</font> GPIO输入输出模式比较
STM32芯片系统结构
STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令)、S(系统)、D(数据)三条信号线。内核通过总线矩阵与FLASH、SRAM、外设连接。而外设包括GPIO、USART、I2C、SPI等。 STM32芯片系统结构 STM32F103 系列芯片(不包含互联网型)的系统结构如下: 从上图可以看出,在小容量、中容量和大容量产品中,主系统由以下部分构 成: 四个驱动单元: Cortex-M3 内核 DCode 总线(D-bus) Cortex-M3 内核系统总线(S-bus) 通用 DMA1 通用 DMA2 四个被动
[单片机]
<font color='red'>STM32</font>芯片系统结构
基于STM32的平衡小车设计过程
一、简介 接触STM32开发一段时间了,想用STM32做一个有意思的项目,经历了无数的调参调参再调参,终于让它站稳了,接一下就一步步的跟大家介绍一下,项目的整体实现过程— 二、项目介绍 STM32平衡小车是一种基于STM32芯片的智能小车,它可以通过自动控制来保持平衡,使其可以在不同的地形上稳定行驶。其使用范围非常广泛。需要用到一些基本的硬件组件,例如电机、轮子、陀螺仪、加速度计、电池等。通过设计的电路板进行连接,组成一个完整的系统。 三、硬件设计 根据上述需求,我进行了电路图设计 四、软件设计 4.1电机驱动编写 4.1.1电机引脚说明 编码电机 引脚说明: M1电机电源线(12V) GND编码器地线 C
[单片机]
基于<font color='red'>STM32</font>的平衡小车设计过程
STM32的AD用DMA方式时的请注意初始化顺序
我突然意识到我的数据好像一直没有错位,看到这个我又试验了一下,发现把DMA_Cmd(DMA1_Channel1, ENABLE);放置到哪儿都是一样的啊~~~ 这个是原帖部分: STM32的AD用DMA方式时的请注意初始化顺序 DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_Result; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA
[单片机]
采用CPLD增强单片机P89C669外部设备扩展能力
P89C669是PHILIPS半导体一款51MX(存储器扩展)内核的微处理器,其指令执行速度2倍于标准的80C51器件,线性地址经扩展后可支持高达8 MB的程序存储器和8 MB的数据存储器,这是他相对于标准51内核的最大优点。目前的单片系统越来越复杂,扩展的外部设备也更多,如果能充分利用P89C669的丰富的线性地址资源,将能大大增强系统能力。在一个嵌入式系统开发中,笔者采用ALTERA公司的CPLD芯片EPM7032利用这款单片机的线性地址扩展了丰富的外部设备资源。 1 P89C669的存储器结构 1.1 存储结构 P89C669的存储器结构为哈佛结构,地址分配如表1所示。 从表1可见,P89C669对传统的51内核
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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