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的更多相关文章

  1. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

  2. MPlayer

    名称   mplayer − 电影播放器 mencoder − 电影编解码器 概要   mplayer [选项] [文件|URL|播放列表|−] mplayer [选项] 文件1 [指定选项] [文件 ...

  3. python 爬取腾讯微博并生成词云

    本文以延参法师的腾讯微博为例进行爬取并分析 ,话不多说 直接附上源代码.其中有比较详细的注释. 需要用到的包有 BeautifulSoup WordCloud jieba # coding:utf-8 ...

  4. 面经 cisco

    1. 优先级反转问题及解决方法 (1)什么是优先级反转 简单从字面上来说,就是低优先级的任务先于高优先级的任务执行了,优先级搞反了.那在什么情况下会生这种情况呢? 假设三个任务准备执行,A,B,C,优 ...

  5. linux驱动(续)

    网络通信 --> IO多路复用之select.poll.epoll详解 IO多路复用之select.poll.epoll详解      目前支持I/O多路复用的系统调用有 select,psel ...

  6. HttpServletRequest对象(一)

    javaweb学习总结(十)——HttpServletRequest对象(一) 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HT ...

  7. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  8. 先说IEnumerable,我们每天用的foreach你真的懂它吗?

    我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件? 为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正 ...

  9. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

随机推荐

  1. mac安装memcache

    1.wget http://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz 2.tar zxvf memcache-2.2 ...

  2. 伪元素content的应用

    日常开发中,我们常用:before,:after来实现一些效果,比如 – 边框 – 图标 此时的content中只是为了伪元素能渲染出来而声明 1 2 3 div:before{ content: & ...

  3. C++数据类型总结

    关键字:C++, 数据类型, VS2015. OS:Windows 10. ANSI C/C++基本数据类型: Type Size 数值范围 无值型void 0 byte 无值域 布尔型bool 1 ...

  4. Intel Edison的那些事:修改Edison的HTTP服务的页面

    Intel Edison配置好之后,按住PWR键2-7秒(4秒恰到好处),就可以进入AP热点模式(此时,Arduino扩展板上的灯不停闪烁),可以将笔记本接入Edison的热点,然后在浏览器中访问“h ...

  5. javascript与DOM的渊源

    1. JavaScript的起源 1.1 JavaScript的诞生与发展 JavaScript最初由Netscape的Brendan Eich设计, Netscape在最初将其脚本语言命名为Live ...

  6. MQ 2035(MQRC_NOT_AUTHORIZED)

    当使用MQ7.1或7.5时,如果使用MQ管理员账号去连接MQ服务器,可能会报以下的错误,提示你权限不足. 2035 MQRC_NOT_AUTHORIZED 在之前的版本中是没有这个问题的. 原因是在7 ...

  7. 【BZOJ 1084】[SCOI2005]最大子矩阵

    Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...

  8. 【BZOJ 2730】 [HNOI2012]矿场搭建

    Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...

  9. Raft、Zab

    Raft.Zab 引言 <分布式系统理论进阶 - Paxos>介绍了一致性协议Paxos,今天我们来学习另外两个常见的一致性协议--Raft和Zab.通过与Paxos对比,了解Raft和Z ...

  10. 操作邮箱的类和文件的Md5【粘】

     MailMessage mailMsg = new MailMessage();//两个类,别混了,要引入System.Net这个Assembly             mailMsg.From ...