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.

[参考译文] eZ430-RF2500T:无法启用 SPI... 我认为吗?

Guru**** 2577385 points
Other Parts Discussed in Thread: MSP430F2274

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/609026/ez430-rf2500t-unable-to-enable-spi-i-think

器件型号:eZ430-RF2500T

大家好、

在前面、我应该说我对 MSP430完全陌生、我的许多假设可能是错误的、我希望您对我很有耐心。  我正在尝试构建一个应用程序、该应用程序将通过 SPI 从 AS4750P 获取数据、并将其发送到 PC 使用的端点。  

但我从 Baby Steps 开始、我创建了一个"hello world"应用程序、只需闪烁引脚1.0上连接的 LED、就像一种魅力。  接下来、我想在 引脚3.0、3.1、3.2和3.3上启用 SPI 通信。   设置完成后、我创建了一个环路、该环路会缓慢地将引脚3.0 (芯片选择引脚)切换为高电平和低电平、以便我可以使用万用表跟踪它以验证它是否正常工作。  遗憾  的是、我无法看到分线板上的引脚17发生了任何变化、该引脚对应于器件上的引脚3.0。  

您是否会想到查看我的代码并指出您可能看到的任何错误?  直接处理放置在寄存器中的位对我来说是相当新的、所以我确信这是问题所在!

#include 
#include "msp430x22x4.h"

volatile unsigned int i;

/**
* prototype 语句
*/**



* main.c
*/
int main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
P1DIR |= 0x01; //将 P1.0设置为输出方向

//
设置 SPI
//
P3SEL |= 0x0C; // P3.2 & P3.3 USCI_B0选项选择
P3DIR |= 0x01; // P3.0输出方向
UCB0CTL0 |= UCMSB + UCMST + UCSYNC;// 3引脚、8位 SPI MSTR、MSB 优先、
UCB0CTL1 |= UCSSEL_2; // SMCLK 作为时钟源
UCB0BR0 = 0x02;
UCB0BR1 = 0;
UCB0CTL1 &= UCSWRST; //初始化 USCI 状态机
//
发送虚拟数据以激活
//
P3OUT &= 0x01; //将 CS 拉为低电平以启用 SPI
UCB0TXBUF = 0x00; //虚拟写入以启动 SPI
P3OUT |= 0x01; //将 CS 拉为高电平以禁用

(;){的 SPI
P1OUT ^= 0x01; //使用 XOR 切换 P1.0

P3OUT &= 0x01; //将 CS 拉至低电平以启用 SPI
UCB0TXBUF = 0x00; //虚拟写入以启动 SPI
P3OUT |= 0x01; //将 CS 拉为高电平以禁用 SPI

I = 50000; //延迟
执行(i -);
while (i!=0);
}

提前感谢您提供的任何帮助!

James

编辑: 当我自己研究这个问题时、我想... 是否没有 TI 驱动程序可以让这一点变得更简单?  我认为我现在的做法被称为"位拆裂"、但感觉应该有某种类型的驱动程序、我可以包括让我访问预先编写的函数、例如 SPI_transfer (bla、bla、bla)。  这是我错的吗?

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

    如果您是"位拆裂"、您根本不会使用 USCI 外设。 :)您所做的是寄存器级编码。 话虽如此、我们确实为某些 MSP430提供了 DriverLib、用于设置外设、并为通信外设提供一些简单的功能。 使用 DriverLib 与寄存器级代码的一个问题是、由于驱动程序的开销、它确实使用了更多的代码空间。 如果空间是一个问题、并且您希望更熟悉器件、那么我建议使用寄存器级编码。 可通过 MSP430Ware 找到 DriverLib 或和寄存器级编码的示例。 MSP430Ware 可在 CCS 或 dev.ti.com 内的 TI Resource Explorer 中找到。 在 TI Resource Explorer 中、导航至 Software -> MSP430Ware ->(查找您的器件)-> Peripheral Examples。 在这里、您可以找到不同外设的示例、包括 SPI 模式下的 USCI。 现在、它可能与您使用的 USCI 模块不同、但快速转换将为您提供所需的一切。 DriverLib 示例和项目可在 MSP430Ware -> Libraries -> Driver Library 中找到。 确保查找您的设备是否受支持。

    (提示:eZ430-RF2500T 使用 MSP430F2274)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    P3OUT &= 1 -> P3OUT &=~1
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的详细回复! 我觉得很傻、因为我只是错过了一个"不"的标志、而挣扎了多少钱!

    我不认为存储器会是我所需要的问题太多、今天我将花些时间来讨论 DriverLib 示例!

    再次感谢!
    James