【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,一经查实,立即删除!

相关文章

WebView纯浏览模式,webView不可点击

方法1&#xff1a; webView.setWebViewClient(new WebViewClient() {Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) { // view.loadUrl(url);return true;//true时&#xff0c;不可点击跳页效果&#xff0c;false时&#xff0c;可…

js 短信验证码 6位数字

其死后就一样代码&#xff0c;比较简单&#xff0c;但是非常常用 const code (000000 Math.floor(Math.random() * 999999)).slice(-6);

服务器的性能监测及工具(profmon)

在使用PerfMon进行服务器基准测试之前&#xff0c;我们将介绍几个技巧来检测服务器的内存使用情况&#xff0c;以确保内存分配不会影响服务器性能。 Memory:Available Bytes-这个功能检测操作系统(OS)的物理内存总量&#xff0c;并计算服务器上运行所有必须进程和应用程序所需的…

Android中1像素Activity进程保活

背景Android8.0马上就要发布&#xff0c;Google对于安卓市场上各种应用占据内存空间的问题不断进行内存完善&#xff0c;我们的应用进程很难再保持不死之身&#xff0c;以前的服务唤醒在5.0已经失效&#xff0c;现在我们尽可能的做到保活方式就是提高进程的优先级&#xff0c;本…

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

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

fn:replace()函数

fn:replace()函数将字符串中所有指定的子串用另外的字符串替换。 语法 fn:replace()函数的语法如下&#xff1a; ${fn:replace(<原始字符串>, <被替换的字符串>, <要替换的字符串>)} 实例演示 以下实例演示了这个函数的功能&#xff1a; <% page language…

oracle 数据更新

项目在外地实施&#xff0c;回公司时需要将数据同步&#xff0c;带回来一个&#xff24;&#xff35;&#xff2d;&#xff30;文件&#xff0c;怎么做呢&#xff1f; 首先删除本地的用户 &#xff1a;drop user username cascade; 然后新建这个用户&#xff0c;付权限&…

java 基本数据类型和包装类型

基本数据类型&#xff1a;byte&#xff0c;int&#xff0c; short&#xff0c; long&#xff0c; boolean&#xff0c;char&#xff0c; float&#xff0c;double等 包装类型&#xff1a; Byte&#xff0c;Integer&#xff0c;Short&#xff0c;Long&#xff0c;Boolean&#x…

django之快速分页

本文介绍djanog两种分页&#xff0c;第一是普通分页&#xff0c;第二是使用haystack全文检索的分页。 &#xff11;&#xff0e;django自带分页功能&#xff0c;这个功能非常好用。基本知识点&#xff1a;Django提供了数据分页的类&#xff0c;这些类被定义在django/core/pagin…

ORA-01033: ORACLE initialization or shutdown in progress

数据库无法连接&#xff0c;提示&#xff1a;ORA-01033: ORACLE initialization or shutdown in progress 现象是这样的&#xff1a; 在我们的测试环境中&#xff0c;一个数据库装了很多个实例&#xff0c;每个实例需要占用一定的内存&#xff0c;当我们有某个实例不需要用的…

node 测试生成模拟用户数据

使用到npm库mockjs&#xff0c;虽然这是一个截止目前两年都不更新的库&#xff0c;但是功能还是可以的。 安装 yarn add mockjs使用 const mock require(mockjs).mock; const nickname mock(cname); console.log(nickname);官方说明文档 http://mockjs.com/examples.html#D…

【codeforces 239B】Easy Tape Programming

【题目链接】:http://codeforces.com/contest/239/problem/B 【题意】 给你一个长度为n的字符串,只包括‘<”>’以及数字0到9; 给你q个区间(n和q都小于等于100) 然后让你在这q个区间里面做一些操作; 有一个指针int,指向当前操作的位置,还有一个方向的int; 表示这个…

sql server 数据库还原

最近有接触到sql server 数据库&#xff0c;项目去外实施回来后&#xff0c;需要为数据库做数据还原&#xff0c;同步数据库测试环境&#xff0c;其实有二种方法。 第一种是把库文件全部拷过来&#xff0c;然后附加上来就可以了&#xff0c;这种方法挺简单。 第二种方法就是备…

Android 通知删除事件监听,截获通知

安卓12广播 if(this.getPackageName() !null){intent.setPackage(this.getPackageName()); } F01AMainActivity.this.sendBroadcast(intent); Intent intentCancel new Intent(getApplicationContext(),NotificationBroadcastReceiver.class); PendingIntent pendingIntentCa…

小程序设置页面背景颜色

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