[讨论] 请朋友们切记MSP342例程中的SPI例程(基于寄存器)千万别碰,否则,眼泪马上流出来!

minjiang   2015-10-24 10:29 楼主
俺在做eUSC模块时,连续弄坏3块开发板,眼泪都流干了 在此警示大家!SPI例程,即使一次都不能碰。按网上的 邮寄费和板费,每块板子近200冥币,大家一定要小心了! 本帖最后由 minjiang 于 2015-10-24 10:33 编辑
good

回复评论 (29)

******************************************************************************
//  MSP432P401 Demo - eUSCI_A3, SPI 4-Wire Master Incremented Data
//
//  Description: SPI master talks to SPI slave using 4-wire mode. Incrementing
//  data is sent by the master starting at 0x01. Received data is expected to
//  be same as the previous transmission TXData = RXData-1.
//  The slave select signal is set to active high.
//  USCI RX ISR is used to handle communication with the CPU, normally in LPM0.
//  ACLK = ~32.768kHz, MCLK = SMCLK = DCO ~1MHz.  BRCLK = ACLK/2.
//
//
//                  MSP432P401R
//                -----------------
//            /|\|                 |
//             | |                 |
//             --|RST              |
//               |                 |
//               |             P9.7|-> Data Out (UCA3SIMO)
//               |             P9.6|<- Data In (UCA3SOMI)
//               |             P9.5|-> Serial Clock Out (UCA3CLK)
//               |             P9.4|-> Slave Select (UCA3STE)
//
//
//   Wei Zhao
//   Texas Instruments Inc.
//   June 2014
//   Built with Code Composer Studio V6.0
//******************************************************************************
#include "msp.h"
#include

uint8_t RXData = 0;
uint8_t TXData;

int main(void)
{
    volatile uint32_t i;
    WDTCTL = WDTPW | WDTHOLD;                 // Stop watchdog timer

    P9SEL0 |= BIT4 | BIT5 | BIT6 | BIT7;      // set 4-SPI pin as second function

    __enable_interrupt();
    NVIC_ISER0 = 1 << ((INT_EUSCIA3 - 16) & 31); // Enable eUSCIA3 interrupt in NVIC module

    UCA3CTLW0 |= UCSWRST;                     // **Put state machine in reset**
                                              // 4-pin, 8-bit SPI master
    UCA3CTLW0 |= UCMST|UCSYNC|UCCKPL|UCMSB|UCMODE_1|UCSTEM;
                                              // Clock polarity high, MSB
    UCA3CTLW0 |= UCSSEL__ACLK;                // ACLK
    UCA3BR0 = 0x01;                           // /2,fBitClock = fBRCLK/(UCBRx+1).
    UCA3BR1 = 0;                              //
    UCA3MCTLW = 0;                            // No modulation
    UCA3CTLW0 &= ~UCSWRST;                    // **Initialize USCI state machine**
    TXData = 0x01;                            // Holds TX data
  
    SCB_SCR &= ~SCB_SCR_SLEEPONEXIT;          // Wake up on exit from ISR
    while(1)
    {
       UCA3IE |= UCTXIE;                      // Enable TX interrupt
       __sleep();
       __no_operation();                         // For debug,Remain in LPM0
       for (i = 2000; i > 0; i--);            // Delay before next transmission
       TXData++;                                 // Increment transmit data
  }
}

// SPI interrupt service routine
void eUSCIA3IsrHandler(void)
{
    if (UCA3IFG & UCTXIFG)
    {
        UCA3TXBUF = TXData;                // Transmit characters
        UCA3IE &= ~UCTXIE;
        while (!(UCA3IFG&UCRXIFG));
        RXData = UCA3RXBUF;
        UCA3IFG &= ~UCRXIFG;
    }

}
good
点赞  2015-10-24 10:35
还有感觉SPI的基于库函数的例程,运行结果页是错误的!
good
点赞  2015-10-24 10:36
写SPI寄存器会烧开发板?
点赞  2015-10-24 10:54
恩,我说的是TI提供的例程,
good
点赞  2015-10-24 11:14
虽然没试过,但我觉得不会这样,添加有外设么,检查一下接口看看
点赞  2015-10-24 11:27
呵呵,俺正等你试试,是不是俺鬼打墙了,呵呵!
good
点赞  2015-10-24 11:33
好吓人,TI的例程都有问题
点赞  2015-10-24 11:40
呵呵,还好,俺多准备了几块,不然,哭都来不及了 本帖最后由 minjiang 于 2015-10-24 13:02 编辑
good
点赞  2015-10-24 12:21
引用: minjiang 发表于 2015-10-24 12:21 呵呵,还好,俺多准备了几块,不然,哭都来不及了
你应该先仔细检查检查自己设计方面和其他关联硬件的问题,TI的spil我用在产品上多年了,没出现你说的问题呀!即使片子坏了,你也应该检查片子坏在哪里,确实与SPI有关吗? 本帖最后由 wenyangzeng 于 2015-10-24 14:10 编辑
点赞  2015-10-24 14:07
呵呵,看来俺木有说清楚,是MSP432不是什么430,是M4,
430的类似例程,俺也测试过,是对的,而MSP432不对。
俺是用的TI的板子,不存在硬件的问题,其他都好用,
而弄到eUSCI模块就不好用了,测试结果和例程的说明有出入
俺在这里只是警示,大家,哪怕一次测试SPI,板子就费了,
这里的费了,可能是板子被锁死,或真的坏了!
good
点赞  2015-10-24 14:57
还有同样题意的例程,在ARM Cortex M4中也好使,可是在
432中不好使,俺想,写M4固件库的人和写432的是两拨人
,这波人是想继承430的特点,所以,无论430还是ARM Cortex
M4都存在问题!
good
点赞  2015-10-24 15:00
楼主来说说看是怎么坏了?或者说你是怎么确定这片子坏了的?SPI不会这么恐怖吧
点赞  2015-10-24 15:02
呵呵,就是再也别想连上你的板子了,只好当垃圾扔了!呵呵,好像TI工程师也没有解决这个问题 TI论坛里,也有人板子坏了3块,现在俺非常小心翼翼,还剩最后一块了, 希望后来人,别再重蹈俺的覆辙,那是钱呢,肉疼! 本帖最后由 minjiang 于 2015-10-24 15:17 编辑
good
点赞  2015-10-24 15:06
引用: minjiang 发表于 2015-10-24 15:06
呵呵,就是再也别想连上你的板子了,只好当垃圾扔了!呵呵,好像TI工程师也没有解决这个问题
TI论坛里,也 ...

是说其他SPI器件连接不上他还是仿真器不能下载或者debug。
如果是后者会不会是flash锁死。试下看解锁的问题?以前用TM4C也是cortex M4也是经常锁死。解锁一下就能用了。
点赞  2015-10-24 15:21
呵呵,谁知道,是锁死还是怎么样的,432没有提供 M4的下载工具,你怎么解?
good
点赞  2015-10-24 15:24
本帖最后由 minjiang 于 2015-10-24 16:24 编辑
good
点赞  2015-10-24 15:27
引用: minjiang 发表于 2015-10-24 15:24
呵呵,谁知道,是锁死还是怎么样的,432没有提供 M4的下载工具,你怎么解?

楼主别慌这儿人才多能解决的。别因噎废食呀。
TM4C用的是LMflash。没用过432.但看内核好像都是M4可能也能行?
点赞  2015-10-24 15:35
呵呵,好的,那几块板子暂时留着,等人破解!
good
点赞  2015-10-24 15:58
真的假的,说的那么吓人。
竟然没人分析下原因。。。
昵称:灰小子
点赞  2015-10-24 17:27
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复