This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430F5244:SPI 问题

Guru**** 2024620 points
Other Parts Discussed in Thread: MSP430F5244
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/606266/ccs-msp430f5244-spi-issue

器件型号:MSP430F5244

工具/软件:Code Composer Studio

大家好、我现在在 MSP430F5244上工作。 我的问题是、当我以1MHz 速度运行控制器时、SPI 的工作速度略有下降、如果我以8MHz SPI 运行控制器完全不起作用、我粘贴了我的代码、请帮助我遇到问题的人。

#include 
#include 
//#include "System_clk.h"
//#include "spi_function.h"
void systemClockConfigure_8MHz ()
{
PMAPPWD = 0x02D52; //启用写入访问以修改端口映射寄存器
P4MAP7 = PM_MCLK;
PMAPPWD=0; //禁用写访问以修改端口映射寄存器

UCSCTL3 = SELREF_2; //设置 DCO FLL 基准= REFO
UCSCTL4 |= SELA_2 /*| SELESS_DCOCLK*/; //设置 ACLK = REFO

_bis_SR_register (SCG0); //禁用 FLL 控制环路
UCSCTL0 = 0x0000; //设置可能的最低 DCOx、MODx
UCSCTL1 = DCORSEL_5; //选择 DCO 范围16MHz 操作
UCSCTL2 = FLLD_1 + 249; //为8MHz 设置 DCO 乘法器
//(N + 1)* FLLRef = Fdco
//(249 + 1)* 32768 = 8MHz
_BIC_SR_register (SCG0); //启用 FLL 控制环路

// DCO 范围位已经存在时、DCO 的最坏情况稳定时间
//已更改 n x 32 x 32 x f_MCLK / f_FLL_reference。 请参阅5xx 中的 UCS 一章
// UG 进行优化。
// 32 x 32 x 8 MHz/32、768Hz = 250000 = MCLK 周期、DCO 才能稳定
_DELAY_CYCLES (250000);


//循环直到 XT1、XT2和 DCO 稳定-在这种情况下、只有 DCO 必须稳定
操作
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
} while (SFRIFG1&OFIFG); //测试振荡器故障标志

UCSCTL4 |= SELESS_DCOCLK | SELM_DCOCLK; //MCLK 和 SMCLK=DCOCLK
}
void systemClockConfigure_1MHz ()
{
PMAPPWD = 0x02D52; //启用写入访问以修改端口映射寄存器
P4MAP7 = PM_MCLK;
PMAPPWD=0; //禁用写访问以修改端口映射寄存器

UCSCTL4 |= SE拉美 经济体系2; //设置 ACLK = REFO
}

void SPI_UCB1Init()
{
P4DIR |= BIT1 |BIT3;
P4SEL |= BIT1 |BIT3; // SPI 的 MISO 和 clk 引脚
UCB1CTL1 |= UCSWRST;
UCB1CTL0 ||(UCMSB | UCSYNC | UCMST | UCCKPL);//3Wire_SPI + SYNC_MODE + MSB FIRST + MASTER_MODE UCCKPH || UCCKPL
UCB1CTL1 |= UCSSEL_SMCLK; //SMCLK UCSSEL_SMCLK 12MHz
UCB1BR0 = 0x00;
UCB1BR1 = 0x00;
UCB1CTL1 &=~UCSWRST;
}

void SPI_LCDTx (uint8_t value)
{
UCB1TXBUF=值;
while (!(UCB1IFG & UCTXIFG))
;
}
/*
main.c
*/
int main (void){
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
// systemClockConfigure_1MHz ();
systemClockConfigure_8MHz ();
SPI_UCB1Init();
while (1)
{
SPI_LCDTx ('A');
SPI_LCDTx ('b');
SPI_LCDTx ('c');
}
返回0;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Dhananjay、

    我看到您正在为 SPI MISO 和 CLK 引脚使用端口映射、但您尚未设置 PMAPx 寄存器。 此外、您也没有设置 MOSI 线路。 我建议查看此处提供的此器件的端口映射和 SPI 示例

    此外、您是否还通过将 SMCLK 输出到 GPIO 并观察频率来验证 SMCLK 是否以1MHz 或8MHz 的频率运行?

    最后、请通读 MSP430 MCU 上 eUSCI 和 USCI 串行通信常见问题解决方案的第2节和第4节。 这将向您介绍常见的 SPI 通信问题以及如何解决这些问题。 请密切注意讨论最大 SPI 通信速度的部分。 在8MHz 时、您可能会因为 MSP 和/或从器件而运行得太快。

    此致、  
    Caleb Overbay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Caleb、

    很抱歉出错、请检查我的代码

    void SPI_UCB1Init()
    {
    P4DIR |= BIT1 |BIT3;
    P4SEL |= BIT1 |BIT3; // SPI 的 MOSI 和 clk 引脚
    UCB1CTL1 |= UCSWRST;
    UCB1CTL0 ||(UCMSB | UCSYNC | UCMST | UCCKPL);//3Wire_SPI + SYNC_MODE + MSB FIRST + MASTER_MODE UCCKPH || UCCKPL
    UCB1CTL1 |= UCSSEL_SMCLK; //SMCLK UCSSEL_SMCLK 12MHz
    UCB1BR0 = 0x02;
    UCB1BR1 = 0x00;
    UCB1CTL1 &=~UCSWRST;
    } 

    是的、SMCLK 频率为1MHz、正确频率为8MHz、我使用逻辑分析仪进行了检查、因为 UCB1BR0 = 0x02时钟速度为4MHz、因此 SMCLK 频率显然为8MHz。

    我检查了该链接中的示例代码、没有、它们在哪里使用 PMAPx 寄存器配置 SPI。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Dhananjay、

    SPI 示例未显示 PMAPx 寄存器的使用、因为它们不使用端口映射。 我之所以提出这一点、是因为您尝试对 MOSI 和 CLK 信号使用 P4.1和 P4.2、这只有通过端口映射才能实现。 通过查看用户指南中的表6-46、您可以看到、当端口4的 P4SEL 位被置位时、P4MAPx 也需要被适当置位:

    进行此更改后、您可以验证以下内容:

    • 确保主器件和从器件同意时钟极性(高电平无效)
    • 确保主器件和从器件在时钟阶段上一致(在后沿捕获的数据)
    • 确保主设备和从设备首先同意 MSB
    • 当 MSP 开始通信时、从器件已准备好接收数据

    此外、当通信无法正常工作时、您在逻辑分析仪上看到了什么? 您也能给我提供这些照片吗?

    此致、  
    Caleb Overbay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我现在也使用了端口映射、但我发现的输出没有变化。 请从 链接下载详细信息

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dhananjay、

    当我在 TI 防火墙后面时、您提供的链接会被阻止。 您能否将详细信息直接发布到您的帖子中?

    您是否能够验证主设备和从设备是否同意我在上面列出的详细信息? 此外、您是否执行了应用报告中指定的计算以确保这两个器件处于最大 SPI 通信速度范围内?

    此致、
    Caleb Overbay
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Caleb、

    我发现我的逻辑分析仪中存在问题。 我尝试了回路方法、并通过 UART 显示接收到的数据、它正常工作。 我将该 SPI 用于一个 LCD、它运行了6个月、没有问题、但最近 LCD 开始不能正常工作、即使我没有更改任何 LCD 和 SPI 代码。 我认为 SPI 没有问题、可能是 LCD 有问题。 我将检查原因是什么。 感谢你的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dhananjay、

    我将使这个话题再开放一周。 如果您有任何疑问、请随时提出。

    此致、
    Caleb Overbay