打印

请问DSP和CPLD该怎么结合使用

[复制链接]
3306|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
比如我想用其中一个按键控制一个LED的亮灭  该怎么编程  2812的DSp

相关帖子

沙发
zhangmangui| | 2015-7-18 21:12 | 只看该作者
你先要弄清楚    在硬件上的扩展是什么原理
CPLD一般都是扩展到DSP的EMIF接口上     确定是哪个CS扩展的
这些弄清楚了   就要知道CPLD的扩展代码怎么写的
比如代码给LED分配的地址是001    那么 DSP端就根据CS的找到基地址   在加上LED的分配地址
然后去读写

使用特权

评论回复
板凳
dirtwillfly| | 2015-7-18 22:45 | 只看该作者
除了EMIF接口,也可以用iic、spi等通讯方式进行连接和通讯

使用特权

评论回复
地板
wangchao1607|  楼主 | 2015-7-19 08:55 | 只看该作者
zhangmangui 发表于 2015-7-18 21:12
你先要弄清楚    在硬件上的扩展是什么原理
CPLD一般都是扩展到DSP的EMIF接口上     确定是哪个CS扩展的
...

说明书上说命了外围器件的起始地址,比如八个按键的地址是0x4800, 定义了这个地址可以对按键值进行读取了吗?

使用特权

评论回复
5
wangchao1607|  楼主 | 2015-7-19 08:59 | 只看该作者
zhangmangui 发表于 2015-7-18 21:12
你先要弄清楚    在硬件上的扩展是什么原理
CPLD一般都是扩展到DSP的EMIF接口上     确定是哪个CS扩展的
...

请看看这个按键的历程
#include "DSP28_Device.h"

void WriteLED(unsigned char data);
void delay(unsigned long t);
Uint16 GetKey(void);

unsigned int * SPI_CS  = (unsigned int *) 0x4500;
unsigned int * KeyReg     = (unsigned int *) 0x4800;

unsigned long int a;
Uint16        SpiCode[]={0xFFFF,0x7E7E,0x2929,0x2c2c,0x6666,0xa4a4,0xa0a0,0x3e3e,0x2020};

void main(void)
{   unsigned int i,k;

        /*初始化系统*/
        InitSysCtrl();
        /* 关中断 */
        DINT;
        IER = 0x0000;
        IFR = 0x0000;
        /* 初始化PIE控制寄存器 */
        InitPieCtrl();
        /* 初始化PIE参数表 */
        InitPieVectTable();       
        /* 初始化外设寄存器 */
        InitPeripherals();
       
        ///初始化IO口
        InitGpio();
       
        ///初始化SPI
           InitSpi();
          
   
        /*设置CPU*/
       
        EINT;   // Enable Global interrupt INTM
        ERTM;        // Enable Global realtime interrupt DBGM

    *SPI_CS=0x00;       

        for(;;)
         {
           k=GetKey();                                //读取键值
           i=0;
           while(k!=0)
           {
                           k=k>>1;
                           i++;
           }                                                //转换为键码,1~8分别对应1,2,4,8,16,32,64,128
          
           WriteLED(SpiCode);        //将所获得的键码显示在数码管上
           delay(1000);   
         }
}        

       


void WriteLED(unsigned char data)
{
   
  if(Spi_TxReady() == 1)
     SpiaRegs.SPITXBUF = data;
  while( Spi_TxReady()!=1);
  delay(1000);
  *SPI_CS=0x01;       
  *SPI_CS=0x00;       
}

void delay(unsigned long t)
{
while(t>0)
    t--;
}

unsigned int GetKey(void)
{
    unsigned int        temp,temp1;

        temp = *KeyReg;
        temp = temp & 0xff;
        delay(100);
        temp1 = *KeyReg;                       
        temp1 = temp1 & 0xff;                //去抖动

    if(temp1==temp)
      return(~temp & 0xff);                //这里取反是为了观察方便
    else
      return 0xff;                    
}
CS是不是就是那个开关片选  然后直接对地址操作!  还有 CPLD的代码是在头文件里已经写好了吗?  在哪可以查看啊  谢谢啦

使用特权

评论回复
6
wangchao1607|  楼主 | 2015-7-19 09:01 | 只看该作者
dirtwillfly 发表于 2015-7-18 22:45
除了EMIF接口,也可以用iic、spi等通讯方式进行连接和通讯

我是个新手   比如直接用按键  都改怎么编程呢    说明书上说按键的地址是0x4800,是不是把这个地址定义成KEY   然后读到 KEY=0x01就是第一个键按下了?    谢谢啦

使用特权

评论回复
7
wangchao1607|  楼主 | 2015-7-19 09:16 | 只看该作者
zhangmangui 发表于 2015-7-18 21:12
你先要弄清楚    在硬件上的扩展是什么原理
CPLD一般都是扩展到DSP的EMIF接口上     确定是哪个CS扩展的
...

f(Spi_TxReady() == 1)
     SpiaRegs.SPITXBUF = data;   这句的作用是什么呢

使用特权

评论回复
8
zhangmangui| | 2015-7-19 21:52 | 只看该作者
wangchao1607 发表于 2015-7-19 08:55
说明书上说命了外围器件的起始地址,比如八个按键的地址是0x4800, 定义了这个地址可以对按键值进行读取 ...

是这样的   你的这种扩展就是EMIF接口
按键是输入的    你直接就此地址  去读

使用特权

评论回复
9
zhangmangui| | 2015-7-19 21:53 | 只看该作者
wangchao1607 发表于 2015-7-19 08:59
请看看这个按键的历程
#include "DSP28_Device.h"

你对他给的地址操作  EMIF接口会自动将CS叫拉低

使用特权

评论回复
10
zhangmangui| | 2015-7-19 21:54 | 只看该作者
wangchao1607 发表于 2015-7-19 09:16
f(Spi_TxReady() == 1)
     SpiaRegs.SPITXBUF = data;   这句的作用是什么呢

应该是去判断SPI发送是不是准备好   也就是有没有忙信号
如果有就等待前面的数据发送完成    在送入此次发送数据

使用特权

评论回复
11
尤彼卡| | 2015-7-29 10:14 | 只看该作者
楼主是怎么做的,EMIF接口会自动将CS叫拉低

使用特权

评论回复
12
可可球| | 2015-7-29 10:42 | 只看该作者
楼主的这种扩展就是EMIF接口

使用特权

评论回复
13
tongbu2015| | 2015-7-29 21:53 | 只看该作者
这两者间需要注意之间的数据交换的。

使用特权

评论回复
14
米尔豪斯| | 2015-7-30 09:37 | 只看该作者
CS是开关片选

使用特权

评论回复
15
lefeng| | 2015-7-30 10:01 | 只看该作者
先判断SPI发送是不是准备好,等待前面的数据发送完成

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

25

帖子

1

粉丝