TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430F449: MSP430F449 SIMO空闲状态为什么一直为高电平的原因?

Part Number:MSP430F449

您 好!

     对msp430F449 采用SPI通信与时间芯片,初始化设置后空闲状态SIMO始终为高电平,强制低电平也不行,用逻辑分析仪监视初始化U0TCTL发送控制寄存器的“STC”设置为1选择3线模式,就为高电平了,不知道什么原因?请高位工程师帮忙分析一下!

?? ?:

发现是由于P3.1-P3.3端口设置与 SPI通信设置冲突导致:

P3SEL |= BIT1 + BIT2 + BIT3; //SPI引脚启用,作为片内外设的对外接口 P3DIR |= BIT1 + BIT3; //MO,CLK设为输出 P3DIR &= ~BIT2; //MI为输入 P3DIR |= BIT0; 

SPI通信主机设置:

//UxCTL控制寄存器 U0CTL |= SWRST; // 复位SPI功能 U0CTL |= MM; // 主模式 U0CTL |=SYNC; // 同步 SPI模式 U0CTL |=CHAR; // 8位数据模式 //UxCTL发送控制寄存器 U0TCTL |=STC; //U0TCTL &= ~SSEL0; U0TCTL |= SSEL0; // SSEL1 时钟源选择ACLK U0CTL &= ~CKPL; // 时钟空闲状态下为低电平 U0CTL &= ~CKPH; //时钟相位选择=0 //UxBR0、UXBR1波特率选择寄存器0和1 U0BR0 = 0x03; // 03使用32768Hz晶体波特率32768/9600=3.413 U0BR1 = 0x00; //00 U0MCTL = 0x4A; // 小数波特率调整因子 //模块功能使能寄存器 ME1|=USPIE0; //  U0CTL &= ~SWRST; // 使能SPI功能,从复位模式下运行 //中断使能 //IE1|= URXIE0; //UTXIE0; //  //IE1|= UTXIE0; //中断标志寄存器 IFG1 &=~URXIFG0; // 清除接收和发送中断标志 //IFG1 &=~UTXIFG0; //接收中断标志位默认为零

不知道怎么解决?

,

Yale Li:

您好,您把这两行注释掉试一下:

?? ? 说:P3DIR |= BIT1 + BIT3; //MO,CLK设为输出 P3DIR &= ~BIT2; //MI为输入

,

?? ?:

您好!按照您说的建议试验了,还是不行,空闲时一直高电平有效!

//P3DIR |= BIT1 + BIT3; //MO,CLK设为输出 //P3DIR &= ~BIT2; //MI为输入

,

Yale Li:

您好,我下周回来之后再帮您看一下

,

Yale Li:

?? ? 说:发现是由于P3.1-P3.3端口设置与 SPI通信设置冲突导致

您是如何做出这样的判断的?

,

Yale Li:

可以正常通信吗?通信的时候还会保持高电平吗?

,

?? ?:

空闲状态一直是高电平有效,相当于把SPI的设置模式改变了,跟时间芯片不能正常通讯!

,

?? ?:

设置的时钟极性为0而实际为1

,

?? ?:

如果单独设置SPI的参数 不设置 P3.1-P3.3 正常 ,一旦设置了模块功能,时钟极性瞬间就变为高电平

,

Yale Li:

您的意思就是,在配置SPI时,如果不配置P3.1-P3.3,就不会出现您说的问题吗?

,

?? ?:

从实际测量的波形上看,是这样的!单独设置SPI的极性及相位,可以,配置模块功能就不行了!不知道什么原因?

,

Yale Li:

您是需要将这3个管脚复用吗?

例程中在配置SPI时只配置了P3SEL这个寄存器,这就是我刚开始为什么让您将另外两行代码注释掉的原因。

例程的参考价值同样很重要。

,

?? ?:

这三个管脚必须复用啊,如果不设置无法实现SPI通讯功能!

,

Yale Li:

我的意思是您还需要将它当GPIO用吗?

配置成SPI,只需要设置P3SEL就可以了,不需要设置方向寄存器。

您也说了,不配置方向寄存器就能正常工作。

,

?? ?:

配置SPI +P3SEL |= BIT1 + BIT2 + BIT3; //SPI引脚启用,作为片内外设的对外接口P3DIR |= BIT1 + BIT3; //MO,CLK设为输出P3DIR &= ~BIT2; //MI为输入

必须配置才能通讯!

,

?? ?:

这样通讯SPI模式不正确,造成无法与时间芯片通讯!

,

Yale Li:

我似乎找到问题所在了:

,

?? ?:

你的意思保证或门必须为低电平,STC必须设置为0?那样发送缓存标志位正常,而接收缓存寄存器标志位始终无法收到置位信号,一直等待状态程序处于死循环!

,

Yale Li:

这款芯片时间比较早了,各种手册的写法和现在的也不太一样;我手里暂时也没有这块板卡。

我加您好友了,您把您的代码发过来,我找人帮您看一下。

,

?? ?:

已发!

,

Yale Li:

您的工程名中包含非ASCII字符,我们这边无法导入,您能修改一下工程名称吗?

,

Yale Li:

您好,之前有一个地方回复错您了。

Yale Li 说:

这个框图表示的是相关IO口的方向控制。

可以看到其实不需要配置IO口的方向寄存器就能控制相关IO口在SPI模式下的方向。

例程中也确实没有配置方向寄存器。

还有例程中是先配置USART模块,最后才进行与IO相关的配置的。

,

?? ?:

如果不设置I/O读不到接收的缓存数据!

,

Yale Li:

您好,请提供合适的CCS工程,以方便我们帮您检查。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F449: MSP430F449 SIMO空闲状态为什么一直为高电平的原因?
分享到: 更多 (0)