俺在做eUSC模块时,连续弄坏3块开发板,眼泪都流干了
在此警示大家!SPI例程,即使一次都不能碰。按网上的
邮寄费和板费,每块板子近200冥币,大家一定要小心了!
本帖最后由 minjiang 于 2015-10-24 10:33 编辑
******************************************************************************
// 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;
}
}
还有感觉SPI的基于库函数的例程,运行结果页是错误的!
虽然没试过,但我觉得不会这样,添加有外设么,检查一下接口看看
呵呵,还好,俺多准备了几块,不然,哭都来不及了
本帖最后由 minjiang 于 2015-10-24 13:02 编辑
你应该先仔细检查检查自己设计方面和其他关联硬件的问题,TI的spil我用在产品上多年了,没出现你说的问题呀!即使片子坏了,你也应该检查片子坏在哪里,确实与SPI有关吗?
本帖最后由 wenyangzeng 于 2015-10-24 14:10 编辑
呵呵,看来俺木有说清楚,是MSP432不是什么430,是M4,
430的类似例程,俺也测试过,是对的,而MSP432不对。
俺是用的TI的板子,不存在硬件的问题,其他都好用,
而弄到eUSCI模块就不好用了,测试结果和例程的说明有出入
俺在这里只是警示,大家,哪怕一次测试SPI,板子就费了,
这里的费了,可能是板子被锁死,或真的坏了!
还有同样题意的例程,在ARM Cortex M4中也好使,可是在
432中不好使,俺想,写M4固件库的人和写432的是两拨人
,这波人是想继承430的特点,所以,无论430还是ARM Cortex
M4都存在问题!
楼主来说说看是怎么坏了?或者说你是怎么确定这片子坏了的?SPI不会这么恐怖吧
呵呵,就是再也别想连上你的板子了,只好当垃圾扔了!呵呵,好像TI工程师也没有解决这个问题
TI论坛里,也有人板子坏了3块,现在俺非常小心翼翼,还剩最后一块了,
希望后来人,别再重蹈俺的覆辙,那是钱呢,肉疼!
本帖最后由 minjiang 于 2015-10-24 15:17 编辑
是说其他SPI器件连接不上他还是仿真器不能下载或者debug。
如果是后者会不会是flash锁死。试下看解锁的问题?以前用TM4C也是cortex M4也是经常锁死。解锁一下就能用了。
呵呵,谁知道,是锁死还是怎么样的,432没有提供 M4的下载工具,你怎么解?
楼主别慌这儿人才多能解决的。别因噎废食呀。
TM4C用的是LMflash。没用过432.但看内核好像都是M4可能也能行?