【iCore4 双核心板_FPGA】例程十七:基于FIFO的ARM+FPGA数据存取实验
实验现象:
核心代码:
int main(void)
{ /* USER CODE BEGIN 1 */
int i;
int fsmc_read_data;
char error_flag = ;
char receive_data[];
char buffer[];
char *p;
/* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */
SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART6_UART_Init();
MX_FMC_Init(); /* USER CODE BEGIN 2 */
usart6.initialize();
usart6.printf("Hello,I am iCore4!\r\n");
LED_GREEN_ON;
/* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while ()
{
/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */
if(usart6.receive_ok_flag == ){
usart6.receive_ok_flag = ;
memset(receive_data,,sizeof(receive_data));
memset(buffer,,sizeof(buffer));
for(i = ;i < ;i ++){
receive_data[i] = usart6.receive_buffer[i];
}
p = receive_data;
i = ;
while(*p != '\r'){ //»ñÈ¡²Ù×÷ÃüÁî
buffer[i++] = *p++;
if(i > sizeof(buffer))i = ;
}
for(i = ;i < sizeof(buffer);i++){//½«ÃüÁîת»¯ÎªÐ¡Ð´×Ö·û
buffer[i] = tolower(buffer[i]);
} if(memcmp(buffer,"write_fifo",strlen("write_fifo")) == ){//Ö´ÐÐдFifo
error_flag = ;
usart6.printf("Data In Fifo:");
for(i = ;;i++){
fpga_write(,i);
usart6.printf("%d ",i);
if(FIFO_FULL){
fpga_write(,i+);
usart6.printf("%d ",i+);
usart6.printf(" \r\nFifo is Full!\r\n Data Out Fifo:");
for(i = ;i < ;i++){ //¿ªÊ¼¶ÁÈ¡256¸öÊý¾Ý
fsmc_read_data = fpga_read();
usart6.printf("%d ",fsmc_read_data); //¶Áȡֵ·¢ËÍÖÁ´®¿Ú
}
break;
}
}
}else{
error_flag = ;
} if(error_flag){
LED_RED_ON;
LED_GREEN_OFF;
usart6.printf("Bad Command!\r\n");
}else{
LED_RED_OFF;
LED_GREEN_ON;
}
}
}
/* USER CODE END 3 */ }
module fifo_wr_rd(
input clk_25m,
input rst_n,
input wrn,
input rdn,
input cs0,
input nadv,
input [:]ab,
inout [:]db,
output fifo_full_flag,
output led_red,
output led_green,
output led_blue
); pll u1(
.inclk0(clk_25m),
.c0(clk_150m)
); wire [:]data_out;
my_fifo u2(
.data(data_in),
.wrreq('d1),
.wrclk(wr2),
.rdreq('d1),
.rdclk(!rd),
.wrfull(fifo_full_flag),
.q(data_out)
); reg [:]data_in;
always@(posedge wrn or negedge rst_n)
if(!rst_n)
data_in <= 'd0;
else
data_in <= db; reg wr1,wr2;
always@(posedge clk_150m or negedge rst_n)
if(!rst_n)
begin
wr1 <= 'd0;
wr2 <= 'd0;
end
else
{wr2,wr1} <= {wr1,wr}; wire rd = rdn | cs0;
wire wr = wrn | cs0; assign db = rd ? 'hzzzz : data_out;
assign led_red = 'd1;
assign led_green = 'd0;
assign led_blue = 'd1; endmodule
源代码下载链接:
链接:http://pan.baidu.com/s/1jHFNhwq 密码:qktz
iCore4链接:
【iCore4 双核心板_FPGA】例程十七:基于FIFO的ARM+FPGA数据存取实验的更多相关文章
- 【iCore3 双核心板_FPGA】实验二十:基于FIFO的ARM+FPGA数据存取实验
实验指导书及代码包下载: http://pan.baidu.com/s/1cmisnO iCore3 购买链接: https://item.taobao.com/item.htm?id=5242294 ...
- 【iCore4 双核心板_FPGA】例程十三:基于SPI的ARM与FPGA通信实验
实验现象: 1.先烧写ARM程序,然后烧写FPGA程序. 2.打开串口精灵,通过串口精灵给ARM发送数据从而给FPGA发送数据 ,会接收到字符HELLO. 3.通过串口精灵发送命令可以控制ARM·LE ...
- 【iCore4 双核心板_FPGA】例程十四:基于I2C的ARM与FPGA通信实验
实验现象: 1.先烧写ARM程序,然后烧写FPGA程序. 2.打开串口精灵,通过串口精灵给ARM发送数据从而给FPGA发送数据 ,会接收到字符GINGKO. 3.通过串口精灵发送命令可以控制ARM·L ...
- 【iCore1S 双核心板_FPGA】例程十七:基于双口RAM的ARM+FPGA数据存取实验
实验现象: 核心代码: module DUAL_PORT_RAM( input CLK_12M, inout WR, input RD, input CS0, :]A, :]DB, output FP ...
- 【iCore4 双核心板_FPGA】例程十二:基于UART的ARM与FPGA通信实验
实验现象: 1.先烧写ARM程序,然后烧写FPGA程序. 2.打开串口精灵,会接收到字符GINGKO. 3.通过串口精灵发送命令可以控制ARM·LED和FPGA·LED. 核心代码: int main ...
- 【iCore4 双核心板_FPGA】例程十五:基于单口RAM的ARM+FPGA数据存取实验
实验现象: 写RAM命令格式:write:地址(0-255),数据(0-65535)\cr\lf 读RAM命令格式:read:地址(0-255)\cr\lf 核心代码: int main(void) ...
- 【iCore4 双核心板_FPGA】例程十六:基于双口RAM的ARM+FPGA数据存取实验
实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i; int address,data; ; ]; ]; char *p; /* US ...
- 【iCore4 双核心板_FPGA】例程四:Signal Tapll 实验——逻辑分析仪
实验现象: 三色led轮流闪烁,具体的逻辑分析仪使用教程请参考iCore3逻辑分析仪例程 核心代码: module signal_ctrl( input clk_25m, input rst_n, o ...
- 【iCore4 双核心板_FPGA】例程八:乘法器实验——乘法器使用
实验现象: 程序运行时,绿色led闪烁(目前,具体的乘法器调用请参考iCore3乘法器例程) 核心代码: module multiplier_ctrl( input clk_25m, input rs ...
随机推荐
- spring 4.1 xml配置头部信息 maven配置信息
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://w ...
- 潭州课堂25班:Ph201805201 爬虫高级 第十二 课 Scrapy-redis分布 项目实战 (课堂笔记)
建代理池, 1,获取多个网站的免费代理IP, 2,对免费代理进行检测,>>>>>携带IP进行请求, 3,检测到的可用IP进行存储, 4,实现api接口,方便调用, 5,各 ...
- Mybatis的延迟加载和缓存
1. MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力. 注意:MyBatis的延迟加 ...
- Linux下redis 的部署、主从与集群
老男孩Python全栈6期——redis--------------------------Linux 操作系统 默认的内存管理机制RSS:page cache:anno page:Linux操作系统 ...
- 面试题fugui
1.什么是栈溢出,在什么情况下可能会出现 栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当数据足够大时,将会溢出缓冲区的范围. python函数调用是通过栈这 ...
- 解决 插件LArea 在IOS上浮出软键盘问题
移动端使用 省市县城市选择三级联动的时候, 插件LArea 会有一个问题 ios浏览器和ie9已下(包括ie9)浏览器都有input设置readonly之后input还有聚焦的问题. ios inpu ...
- php 公共方法Util
总结了一个公共类方法类: class Util extends ArrayHelper { /** * 判断是否为空数组 * @param mixed $arr * @return boolean * ...
- R语言语法基础一
R语言语法基础一 Hello world #这里是注释 myString = "hello world" print(myString) [1] "hello world ...
- 小甲鱼python第二讲课后习题
0.什么是BIF BIF为内置函数,英语全称为Build-in-Function Python3用input()取代了Python2的raw_input(),接收用户输入 1.用课堂上小甲鱼教的方法数 ...
- Linux命令之rpm篇
作业五:rpm命令 1) 挂载光盘文件到/media目录 [root@localhost 桌面]# mount /dev/sr0 /media mount: /dev/sr0 写保护,将以只读方式 ...