hello
我现在用MSP430F2274在做一块板子,现在要用到2274的USCI_B0口做SPI功能,我的初始化设置如下
void InitSpi(void)
{
UCB0CTL1 = 0x01; //set ucswrst = 1 UCB0CTL1 |= UCSSEL_2; ///select smclk
UCB0CTL0 |= UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit SPI mstr, MSB 1st sync mode
UCB0BR0 = 0x02; //baud UCB0BR1 = 0;
P3SEL |= (BIT3|BIT2|BIT1);//// // P3.3,2,1,0 USCI_B0 option select // p3.0 is output
P3DIR |= 0x01; // P3.0 output direction
UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCB0RXIE;
}
发送函数为
void SpiB0_TXISR( unsigned char* Spi_TX_data, char send_len)
{
SpiSendData = Spi_TX_data;
SpiSendLen = send_len;
UCB0TXBUF = SpiSendData ;//发送数据
while (!(IFG2 & UCB0TXIFG)); //(IFG2 & UCB0TXIFG ) 为 0 时,表示数据为满,不能接收新数据发送,要等待
if(SpiTxindex < SpiSendLen) //表示发送多少个数据,发送计数器
{
UCB0TXBUF = *(SpiSendData+SpiTxindex); // 数据发送
SpiTxindex++;
//delay(100);
}
else
{
SpiTxindex=0;
}
}
系统时钟选择的是1MHZ,为什么我的SPI没有输出数据了,
在用断点跟踪时,CLOCK只可以出一组时钟(8 个脉冲),没有数据,用示波器测量波形没有波形出来,
但程序跑起来时,时钟也是只出一次,没有数据,
请问我的配置哪里错了呢,为什么没有数据了,时钟也不是一直有波形出来,
HG:
建议你先把例程demo跑对
xuefeng chang:
回复 HG:
demo 例程也是跑不起来的,用示波器量不到数据的,
HG:
回复 xuefeng chang:
你在芯片上先输出smclk,看对不对。
SPI的时钟输出对么? CS对么?SPI的从机接的什么?
xuefeng chang:
回复 HG:
我的芯片初始化在SPI前面,
SPI初始化顺序为 1 选择时钟为SMCLK ,2 SPI 功能配置,3 波特率配置,4 管脚功能选择,5 清除UCSWRST 位
这样的顺序没有数据输出,
我测量的是430F2274芯片管脚出来的信号,我把后面的负载断开了,相当于直接测量的是芯片管脚
Seven Han:
回复 xuefeng chang:
最好是先把例程跑下,看下时钟信号以及发出的数据后,再进一步调试
C:\ti\MSP430Ware_3_50_00_04\examples\devices\MSP430F2xx\MSP430F22x2_MSP430F22x4_Code_Examples