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/MSP430F5529:MSP430F5529 SPI 通信

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/847450/ccs-msp430f5529-msp430f5529-spi-communication

器件型号:MSP430F5529

工具/软件:Code Composer Studio

尊敬的所有人:

这是 vikash Chandra Raman、我正在 MSP430F5529上执行一个项目。 我将 ACS71020 IC 与 SPI 通信相连。 我必须通过 SPI 发送32位寄存器、并且还必须从控制器 RXBUFF 上的 ACS71020接收32位数据。

我已经通过发送函数发送32位寄存器、请检查我的发送函数。

SYNC_LOW;

发送(0x2325、2)、发送(0x5626、2)

SYNC_HIGH;

void send (int data、int i)

int l;
_disable_interrupt ();
L=数据;
L=l>>8;
while (i){
while (!(UCB1IFG & UCTXIFG));
UCB1TXBUF = l;
L=数据;
一----;

while (UCB1STAT 和 UCBUSY);
_enable_interrupt ();


它成功发送、但当我接收到数据时、它只接收8位、它显示在 RXBUFF 上。

因此,我请求说,如果我必须在 rxbuff 上接收32位数据,我应该怎么做。

请告诉我解决方案或提出一些想法。

等待您的积极回应

Vikash Chandra Raman

Comcon 行业

新德里

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

    您好 Vikash、

    查看 ACS71020数据表。  您将在 MISO 引脚上从从从器件读取数据。  我怀疑您需要32个时钟来读取32位数据结果。

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

    尊敬的先生,

    当我们在 MISO 上发送32位数据时,它需要32个时钟才能正确发送数据。 但是、在发送数据时、当我们在 SIMO 上检查数据时、它只在 SIMO 引脚上显示8位数据、即0xFF。 这意味着什么?

    由于采用了 Beacus71020 IC、因此可提供32位输出。

    因此、我的问题是、当我通过接口逐位接收数据时。

    我在 msp430f5529上编写一个代码、我请求您查看我的发送函数和接收函数、并告诉我哪里出错了?

    void send (int data、int i)

    int l;
    _disable_interrupt ();
    L=数据;
    L=l>>8;
    while (i){
    while (!(UCB1IFG & UCTXIFG));
    UCB1TXBUF = l;
    L=数据;
    一----;

    while (UCB1STAT 和 UCBUSY);
    //__enable_interrupt ();
    _bis_SR_register (GIE);


    #pragma vector=USCI_B1_Vector
    _interrupt void USCI_B1_ISR (void)

    switch (__evo_in_range (UCB1IV、4))

    情况0:中断;//向量0 -无中断
    情况2://向量2 - RXIFG
    for (i=0;i<32;i++)

    if (i=32){
    flag=1;
    UCB1IFG &=~ UCRXIFG;
    中断;

    while (!(UCB1IFG & UCRXIFG));
    *值= UCB1RXBUF;
    值++;

    _bis_SR_register (GIE);
    中断;

    情况4:中断;//向量4 - TXIFG
    默认值:break;

    以下是我的数据:

    /*Custmer access code (0x4F70656E) with address 0x2F*/
    P3OUT&=~BIT7;
    发送(0x2F、1);
    发送(0x4F70、2);
    发送(0x656E、2);
    P3OUT|=BIT7;

    while (1)

    _DELAY_CYCLES (1234);
    P3OUT&=~BIT7;
    发送(0x20、1);
    _DELAY_CYCLES (4321);
    P3OUT|=BIT7;

    在这里、我使用4引脚 SPI

    空 init_UCB1 (空)

    P4SEL|=BIT1 + BIT2 + BIT3;
    UCB1CTL1 |= UCSWRST;
    UCB1CTL0 = UCCKPH + UCMSB + UCMST + UCMODE_1 + UCSYNC;//UCB0CTL0 |= UCMST+UCSYNC+UCCKPL+UCMSB;
    UCB1CTL1 = UCSSEL_2;
    //UCB0BR0 = 255;
    UCB1CTL1 &=~UCSWRST;

    请检查我的代码、因为我没有接收到 Simo 引脚上的数据32位。

    等待您的积极回应

    Vikash Chandra Raman

    Comcon Industries

    新德里

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

    器件型号:MSP430F5529

    工具/软件:Code Composer Studio

    尊敬的先生:

    这是来自 Comcon-Industries 的 Vikash Chandra Raman。 我正在执行一个与测量电流和电压相关的项目。 为了测量电流和电压、我使用了一个连接 SPI 通信(4线通信)的 MSP430F5529控制器。

    我必须发送32位数据、并在 SOMI (RX)引脚上接收32位数据。

    我已经发送了32位数据以及地址,但是当我接收到数据时,它只在 SOMI 引脚上接收8位数据。 我请求您检查我的代码或让我了解如何在 SOMI 引脚上接收32位数据。

    对于设置 SPI 通信、我使用以下寄存器以及整个代码

    #include

    短整型 arry[32]={0};
    短整型*值= arry;
    unsigned int i=0、size=0、Flag=0;

    空 PinSetup()

    /*CS1*/
    P4DIR|=BIT0;
    /*CS2*/
    P3DIR|=BIT7;
    P3OUT|=BIT7;
    /*CS3*/
    P3DIR|=BIT6;
    P3OUT|=BIT6;


    空 init_UCB1 (空)

    P4SEL|=BIT1 + BIT2 + BIT3;
    UCB1CTL1 |= UCSWRST;
    UCB1CTL0 = UCCKPH + UCCKPL + UCMST + UCMODE_1 + UCSYNC;//UCB0CTL0 |= UCMST+UCSYNC+UCCKPL+UCMSB;
    UCB1CTL1 = UCSSEL_2;
    //UCB0BR0 = 255;
    UCB1CTL1 &=~UCSWRST;
    UCB1IE |= UCRXIE;

    void send (int data、int i)

    int l;
    _disable_interrupt ();
    L=数据;
    L=l>>8;
    while (i){
    while (!(UCB1IFG & UCTXIFG));
    UCB1TXBUF = l;
    L=数据;
    一----;

    while (UCB1STAT 和 UCBUSY);
    _enable_interrupt ();



    void send_8bit (int data、int i)

    _disable_interrupt ();
    while (i){
    while (!(UCB1IFG & UCTXIFG));
    UCB1TXBUF =数据;
    一----;

    while (UCB1STAT 和 UCBUSY);
    _enable_interrupt ();


    void main (void)

    WDTCTL = WDTPW + WDTHOLD;
    PinSetup();
    init_UCB1();

    /*Custmer access code (0x4F70656E) with address 0x2F*/
    P4OUT&=~BIT0;
    /*read_1 && write_0*/
    SEND_8BIT (0x2F、1);

    发送(0x6E65、2);
    发送(0x704F、2);
    // P4OUT|=BIT0;

    while (1){
    //_delay_cycles (1234);
    P4OUT&=~BIT0;
    SEND_8BIT (0xA0、1);//? 读取或写入??
    发送(0x00002);
    发送(0x00002);
    //__delay_cycles (4321);
    // P4OUT|=BIT0;
    值= arry;

    #pragma vector=USCI_B1_Vector
    _interrupt void USCI_B1_ISR (void)

    switch (__evo_in_range (UCB1IV、4))

    情况0:中断;//向量0 -无中断
    情况2://向量2 - RXIFG
    // for (i=0;i<32;i++)
    //{
    // if (i=32){
    // Flag=1;
    // UCB1IFG &=~ UCRXIFG;
    //中断;}

    while (!(UCB1IFG & UCTXIFG));
    *值= UCB1RXBUF;
    值++;
    //}
    //_ bis_SR_register (GIE);
    中断;

    情况4:中断;//向量4 - TXIFG
    默认值:break;

    请给我一个答案、以便我能够读取 SOMI 引脚上的32位数据。

    等待您的积极回应

    Vikash Chandra Raman

    Comcon 行业

    新德里

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

    您好 Vikash、

    请参阅随附的文件。  我在5529 LaunchPad 上进行了此操作。  我必须使用 UCB0、以便能够访问引脚并确认数据。 这将为您提供一个基本的想法。  如果这不是 cleare2e.ti.com/.../5153.main.c、请告诉我

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

    尊敬的先生:

    感谢您的回复,此代码对我及其工作非常有帮助。

    此致

    Vikash