2407SPI和TLC2543通讯SPICLK脉冲没有

[复制链接]
2773|2
 楼主| liusir111 发表于 2009-5-16 19:37 | 显示全部楼层 |阅读模式
我在用DSP2407的SPI和TLC2543做一个通讯,用SPI向TLC2543发送控制字,TLC2543采集的结果返回给DSP。但是不知道为什么,SPI模块时钟SPICLK脉冲信号都检测不到,本来调试过一次,有信号了的,但是习惯不好,没有备份,一修改,自己也不知道了。我将SPI具体通讯这一块的源程序给出来,大家帮忙看一下,指出问题,不尽感谢。<br /><br />/************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;延时程序<br />*************************************************************************/<br />void&nbsp;delay(int&nbsp;j)<br />{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltj;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&nbsp;&quot;&nbsp;NOP&nbsp;&quot;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />/************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统初始化程序<br />*************************************************************************/<br />void&nbsp;SYSinitial(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;&nbsp;setc&nbsp;SXM&quot;);&nbsp;//&nbsp;抑制符号位扩展<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;&nbsp;clrc&nbsp;OVM&quot;);&nbsp;//&nbsp;累加器中结果正常溢出<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;&nbsp;clrc&nbsp;CNF&quot;);&nbsp;//&nbsp;B0被配置为数据存储空间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;&nbsp;setc&nbsp;INTM&quot;);&nbsp;//&nbsp;禁止所有中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*SCSR1&nbsp;=&nbsp;0x8FFE;&nbsp;//&nbsp;BIT11,10,9使锁相环0.5倍频,则CLOCKOUT=0.5*时钟频率=10M<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;BIT5使能SPI模块时钟,还使能了ADC,SCI,CAN,EVB&nbsp;EVA时钟<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*WDCR&nbsp;=&nbsp;0x00E8;&nbsp;//&nbsp;不使能看门狗,因为SCSR2中的WDOVERRIDE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;可以用软件禁止看门狗<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*IMR&nbsp;=&nbsp;0x0000;&nbsp;&nbsp;//&nbsp;禁止所有中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*IFR&nbsp;=&nbsp;0xFFFF;&nbsp;//&nbsp;清除全部中断标志&quot;写1清0&quot;<br />}<br /><br /><br />/************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO初始化程序<br />*************************************************************************/<br />void&nbsp;IOinitial(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*MCRA&nbsp;=&nbsp;*MCRA&nbsp;&&nbsp;0x0000;&nbsp;//将IOPA和IOPB设置成为通用IO口(这个是准备用来做电子矩阵开关的)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*MCRC&nbsp;=&nbsp;*MCRC&nbsp;|&nbsp;0xFFFF;&nbsp;//将IOPE1和IOPE2设置成为通用IO口(做电子矩阵开关)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*MCRC&nbsp;=&nbsp;*MCRC&nbsp;&&nbsp;0xF5F9;&nbsp;//将IOPE1,2和IOPF1,3设置为通用IO口<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//IOPF3测试电子开关,IOPF1设置TLC2543的转换电平EOC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这个EOC到底要不要设置,我看了下TLC2543的资料,好像不需要设置啊<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*MCRB&nbsp;=&nbsp;*MCRB&nbsp;|&nbsp;0xFFFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*MCRB&nbsp;=&nbsp;*MCRB&nbsp;&&nbsp;0xFFDF;&nbsp;//BIT2设置SPISIMO,BIT3设置SPISOMI,BIT4设置SPICLK<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//BIT5设置/SPISTE,即IOPC5为普通IO口(这儿用来作片选,连接到TLC2543的IOCLK引脚上去了的&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />/************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI初始化程序<br />*************************************************************************/<br />void&nbsp;SPIinitial(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*PCDATDIR&nbsp;=&nbsp;*PCDATDIR&nbsp;|&nbsp;0xFF00;&nbsp;//设置IOPC5为输出方式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*SPICCR&nbsp;=&nbsp;0x000F;&nbsp;//BIT7设置SPI软件复位,BIT6设置SPICLK信号下降沿时,数据输出;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//上升沿时,数据输入。当没有SPI数据发送时,SPICLK处于高电平<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//BIT3,2,1,0设置字符长度为16位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*SPICTL&nbsp;=&nbsp;0x000E;&nbsp;//BIT4禁止超限中断,BIT3设置SPICLK信号延时半个周期,BIT2设置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SPI配置为一个主模式,BIT1使能发送位,BIT0禁止中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*SPIBRR&nbsp;=&nbsp;0x0007;&nbsp;//波特率设置为SPI波特率=CLOCKOUT/(1+SPIBRR)=1.25M<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*SPICCR&nbsp;=&nbsp;*SPICCR&nbsp;|&nbsp;0x80;&nbsp;//准备好发送或接收下一个字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*PCDATDIR&nbsp;=&nbsp;*PCDATDIR&nbsp;&&nbsp;0xFFDF;&nbsp;//输出一个低电平,片选TLC2543<br />}<br /><br /><br />/************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TLC2543和SPI通讯程序<br />*************************************************************************/<br /><br />//SPI发送程序<br />void&nbsp;SPIsend(unsigned&nbsp;int&nbsp;a)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*SPITXBUF&nbsp;=&nbsp;a;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((*SPISTS)&nbsp;&&nbsp;BIT6&nbsp;==&nbsp;0x00);&nbsp;//这里的BIT6用了宏定义,为0x0009<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*SPIRXBUF&nbsp;=&nbsp;*SPIRXBUF;&nbsp;//虚读接收缓冲器请除SPI中断标志位<br />}<br /><br />//AD转换程序<br />unsigned&nbsp;int&nbsp;AD_start(unsigned&nbsp;int&nbsp;channel)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(30);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPIsend(((channel&nbsp;&lt&lt&nbsp;12)&nbsp;&&nbsp;0xF000)&nbsp;|&nbsp;0x0C00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(30);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPIsend(0x0000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(30);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(*SPIRXBUF&nbsp;&gt&gt&nbsp;4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*PCDATDIR&nbsp;=&nbsp;*PCDATDIR&nbsp;|&nbsp;0x0020;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SPI从最高位开始接收数据,高12位数据收满后右移四位将低四位无用的数移除<br />}<br /><br />我在主函数里面用数组保存调用了AD_start()的值,由于用的是TLC2543的第一个通道,所以参量为0x0000;<br />在程序load以后调试时,发现没有SPICLK时钟信号,这个很郁闷。也就是说这个SPI模块连时钟脉冲都没有出来,看了帖子说要发送以后才会有时钟出来,我也调试了,但是还是不行。有关于SPI的程序我都摆在上面了,希望哪位朋友可以帮忙指点一下,因为涉及到得寄存器定义比较多,我想认真看的话估计时间是要花点的,如果能够给以帮助的话,不尽感谢。<br />我的QQ是297156721,电子邮箱是:liusir61094313@163.com.&nbsp;本人是学生,才开始接触DSP,做一点事情,感到很棘手了,呵呵,向高手们学习!
 楼主| liusir111 发表于 2009-5-16 21:23 | 显示全部楼层

为什么浏览量这么少呢

咦,为什么没有人关注呢,或者说没有人来注意这些帖子呢
 楼主| liusir111 发表于 2009-5-17 22:04 | 显示全部楼层

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

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

本版积分规则

4

主题

19

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部