5600|11

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于spi的问题 [复制链接]

麻烦各位帮我看看程序
为什么我得不到uclk和mosi的波形呀
#include<msp430x14x.h>

void main(void)
{
volatile unsigned int i;

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog
BCSCTL1&=~XT2OFF; //&AElig;&ocirc;&para;&macr;XT2
BCSCTL2|=SELM1; //MCTK&Icirc;&ordf;XT2,&sup2;&raquo;?&Ouml;&AElig;&micro;
BCSCTL2|=SELS; //SMCLK&Icirc;&ordf;XT2,&sup2;&raquo;?&Ouml;&AElig;&micro;
do
{
int k = 0xff;
IFG1&=~OFIFG; //&Ccedil;&aring;OSCFault±ê&Ouml;&frac34;
for(k=0xff;k>0;k--); //&Ntilde;&Oacute;&Ecirc;±&micro;&Egr××e;&acute;&yacute;
}
while((IFG1&OFIFG)!=0); //&sup2;éOSCFault,&Icirc;&ordf;0&Ecirc;±×&ordf;&raquo;&raquo;&Iacute;ê
P1SEL=0X10;
P1DIR=0X10;

P5SEL |= 0x0E; // P5.1,2,3 SPI option select
U1CTL = CHAR + SYNC + MM + SWRST; // 8-bit, SPI, Master
U1TCTL = CKPL + SSEL1 + STC; // Polarity, SMCLK, 3-wire
U1BR0 = 0x02; // SPICLK = SMCLK/2
U1BR1 = 0x00;
U1MCTL = 0x00;
ME2 |= USPIE1; // Module ena××e
U1CTL &= ~SWRST; // SPI ena××e
//IE2 |= URXIE1 + UTXIE1; // RX and TX interrupt ena××e
//IFG2&=~UTXIFG1;
P5DIR |= BIT1;
P5DIR |= BIT3;

for (i = 0xFFF; i > 0; i--); // Time for sl××e to ready
TXBUF1=0X05;
while((U1TCTL|=TXEPT)==0);
}

谢谢

最新回复

哦,好象可以,谢谢提示  详情 回复 发表于 2006-9-15 16:56
 
点赞 关注

回复
举报

59

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
#include "msp430x14x.h"

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ME1 |= USPIE0; // Ena××e USART0 SPI mode
UTCTL0 = CKPH+SSEL1+SSEL0+STC; // SMCLK, 3-pin mode
UCTL0 = CHAR+SYNC+MM; // 8-bit SPI Master **SWRST**
UBR00 = 0x02; // UCLK/2
UBR10 = 0x00; // 0
UMCTL0 = 0x00; // no modulation
P3SEL |= 0x0E; // P3.1-3 SPI option select
P3DIR |= 0x01; // P3.0 output direction
_EINT(); // Ena××e interrupts

while (1) // Loop
{
unsigned i;
for (i = 0xFFFF; i > 0; i--); // Delay
while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
P3OUT &= ~0x01; // Latch data into 'HC165
P3OUT |= 0x01;
TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0
}
}
给你个例程参考一下吧。
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
但是在
while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
之前一直没对TXBUF0赋值呀,那UTXIFG0就该一直是0,对吧,最后程序不就死循环了吗?

还有就是我自己的程序当对TXBUF赋置后,TXEPT仍然为1 。
希望各位能帮忙解释下,谢谢!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
while ((IFG1 & UTXIFG0) == 0)是位判断,是判断IFG1有没有置位。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
我又按你的程序调了一下
现象是UTXIFG0一直是高电平,
执行 TXBUF0 = RXBUF0; 这句后,TXEPT一直为1,UCLK和SIMO依然没有波形出现呀
希望斑竹能帮忙回答一下
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

6
 

问题可能是这样!

看你这句
for (i = 0xFFF; i > 0; i--); // Time for sl××e to ready
TXBUF1=0X05;
你只对TXBUF1写入一次!
SPI的通过TX的发送来驱动UCLK,也就是说你不发数据,UCLK也不输出!
所以,你发了一次也就没信号了!
你把TXBUF1=0X05变成循环写入,就应该能看到UCLK和SIMO的输出了!
以上问题在SPI收数据时也应格外注意!
另外,你程序中把UTXIFG1标志关掉!这是不太好的!版主说得检查中断位是很必要地!保证了每次发送都是有效地!
还有个地方:中断位的置位是由硬件自动产生的!也就是说buffer一空,中断位就会自动置位!
说得不一定很确切,仅供参考,你试试好了!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
谢谢各位的帮助
现在我终于得到波形了
但是在用GO调试时才得到了波形,用单步时还是得不到,能帮我解释下吗
下面是我最后的程序:
#include "msp430x14x.h"

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT

BCSCTL1&=~XT2OFF; //&AElig;&ocirc;&para;&macr;XT2
BCSCTL2|=SELM1; //MCTK&Icirc;&ordf;XT2,&sup2;&raquo;?&Ouml;&AElig;&micro;
BCSCTL2|=SELS; //SMCLK&Icirc;&ordf;XT2,&sup2;&raquo;?&Ouml;&AElig;&micro;
do
{
int k = 0xff;
IFG1&=~OFIFG; //&Ccedil;&aring;OSCFault±ê&Ouml;&frac34;
for(k=0xff;k>0;k--); //&Ntilde;&Oacute;&Ecirc;±&micro;&Egr××e;&acute;&yacute;
}
while((IFG1&OFIFG)!=0); //&sup2;éOSCFault,&Icirc;&ordf;0&Ecirc;±×&ordf;&raquo;&raquo;&Iacute;ê
P1SEL=0X10;
P1DIR=0X10;

ME2 |= USPIE1; // Ena××e USART0 SPI mode
UTCTL1 = CKPH+SSEL1+SSEL0+STC; // SMCLK, 3-pin mode
UCTL1 = CHAR+SYNC+MM; // 8-bit SPI Master **SWRST**
U1BR0 = 0x02; // UCLK/2
U1BR1 = 0x00; // 0
U1MCTL = 0x00; // no modulation
P5SEL |= 0x0E; // P3.1-3 SPI option select
P5DIR |= 0x01; // P3.0 output direction
P5DIR |= BIT1;
P5DIR |= BIT3;
_EINT(); // Ena××e interrupts


while (1) // Loop
{
unsigned i;
for (i = 0xFFFF; i > 0; i--); // Delay
while ((IFG2 & UTXIFG1) == 0); // USART0 TX buffer ready?
U1TXBUF = 0X55 ; // RXBUF0 to TXBUF0
P5OUT &= ~0x01;
P5OUT |= 0x01;
}
}
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
单步的时候你不发数据怎么看呀
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
单步执行也是要发数据的呀
我想只是发送的过程太短,示波器无法显示而已
我还想问个小问题,
UTXIFG是不是在 数据没有写入TXBUF 以及 数据发送完毕 才被硬件置位的呀
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
UTXIFG标志不代表数据的移入移出完成。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
提示一下:如果你的示波器上有自动捕捉信号的功能,当有信号输出时就触发。用自动捕捉信号可以看到一次发送时,线上的信号状况!
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 
哦,好象可以,谢谢提示
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表