打印

2407SPI和TLC2543通讯SPICLK脉冲没有

[复制链接]
1968|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liusir111|  楼主 | 2009-5-16 19:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在用DSP2407的SPI和TLC2543做一个通讯,用SPI向TLC2543发送控制字,TLC2543采集的结果返回给DSP。但是不知道为什么,SPI模块时钟SPICLK脉冲信号都检测不到,本来调试过一次,有信号了的,但是习惯不好,没有备份,一修改,自己也不知道了。我将SPI具体通讯这一块的源程序给出来,大家帮忙看一下,指出问题,不尽感谢。

/************************************************************************
                           延时程序
*************************************************************************/
void delay(int j)
{   
        unsigned int i;
        for(i=0;i<j;i++)
        {
                asm( " NOP " );
        }
}


/************************************************************************
                           系统初始化程序
*************************************************************************/
void SYSinitial(void)            
{
        asm(" setc SXM"); // 抑制符号位扩展
        asm(" clrc OVM"); // 累加器中结果正常溢出
        asm(" clrc CNF"); // B0被配置为数据存储空间
        asm(" setc INTM"); // 禁止所有中断
        *SCSR1 = 0x8FFE; // BIT11,10,9使锁相环0.5倍频,则CLOCKOUT=0.5*时钟频率=10M
                         // BIT5使能SPI模块时钟,还使能了ADC,SCI,CAN,EVB EVA时钟
        *WDCR = 0x00E8; // 不使能看门狗,因为SCSR2中的WDOVERRIDE
                        // 可以用软件禁止看门狗
        *IMR = 0x0000;  // 禁止所有中断
        *IFR = 0xFFFF; // 清除全部中断标志"写1清0"
}


/************************************************************************
                           IO初始化程序
*************************************************************************/
void IOinitial(void)
{
        *MCRA = *MCRA & 0x0000; //将IOPA和IOPB设置成为通用IO口(这个是准备用来做电子矩阵开关的)
        *MCRC = *MCRC | 0xFFFF; //将IOPE1和IOPE2设置成为通用IO口(做电子矩阵开关)
        *MCRC = *MCRC & 0xF5F9; //将IOPE1,2和IOPF1,3设置为通用IO口
                                //IOPF3测试电子开关,IOPF1设置TLC2543的转换电平EOC
                                                   //这个EOC到底要不要设置,我看了下TLC2543的资料,好像不需要设置啊
        *MCRB = *MCRB | 0xFFFF;
        *MCRB = *MCRB & 0xFFDF; //BIT2设置SPISIMO,BIT3设置SPISOMI,BIT4设置SPICLK
                                    //BIT5设置/SPISTE,即IOPC5为普通IO口(这儿用来作片选,连接到TLC2543的IOCLK引脚上去了的                                                                                                                                                    
}       
       

/************************************************************************
                           SPI初始化程序
*************************************************************************/
void SPIinitial(void)
{
        *PCDATDIR = *PCDATDIR | 0xFF00; //设置IOPC5为输出方式
        *SPICCR = 0x000F; //BIT7设置SPI软件复位,BIT6设置SPICLK信号下降沿时,数据输出;
                        //上升沿时,数据输入。当没有SPI数据发送时,SPICLK处于高电平
                        //BIT3,2,1,0设置字符长度为16位
        *SPICTL = 0x000E; //BIT4禁止超限中断,BIT3设置SPICLK信号延时半个周期,BIT2设置
                        //SPI配置为一个主模式,BIT1使能发送位,BIT0禁止中断
        *SPIBRR = 0x0007; //波特率设置为SPI波特率=CLOCKOUT/(1+SPIBRR)=1.25M
        *SPICCR = *SPICCR | 0x80; //准备好发送或接收下一个字符
           *PCDATDIR = *PCDATDIR & 0xFFDF; //输出一个低电平,片选TLC2543
}


/************************************************************************
                           TLC2543和SPI通讯程序
*************************************************************************/

//SPI发送程序
void SPIsend(unsigned int a)
{
        *SPITXBUF = a;
        while((*SPISTS) & BIT6 == 0x00); //这里的BIT6用了宏定义,为0x0009
        *SPIRXBUF = *SPIRXBUF; //虚读接收缓冲器请除SPI中断标志位
}

//AD转换程序
unsigned int AD_start(unsigned int channel)
{
        delay(30);
        SPIsend(((channel << 12) & 0xF000) | 0x0C00);
        delay(30);
        SPIsend(0x0000);
        delay(30);
        return(*SPIRXBUF >> 4);
        *PCDATDIR = *PCDATDIR | 0x0020;
        //SPI从最高位开始接收数据,高12位数据收满后右移四位将低四位无用的数移除
}

我在主函数里面用数组保存调用了AD_start()的值,由于用的是TLC2543的第一个通道,所以参量为0x0000;
在程序load以后调试时,发现没有SPICLK时钟信号,这个很郁闷。也就是说这个SPI模块连时钟脉冲都没有出来,看了帖子说要发送以后才会有时钟出来,我也调试了,但是还是不行。有关于SPI的程序我都摆在上面了,希望哪位朋友可以帮忙指点一下,因为涉及到得寄存器定义比较多,我想认真看的话估计时间是要花点的,如果能够给以帮助的话,不尽感谢。
我的QQ是297156721,电子邮箱是:liusir61094313@163.com. 本人是学生,才开始接触DSP,做一点事情,感到很棘手了,呵呵,向高手们学习!

相关帖子

沙发
liusir111|  楼主 | 2009-5-16 21:23 | 只看该作者

为什么浏览量这么少呢

咦,为什么没有人关注呢,或者说没有人来注意这些帖子呢

使用特权

评论回复
板凳
liusir111|  楼主 | 2009-5-17 22:04 | 只看该作者

呵呵,看来这儿聊DSP的不是很活跃

我在hellodsp论坛上也发了这个帖子,因为论坛更具体一点吧,上面关注的人还是蛮多的,也有朋友帮忙调试程序,指出问题,以及解决问题的方向。

使用特权

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

本版积分规则

4

主题

19

帖子

0

粉丝