实验现象:

1、先烧写ARM程序,然后烧写FPGA程序。

2、打开串口精灵,会接收到字符GINGKO。

3、通过串口精灵发送命令可以控制ARM·LED和FPGA·LED。

核心代码:

int main(void)
{ /* USER CODE BEGIN 1 */
int i;
char buffer[];
char buffer1[]; /* 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_UART4_Init(); /* USER CODE BEGIN 2 */
uart4.initialize();
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 = ;
for(i = ;i < ;i ++){
buffer[i] = tolower(usart6.receive_buffer[i]);
}
//±È½Ï½ÓÊÕÐÅÏ¢
if(memcmp(buffer,"ledr",strlen("ledr")) == ){ //ARMºìµÆÁÁ
LED_RED_ON;
LED_GREEN_OFF;
LED_BLUE_OFF;
uart4.printf("LEDR\n"); //´®¿Ú2Êä³ö
}
if(memcmp(buffer,"ledg",strlen("ledg")) == ){ //ARMÂ̵ÆÁÁ
LED_GREEN_ON;
LED_RED_OFF;
LED_BLUE_OFF;
uart4.printf("LEDG\n"); //´®¿Ú2Êä³ö
}
if(memcmp(buffer,"ledb",strlen("ledb")) == ){ //ARMÀ¶µÆÁÁ
LED_BLUE_ON;
LED_GREEN_OFF;
LED_RED_OFF;
uart4.printf("LEDB\n"); //´®¿Ú2Êä³ö
}
}
if (uart4.receive_ok_flag){ //´®¿Ú2½ÓÊÕÍê³É
uart4.receive_ok_flag = ;
for(i = ;i < ;i++){
buffer1[i] = uart4.receive_buffer[i];
}
usart6.printf(buffer1); //´®¿Ú4Êä³ö
}
}
/* USER CODE END 3 */ }
module txd_rxd(
input rst_n,
input uart_clk,
input rx,
output tx,
output led_red,
output led_green,
output led_blue
);
//---------------------------parameter--------------------------//
parameter ledr = 'b01001100_01000101_01000100_01010010_00001010,
ledg = 'b01001100_01000101_01000100_01000111_00001010,
ledb = 'b01001100_01000101_01000100_01000010_00001010; //---------------------------------rx---------------------------//
/* 接收模块 */
reg[:]j;
reg[:]data_in;
reg [:]receive_data,data_inr; always@(posedge uart_clk or negedge rst_n)
if(!rst_n)
begin
j <= 'd0;
data_in <= 'd0;
data_inr <= 'd0;
receive_data <= 'd0;
end
else case(j)
'd0: //判断起始标志
begin
if(!rx)
begin
data_in <= 'd0;
j <= j + 'd1;
end
else j <= j;
end
'd1,4'd2,'d3,4'd4,'d5,4'd6,'d7,4'd8: //接收数据
begin
j <= j + 'd1;
data_in <= {rx,data_in[:]};
end
'd9: //接收校验位
begin
receive_data <= {receive_data[:],data_in};
j <= j + 'd1;
end
'd10: //接收停止位
begin
j <= 'd0;
if(receive_data[:] == 'b00001010)
begin
data_inr <= receive_data;
end
end
default: j <= 'd0;
endcase //---------------------------------led---------------------------//
/*对比接收数据 */
reg [:]led; always@(posedge uart_clk or negedge rst_n)
if(!rst_n)
begin
led <= 'b101;
end
else if (data_inr == ledr)
led <= 'b011;
else if (data_inr == ledg)
led <= 'b101;
else if (data_inr == ledb)
led <= 'b110; assign {led_red,led_green,led_blue} = led; //---------------------------------tx---------------------------// /*发送模块,定时发送GINGKO*/
reg tx_r; //串行发送数据的寄存器,空闲状态默认为1
reg[:]i;
reg[:]data_out;
reg[:]cnt;
reg[:]GINGKO; always @(posedge uart_clk or negedge rst_n)
if (!rst_n)
begin
i <= 'd0;
tx_r <= 'd1; //空闲状态为1
cnt <= 'd0;
data_out <= 'd0;
GINGKO <= {'d71,8'd73,'d78,8'd71,'d75,8'd79,'d13,8'd10};
end
else //开始发送DATA
case(i)
'd0: begin //先发送起始位0
i <= i + 'd1;
{data_out,GINGKO[:]} <= GINGKO;
tx_r <= 'd0;
end
'd1,14'd2,'d3,14'd4,'d5,14'd6,'d7,14'd8: //tx_r
begin
i <= i + 'd1;
{data_out[:],tx_r} <= data_out; //串口发送时,低位在先
end
'd9: begin //1位奇偶校验位和1位停止位
i <= i + 'd1;
tx_r <= 'd1;
end
'd10: begin //1位停止位
if(cnt == 'd7)
begin
i <= i + 'd1;
cnt <= 'd0;
end
else
begin
i <= 'd0;
cnt <= cnt + 'd1;
end
end
'd115200: begin //定时约为1s
i <= 'd0;
GINGKO <= {'d71,8'd73,'d78,8'd71,'d75,8'd79,'d13,8'd10};
end
default: i <= i + 'd1; //i为其他无效数值时,直接转到退出TXD模块状态
endcase assign tx = tx_r; endmodule

源代码下载链接:

链接:http://pan.baidu.com/s/1nv836RZ 密码:iky7

iCore4链接:

【iCore4 双核心板_FPGA】例程十二:基于UART的ARM与FPGA通信实验的更多相关文章

  1. 【iCore4 双核心板_FPGA】例程十三:基于SPI的ARM与FPGA通信实验

    实验现象: 1.先烧写ARM程序,然后烧写FPGA程序. 2.打开串口精灵,通过串口精灵给ARM发送数据从而给FPGA发送数据 ,会接收到字符HELLO. 3.通过串口精灵发送命令可以控制ARM·LE ...

  2. 【iCore3 双核心板】例程十二:通用定时器实验——定时点亮LED

    实验指导书及代码包下载: http://pan.baidu.com/s/1kTWAAJ9 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  3. 【iCore4 双核心板_FPGA】例程二:GPIO输入实验——识别按键输入

    实验现象: 按键每按下一次,三色LED切换一次状态. 核心源代码: module key_ctrl( input clk_25m, input rst_n, input key, output fpg ...

  4. 【iCore4 双核心板_FPGA】例程十:FSMC总线通信实验——复用地址模式

    实验原理: STM32F767上自带FMC控制器,本实验将通过FMC总线的地址复用模式实现STM32与FPGA 之间通信,FPGA内部建立RAM块,FPGA桥接STM32和RAM块,本实验通过FSMC ...

  5. 【iCore4 双核心板_FPGA】例程十四:基于I2C的ARM与FPGA通信实验

    实验现象: 1.先烧写ARM程序,然后烧写FPGA程序. 2.打开串口精灵,通过串口精灵给ARM发送数据从而给FPGA发送数据 ,会接收到字符GINGKO. 3.通过串口精灵发送命令可以控制ARM·L ...

  6. 【iCore4 双核心板_FPGA】例程十五:基于单口RAM的ARM+FPGA数据存取实验

    实验现象: 写RAM命令格式:write:地址(0-255),数据(0-65535)\cr\lf 读RAM命令格式:read:地址(0-255)\cr\lf 核心代码: int main(void) ...

  7. 【iCore4 双核心板_FPGA】例程十六:基于双口RAM的ARM+FPGA数据存取实验

    实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i; int address,data; ; ]; ]; char *p; /* US ...

  8. 【iCore4 双核心板_FPGA】实验二十:NIOS II之UART串口通信实验

    实验指导书及源代码下载地址: 链接:https://pan.baidu.com/s/1g_tWYYJxh4EgiGvlfkVu1Q 提取码:dwwa 复制这段内容后打开百度网盘手机App,操作更方便哦 ...

  9. 【iCore4 双核心板_FPGA】例程四:Signal Tapll 实验——逻辑分析仪

    实验现象: 三色led轮流闪烁,具体的逻辑分析仪使用教程请参考iCore3逻辑分析仪例程 核心代码: module signal_ctrl( input clk_25m, input rst_n, o ...

随机推荐

  1. iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)

    iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...

  2. 洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)

    To 洛谷.2982 慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows con ...

  3. POJ.1704.Georgia and Bob(博弈论 Nim)

    题目链接 \(Description\) 一个1~INF的坐标轴上有n个棋子,给定坐标Pi.棋子只能向左走,不能跨越棋子,且不能越界(<1).两人每次可以将任意一个可移动的棋子向左移动一个单位. ...

  4. Python序列解包

    元组的序列解包range对象的序列解包迭代对象的序列解包列表的序列解包字典的序列解包序列解包与遍历序列解包的其它用法 元组的序列解包 x,y,z = (1,2,3) print(x,y,z) 1 2 ...

  5. [CF1030E]Vasya and Good Sequences

    [CF1030E]Vasya and Good Sequences 题目大意: 给定一个长度为\(n(n\le3\times10^5)\)的数列\(a_i(1\le a_i\le10^{18})\). ...

  6. memcache 在php中的用法

    memcached 的安装方法详见我博客的另一个页面:http://www.cnblogs.com/chrdai/p/6656443.html 用法: 一.memcache 连接命令: 1.memca ...

  7. asp.net通过distinct过滤集合(list)中重复项的办法

    /// <summary> /// 权限Distinct比较器 /// </summary> public class PermissionIdComparer : IEqua ...

  8. 富文本兼容性问题归纳(win)

    上周抽空把去年写的富文本重写了一下,封装成基本UI组件,就可以在聊天框之外的地方复用了.个人觉得富文本是个兼容问题最多的模块之一,尤其是文档也没几个,把mozilla的api文档和IE的dom api ...

  9. 亲测GO环境搭建,理解go build、go install、go get

    GO下载: GO语言中文网下载:https://studygolang.com/dl Mac下直接通过brew instatll go指令即可完成下载安装 GO环境变量配置: $GOROOT=/usr ...

  10. HDU4772(杭州赛区)

    Zhuge Liang's Password Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...