【iCore1S 双核心板_FPGA】例程十六:基于SPI的ARM与FPGA通信实验

实验现象:

核心代码:

int main(void)
{int i,n;char buffer[20];char spi_buffer[20];HAL_Init();system_clock.initialize();led.initialize();usart1.initialize(115200);spi.initialize();usart1.printf("Hello! I am iCore1S!\r\n");      while(1){if(usart1.receive_ok_flag){                                           usart1.receive_ok_flag = 0;for(i = 0;i < 20;i++){buffer[i] = tolower(usart1.receive_buffer[i]);}n = strlen(buffer);if(memcmp(buffer,"ledr",strlen("ledr")) == 0){
                    LED_RED_ON;LED_GREEN_OFF;LED_BLUE_OFF;}if(memcmp(buffer,"ledg",strlen("ledg")) == 0){
                    LED_RED_OFF;LED_GREEN_ON;LED_BLUE_OFF;}    if(memcmp(buffer,"ledb",strlen("ledb")) == 0){
                    LED_RED_OFF;LED_GREEN_OFF;LED_BLUE_ON;}    buffer[4]=13;n=strlen(buffer);spi.write_nbyte(n,buffer);       for(i=0;i<5;i++)
            {spi_buffer[i] = spi.write_byte(0x00);}usart1.printf("%s\n",spi_buffer);
        }}
}
    module SPI(input CLK_12M,input spi_clk,input spi_mosi,input spi_cs,output spi_miso,output FPGA_LEDR,output FPGA_LEDG,output FPGA_LEDB);//-------------------------rst_n---------------------------//
    /*复位信号*/reg [5:0]rst_cnt = 6'd0;reg rst_n = 1'd0;always @(posedge CLK_12M)                        if(rst_cnt == 6'd50)beginrst_n <= 1'd1;rst_cnt <= rst_cnt;endelse rst_cnt <= rst_cnt + 1'd1;    //-------------------------parameter---------------------------//
    parameter ledr = {8'd108,8'd101,8'd100,8'd114},ledg = {8'd108,8'd101,8'd100,8'd103},ledb = {8'd108,8'd101,8'd100,8'd98},hello = {8'd104,8'd101,8'd108,8'd108,8'd111};//--------------------------spi_mosi---------------------------//
    /*接收模块*/reg [3:0]i;reg [7:0]data_in;reg [39:0]temp_data,data;always@(posedge spi_clk or negedge rst_n)if(!rst_n)begini <= 4'd0;temp_data <= 40'd0;data <= 40'd0;data_in <= 8'd0;endelse case(i)   //从高位开始接收数据,每8个spi_clk时钟接收一个Byte4'd0:begini <= i + 1'd1;data_in <= {data_in[6:0],spi_mosi};temp_data <= {temp_data[31:0],data_in};if(data_in == 8'd13)begindata <= temp_data;endelse begindata <= data;endend4'd1,4'd2,4'd3,4'd4,4'd5,4'd6:begini <= i + 1'd1;data_in <= {data_in[6:0],spi_mosi};end4'd7:begini <= 4'd0;data_in <= {data_in[6:0],spi_mosi};enddefault: i <= 4'd0;endcase//--------------------------data----------------------------//
    /*对比接收数据*/reg [2:0]led;    always@(posedge CLK_12M or negedge rst_n)if(!rst_n)beginled <= 3'b111;endelse if (data == ledr)led <= 3'b011;                   //红灯亮else if (data == ledg)led <= 3'b101;                            //绿灯亮else if (data == ledb)led <= 3'b110;                            //蓝灯亮assign {FPGA_LEDR,FPGA_LEDG,FPGA_LEDB} = led;//--------------------------spi_miso----------------------------//
    /*发送模块*/reg [39:0]data_out;reg [5:0]j;reg MISO;always@(negedge spi_clk or negedge rst_n)if(!rst_n)begindata_out <= hello;j <= 6'd0;endelse case(j)  //连续40个spi_clk_r时钟发送“hello”字符串6'd0:begin{MISO,data_out[39:1]} <= data_out;j <= j + 1'd1;end6'd39:begin{MISO,data_out[39:1]} <= data_out;data_out <= hello;j <= 6'd0;enddefault:begin{MISO,data_out[39:1]} <= data_out;j <= j + 1'd1;endendcaseassign spi_miso = MISO;//--------------------------endmodule----------------------------//
endmodule

实验方法及指导书:

链接:http://pan.baidu.com/s/1jImpPRo 密码:c4s0

转载于:https://www.cnblogs.com/xiaomagee/p/7609420.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一个奇葩问题 宝塔 nginx: [warn] conflicting server

宝塔面板里面运行很久的nginx&#xff0c;好久没有重启&#xff0c;这次一重启&#xff0c;报错了。 解决方法&#xff0c;去/www/server/panel/vhost/nginx目录下&#xff0c;把相关的历史记录给删掉&#xff0c;再重启&#xff0c;就没有问题了

小程序设置页面背景颜色

首先&#xff0c;我使用的是mpvue开发。样式使用的less&#xff0c;并且全局会定义一套主题。 primary-color : #ff8730; second-color : #F48B4A; background-color :#F3F3F3; second-text-color :#787878;.flex-center-row {display: flex;flex-d…

Arcgis10安装说明

1、 先安装dotnet framework 3.5 ,必须要装这个才能运行安装程序。 2、 接着安装Arcgis Desktop &#xff0c;只需下一步&#xff0c;下一步执行就好了。完成后&#xff0c;停掉服务。 3、 安装LicenseManager &#xff0c;下一步执行就可以。 4、 接着来破解&…

前端学习(2606):vue简单叙述

第一步 引入 第二步new Vue 第三步 data绑定数据

wux-button 样式扩展 增加shape属性

1、原来的写法和界面图如下 <wux-button block type"orange">拍照确认</wux-button>2、现在的写法只需要增加一个shape"round"参数&#xff0c;可以实现按钮边框为半圆 <wux-button block type"orange" shape"round"&g…

前端框架Bootstrap简单介绍

下载&#xff1a; 解压之后&#xff1a; 把这些文件拷贝到项目中 页面使用时 只需要引入&#xff1a; 然后我们就可以参考官网来设计需要的前端页面了 设计一个按钮&#xff1a;button 只需要标明css样式中使用的类 下面就是现实效果&#xff1a; 转载于:https://www.cnblo…

vue学习中遇到的错误 Duplicate keys detected: ‘[object Object]‘. This may cause an update error.

前端入门自学&#xff0c;说错的请大神指点。 Avoid using non-primitive value as key, use string/number value instead. Duplicate keys detected: ‘[object Object]’. This may cause an update error.运行后出现这些警告&#xff0c;意思是检测到重复的键值。 把:key里…

工作113:添加echart折线图

<template><div><el-card><div slot"header" class"clearfix"><span>订单信息</span></div><!--样式控制全部 已经退回 待审核--><el-row><el-radio-group v-model"query.status" siz…

Android 城市选择,热门城市,全部城市(美团、滴滴、淘宝)

demo链接&#xff1a;https://download.csdn.net/download/meixi_android/10819638 实现效果&#xff1a; 实现方法&#xff1a;非常简洁快速&#xff0c;三步集成实现地区选择器 1、导入city.module module导入方法&#xff1a;https://blog.csdn.net/meixi_android/articl…

汽车列表 车型选择 源码备忘

因为版权问题&#xff0c;选汽车的时候不能显示汽车自己真实的图片&#xff0c;下面我需要改成列表形式&#xff0c;下面记录一下代码 1、实现效果 2、源码 <div class"car-brand-list"><div v-for"(brand,index) in brandList" :key"inde…

获取鼠标句柄

&#xff08;1&#xff09;引用 using System.Runtime.InteropServices; (2)调用方法 1、获取窗口标题 [DllImport( "user32.dll" )]   public static extern int GetWindowText( IntPtr hWnd, StringBuilder lpString,int nMaxCount ); 注&#xff1a;hWnd 窗口句…