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工程,以方便我们帮您检查。