DSP通过xintf总线与cpld或者fpga进行通信

3 篇文章 0 订阅
之前做过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的情况下,做单字节接收相对简单,多字节接收容易覆盖。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值