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.

MSP430G2332的usi配置成spi模式的问题。

Other Parts Discussed in Thread: MSP430G2332

最近项目用到这这个功能,我发现进入debug模式后,CCTL0和CCTL1的值均是0x1,对于CCTL0来说,就是USISWRST为高电平。对于CCTL1就是USIIFG是高电平。也就是说,系统默认的情况下已经产生了中断标志位,那么,第一个问题:这个标志位用不用清零?

然后,我尝试着将这个标志位清零,然后,当我设置USICNT的时候,比如USICNT=8(官方例程就是这样的),首先,寄存器的值依然是0x00,其次,USIIFG此时又被置高了。所以,我想问一下,有没有人用过这个功能?

就不要直接给我个官方的例子让我自己看了,我已经看了好多遍了,而且单步跟踪的时候现象是一样的。我就是想看看有没有人用过这个功能,请教一下。

  • 你要什么官方例子?mspware里面有SPI的历程啊

  • 我不要例子,我就想问问有没有人用过这个功能或者遇到过我的这种问题,帮我解答一下。

  • 你用了什么功能?和一般SPI有什么特别不一样的?

  • 你好,我是用msp430g2332来操作nrf24l01,和一般的spi没什么不一样。下面我给出我的配置;

    USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI master
    USICTL0 &= ~USISWRST; // USI released for operation
    USICTL0&=~USILSB; //MSB first

    USICTL1 &=~ USIIE; // Counter interrupt, flag remains set
    USICTL1 &=~ USIIFG;
    USICTL1|=USICKPH;

      USICKCTL = USIDIV_4 + USISSEL_2;  

      USICNT = 8;

    下面是发送和接收函数,我并没有使用中断

    unsigned char SPI_RW(unsigned char Byte)

    {

    unsigned int rec_val;
    USISRL=Byte;
    // while (!(USIIFG & USICTL1)); // Counter clear?
    USICTL1 &= ~USIIFG; //
    USICNT = 8; // re-load counter
    while (!(USIIFG & USICTL1)); // Counter clear?
    //USICNT = 8;
    rec_val=USISRL;

    USICTL1 &= ~USIIFG;
    return (rec_val);

    }

    您看有什么问题吗?

  • 而且,我的配置中,一旦将USICTL1|=USICKPH;改成USICTL1&=~USICKPH;

    那么,miso就不输出数据了。理论上,相位配置的不同,最多会影响到我的接收函数能不能从nrf24l01读取到数据,nrf24l01自身输出的数据不会受到影响。但是,我发现实际上进行配置的时候,nrf24l01直接不输出数据了。