DSP通过xintf总线与cpld或者fpga进行通信
2017-10-11 15:28
337 查看
之前做过dsp28335与cpld通信,扩展io和iic总线,驱动液晶等的一些开发工作,怕忘了,写点东西记下来。希望能帮助带需要的朋友。 关于xintf.h
#ifndef XINTF_H_ #define XINTF_H_ #define ADDR_EX_RAM_BASE 0x200000 #define EX_RAM_LEN 0x10000 #define ADDR_CPLD_BASE ((Uint32)0x4000) #define ADDR_CPLD_RD_OFS ((Uint32)0x000) #define ADDR_CPLD_WR_OFS ((Uint32)0x000) //CPLD read addr #define ADDR_CR_CDIL (ADDR_CPLD_BASE + ADDR_CPLD_RD_OFS + 0x000) #define ADDR_CR_CDIH (ADDR_CPLD_BASE + ADDR_CPLD_RD_OFS + 0x100) #endif /* XINTF_H_ */
在配置cpld时候,可以选择dsp输出同步时钟的方式,作为cpld的clk时钟源。 xintf的输出时钟的频率要进行设置。 本人的外扩io和key部分代码如下: void read_key(void) { /* Read a half-word from the memory */ Uint16 i = 0; Uint32 tmp; key_value.di_new = (Uint32)(*(Uint16 *)(ADDR_CR_KEY)) & 0x0001ff; tmp = key_value.di_new ^ key_value.di_filtered; while(i < KEY_BT_NUM) { if(0 == (tmp & ((Uint32)1<<i))) { key_value.di_timer[i] = 0; } else { ++key_value.di_timer[i]; if(key_value.di_timer[i] > key_value.di_filter_num[i]) { key_value.di_filtered &= ~((Uint32)1<<i); key_value.di_filtered |= ((Uint32)1<<i) & key_value.di_new; key_value.di_timer[i] = 0; } } ++i; } }
cpld部分的编写相对简单,需要注意的是:
赛灵思和奥特拉的开发环境上verilog的用法有些区别,尤其是
在三态门这里,注意。两个环境下对相应结果的判断输出是相反的(有待考证是不是自己编程的问题);
在不引用IP做fifo的情况下,做单字节接收相对简单,多字节接收容易覆盖。
相关文章推荐
- DSP与FPGA通信调试笔记之一——通过GPMC接口用EDMA传送
- 【DM8168】DSP与FPGA通信调试笔记之一——通过GPMC接口用EDMA传送
- S3C2410通过IIS总线与音频芯片UDA1380进行通信
- DM8168]DSP与FPGA通信调试笔记之一——通过GPMC接口用EDMA传送
- 关于FPGA与电脑通过USB2.0进行通信的问题
- S3C2410通过IIS总线与音频芯片UDA1380进行通信
- 使用命名管道通过网络在进程之间进行通信
- 多线程 通过管道进行线程间通信
- php和c通过socket进行通信
- 蜜罐技术——通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析
- Activity通过获得Service实例与其进行通信
- WCF之旅读书笔记(2):WCF如何通过Binding进行通信
- Android入门:通过XML数据与服务器进行通信
- 子线程与主线程通过Handler进行通信
- 局域网内通过socket进行通信聊天 jar包
- 采用CPLD或者FPGA显示TFT液晶屏
- 1 bindService的启动 2通过AIDL来进行进程间的通信
- 父进程下的两个子进程通过管道进行通信
- 【物联网云端对接-4】通过MQTT协议与百度云进行云端通信
- Ajax 如何通过url 传递Json 数据或者数组 给PHP进行处理