DSP通过xintf总线与cpld或者fpga进行通信
来源:互联网 发布:设置淘宝客推广条件 编辑:程序博客网 时间:2024/05/17 09:29
之前做过dsp28335与cpld通信,扩展io和iic总线,驱动液晶等的一些开发工作,怕忘了,写点东西记下来。希望能帮助带需要的朋友。关于xintf.h
#ifndef XINTF_H_#define XINTF_H_#define ADDR_EX_RAM_BASE 0x200000#define EX_RAM_LEN 0x10000//CPLD address. CR~CPLD read. CW~CPLD write#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) //DI 15~0#define ADDR_CR_CDIH (ADDR_CPLD_BASE + ADDR_CPLD_RD_OFS + 0x100) //DI 23~16#define ADDR_CR_KEY (ADDR_CPLD_BASE + ADDR_CPLD_RD_OFS + 0x200) //KEY 8~0//CPLD write addr#define ADDR_CW_CDOL (ADDR_CPLD_BASE + ADDR_CPLD_WR_OFS + 0x300) //DO 15~0#define ADDR_CW_CDOH (ADDR_CPLD_BASE + ADDR_CPLD_WR_OFS + 0x400) //DO 23~16#define ADDR_CW_GPIO (ADDR_CPLD_BASE + ADDR_CPLD_WR_OFS + 0x500) //LED 5~0(0:5) LED_test 3~0(6:9) LCD_BL(10)#define ADDR_CW_LCD (ADDR_CPLD_BASE + ADDR_CPLD_WR_OFS + 0x600) //LCD reg//#define ADDR_CW_LIO (ADDR_CPLD_BASE + ADDR_CPLD_WR_OFS + 0x700) //LCD IO:CSn_LCD(0),LCD_BL(1),CSPI_MOSIA(2),CSPI_MISOA(3),T_PEN(4),CSPI_CLKA(5),CSPI_CSn(6)//#define ADDR_CW_LCD (ADDR_CPLD_BASE + ADDR_CPLD_WR_OFS + 0x800) //lcd data#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; }}void read_di(void){ /* Read a half-word from the memory */ Uint16 i = 0; Uint32 tmp; di_value.di_new = (Uint32)(*(Uint16 *)(ADDR_CR_CDIL)) & 0x00ffff; di_value.di_new |= ((Uint32)(*(Uint16 *)(ADDR_CR_CDIH)) << 16) & 0xff0000; tmp = di_value.di_new ^ di_value.di_filtered; while(i < DI_CHANNEL_NUM) { if(0 == (tmp & ((Uint32)1<<i))) { di_value.di_timer[i] = 0; } else { ++di_value.di_timer[i]; if(di_value.di_timer[i] > di_value.di_filter_num[i]) { di_value.di_filtered &= ~((Uint32)1<<i); di_value.di_filtered |= ((Uint32)1<<i) & di_value.di_new; di_value.di_timer[i] = 0; } } ++i; }}
cpld部分的编写相对简单,需要注意的是:
赛灵思和奥特拉的开发环境上verilog的用法有些区别,尤其是
在三态门这里,注意。两个环境下对相应结果的判断输出是相反的(有待考证是不是自己编程的问题);
在不引用IP做fifo的情况下,做单字节接收相对简单,多字节接收容易覆盖。
阅读全文
0 0
- DSP通过xintf总线与cpld或者fpga进行通信
- FPGA与DSP共享外部总线问题
- FPGA与CPLD
- FPGA与CPLD
- FPGA与CPLD区别
- FPGA与CPLD
- CPLD与FPGA
- S3C2410通过IIS总线与音频芯片UDA1380进行通信
- S3C2410通过IIS总线与音频芯片UDA1380进行通信
- DSP与FPGA通信调试笔记之一——通过GPMC接口用EDMA传送
- DM8168]DSP与FPGA通信调试笔记之一——通过GPMC接口用EDMA传送
- AM3730 GPMC总线与FPGA通信
- AM3730 GPMC总线与FPGA通信
- 采用CPLD或者FPGA显示TFT液晶屏
- FPGA与CPLD的区别
- FPGA与CPLD的区别
- FPGA与CPLD的区别
- FPGA与CPLD的区别
- linux 中 error 处理函数详解
- 带你入门javascript数组
- Java 工程师技能树(有下载的xmind源文件)
- java写的spark程序的本地运行和集群运行
- 数组翻转
- DSP通过xintf总线与cpld或者fpga进行通信
- caffe-windows matlab 接口配置
- 文本表示+向量空间模型
- TensorFlow学习笔记之源码分析(3)---- retrain.py
- 设计师如何学会用自驱力成长
- 字符简论
- popuwindow小案例
- 数据结构和算法绪论
- eclipse中代码提示设置