write_chip,read_chip
int write_chip(UINT32 addr, UINT32 data) { if(0 == fpgaRWMode) /* localbus mode */ { UINT16 datah, datal; UINT32 dataread; datah = (UINT16)(data >> 16); FPGA_REG(addr) = datah; rwWait(60); datal = (UINT16)(data & 0xFFFF); FPGA_REG(addr) = datal; rwWait(60); #if 0 read_chip(addr, &dataread); if (data != dataread) { printf("ERROR:write 0x%08X; read 0x%08X\n", data, dataread); return OK; } #endif read_chip(addr, (UINT32 *)(&dataread)); if(print_level == 1) printf("spi write 0x%05X: 0x%08X\n", addr, data); return OK; } else if(1 == fpgaRWMode) /* i2c mode */ { int ret = 0; ret = fpgaMAC_i2c_write(0,0,0,addr,(unsigned char *)(&data),4); if(print_level == 1) { if(ret != 0) printf("spi write failed! read 0x%05x: 0x%08x\n", addr, data); else printf("spi write 0x%05x: 0x%08x\n", addr, data); } if(!ret) return OK; else return ERROR; } else if(2 == fpgaRWMode) /* spi mode */ { int ret = 0; unsigned char *wtBuff = (unsigned char *)malloc(8); if(NULL == wtBuff) { printf("No memory!\n"); return -1; } *wtBuff = (unsigned char)((data>>24) & 0xff); *(wtBuff+1) = (unsigned char)((data>>16) & 0xff); *(wtBuff+2) = (unsigned char)((data>>8 ) & 0xff); *(wtBuff+3) = (unsigned char)((data ) & 0xff); ret = fpga_spi_write(addr,(unsigned char *)(wtBuff),4); if(print_level == 1) { if(ret != 0) printf("spi write failed! read 0x%05x: 0x%08x\n", addr, data); else printf("spi write 0x%05x: 0x%08x\n", addr, data); } free(wtBuff); if(!ret) return OK; else return ERROR; } else { return ERROR; } } int read_chip(UINT32 addr, UINT32 *data) { if(data == NULL) return ERROR; if(0 == fpgaRWMode) /* localbus mode */ { UINT16 datah, datal; datah = FPGA_REG(addr); rwWait(60); datal = FPGA_REG(addr); rwWait(60); *data = datal + (((UINT32)datah) << 16); if(print_level == 1) printf("localbus read 0x%05X: 0x%08X\n", addr, *data); return OK; } else if(1 == fpgaRWMode) /* i2c mode */ { int ret = 0; ret = fpgaMAC_i2c_read(0,0,0,addr,(unsigned char *)data,4); if(print_level == 1) { if(ret != 0) printf("i2c read failed! read 0x%05x: 0x%08x\n", addr, *data); else printf("i2c read 0x%05x: 0x%08x\n", addr, *data); } if(!ret) return OK; else return ERROR; } else if(2 == fpgaRWMode) /* spi mode */ { int ret = 0; ret = fpga_spi_read(addr,(unsigned char *)data,4); if(print_level == 1) { if(ret != 0) printf("spi read failed! read 0x%05x: 0x%08x\n", addr, *data); else printf("spi read 0x%05x: 0x%08x\n", addr, *data); } if(!ret) return OK; else return ERROR; } else { return ERROR; } }
write_chip,read_chip的更多相关文章
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- MPlayer
名称 mplayer − 电影播放器 mencoder − 电影编解码器 概要 mplayer [选项] [文件|URL|播放列表|−] mplayer [选项] 文件1 [指定选项] [文件 ...
- python 爬取腾讯微博并生成词云
本文以延参法师的腾讯微博为例进行爬取并分析 ,话不多说 直接附上源代码.其中有比较详细的注释. 需要用到的包有 BeautifulSoup WordCloud jieba # coding:utf-8 ...
- 面经 cisco
1. 优先级反转问题及解决方法 (1)什么是优先级反转 简单从字面上来说,就是低优先级的任务先于高优先级的任务执行了,优先级搞反了.那在什么情况下会生这种情况呢? 假设三个任务准备执行,A,B,C,优 ...
- linux驱动(续)
网络通信 --> IO多路复用之select.poll.epoll详解 IO多路复用之select.poll.epoll详解 目前支持I/O多路复用的系统调用有 select,psel ...
- HttpServletRequest对象(一)
javaweb学习总结(十)——HttpServletRequest对象(一) 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HT ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- 先说IEnumerable,我们每天用的foreach你真的懂它吗?
我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件? 为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正 ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
随机推荐
- WinForm窗体间如何传值的几种方法
(转) 窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作符窗体,有以下几种方式: 公共静态变量: 使用共有属性: 使用委托与事件: 通过构造函数把主窗体传递到从窗体中: 一.通过静态变量 特点: ...
- python staticmethod classmethod
http://www.cnblogs.com/chenzehe/archive/2010/09/01/1814639.html classmethod:类方法staticmethod:静态方法 在py ...
- Catalyst揭秘 Day7 SQL转为RDD的具体实现
Catalyst揭秘 Day7 SQL转为RDD的具体实现 从技术角度,越底层和硬件偶尔越高,可动弹的空间越小,而越高层,可动用的智慧是更多.Catalyst就是个高层的智慧. Catalyst已经逐 ...
- Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)
Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续) 今天延续昨天的内容,主要对为什么一个处理会分解成多个Job执行进行解析. 让我们跟踪下Job调用过 ...
- SpotLight的下载地址以及注册码可供参考
ToadDBASuiteforOracle_101R2.exe 试用版http://worlddownloads.quest.com.edgesuite.net/Repository/www.ques ...
- MySQL 5.1.63 单机配置多实例(简单配置)
需求: 在一台服务器上通过源码编译安装一个版本为5.1.63版本MySQL数据库: 方案:将所有配置文件与数据等均存放在/home/zhaoshuangshuang下.在同一个MySQL中运行两个实例 ...
- 四、记一次失败的 CAS 搭建 之 结果总是那么伤(客户端)
==================================================================================================== ...
- 为cocos2d-x实现安卓输入框。非全屏,无dialog,绑定到lua
cocos2d-x官方自带的输入框,简直惨不忍睹,在ios还好,在安卓简直了..用过的都知道... 所以为了用户体验,我们自己搞一个吧.输入框这种东西比较特殊,不像按钮.列表框之类的很容易实现,因为涉 ...
- GIS业务逻辑
三维怎么加载数据文件? OpenFileDialog frm = new OpenFileDialog(); frm.Filter = "文件数据集|*.tile|多时相数据集|*.Temp ...
- EXTJS 4.2 资料 控件之textfield文本框加事件的用法
{ xtype: "textfield", width: 100, id: "txtGroupName", name: "txtGroupName&q ...