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.

关于MSPG2553的SPI例程中UCMODE设置的疑问

Other Parts Discussed in Thread: ADS1118, MSP430G2553

      用的是CCS5.3,下载了例子msp430g2xx3_usci_spi_master,打开以后在“USCI_A0_init.c”看到了这样一段:

      UCA0CTL0 = UCCKPL + UCMSB + UCMST + UCMODE_0 + UCSYNC;

      因为我用的是ADS1118,SPI的四线制,看了一下手册msp430x2xx,里面说:

      UCMODEx Bits 2-1 USCI mode. The UCMODEx bits select the synchronous mode when UCSYNC = 1.
      00 3-pin SPI
      01 4-pin SPI with UCxSTE active high: slave enabled when UCxSTE = 1
      10 4-pin SPI with UCxSTE active low: slave enabled when UCxSTE = 0
      11 I2C mode

      所以,把UCMODE_0改成了UCMODE_2,然后发现在MSP430G2553.h里面

      #define UCMODE_0               (0x00)         /* Sync. Mode: USCI Mode: 0 */
      #define UCMODE_1               (0x02)         /* Sync. Mode: USCI Mode: 1 */
      #define UCMODE_2               (0x04)         /* Sync. Mode: USCI Mode: 2 */
      #define UCMODE_3               (0x06)         /* Sync. Mode: USCI Mode: 3 */

      这里面不应该是0x00、0x01、0x02、0x03么?怎么会是0、2、4、6呢,对应的是000、010、100、110,与手册中UCMODEx描述对不上啊

  •         我想我找到原因了

            //UCA0CTL0 = UCCKPH + UCMSB + UCMST + UCMODE_2 + UCSYNC;
            //UCA0CTL0 = 0xAD; //10101101
            //UCCKPH  UCCKPL  UCMSB  UC7BIT  UCMST  UCMODEx  UCSYNC
            //               1                0               1              0             1                 10                1

            因为UCMODEx是bit2-bit1,所以"00 \ 01 \ 10 \ 11"这四个值的变化是二级制数的加2操作,因此MSP430G2553.h中的UCMODE_x对应的是0x00、0x02、0x04、0x06。

            现在我遇到了新问题:此前我已经在MSP430G2553.h中把UCMODE_x分别改成了

             #define UCMODE_0               (0x00)         /* Sync. Mode: USCI Mode: 0 */
             #define UCMODE_1               (0x01)         /* Sync. Mode: USCI Mode: 1 */
             #define UCMODE_2               (0x02)         /* Sync. Mode: USCI Mode: 2 */
             #define UCMODE_3               (0x03)         /* Sync. Mode: USCI Mode: 3 */

            现在我把值分别又改了回来,即0x00、0x02、0x04、0x06,但是在调用的地方,看到的UCMODE_x分别对应的还是0x00、0x01、0x02、0x03。这是怎么回事。

            另外,我现在对ADS1118作SPI通讯,把设定值改成了

            //UCA0CTL0 = UCCKPH + UCMSB + UCMST + UCMODE_2 + UCSYNC;

            //因为第一行的设定值有问题,UCMODE_2总显示0x02
            UCA0CTL0 = 0xAD; //10101101
            //UCCKPH  UCCKPL  UCMSB  UC7BIT  UCMST  UCMODEx  UCSYNC
            //               1                0               1              0             1                 10                1

            硬件已经接好,分别对应MISO(Dout)-->P1.1、MOSI(Din)-->P1.2、CLK-->P1.4、P1.5但是,看程序好像进入不了中断,哪位能指点一下这个程序如果要用在ADS1118上,修改起来需要注意哪些地方?

  •         这是全员放假了哦......

  •          好吧,我自己说:在程序中我将UCMODEx设置为MSP430G2553.h中的“UCMODE_2(0x40)”。现在看来,那个UCMODEx,可能是MCU在作从机的时候才有意义的......所以,做主机通讯的时候,用4线制SPI,设置成 UCMODE_0 (0x00) 就可以,或者干脆不去管它,至少在明前调试的结果来看是这样的。

            MCU作主机的时候,如果不将UCMODEx设成UCMODE_0或者0x00的话,CLK输出是有问题的。