工具/软件:Code Composer Studio
您好,
我无法从MSP430F5132的SPI通道获得任何响应。 下面是我的应用程序的信息:
1)在MOSI引脚处没有输出。
2)代码:
>>>>>> main.c <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#include <string.h>
#include <stdio.h>
#include
"driverlib.h"
#include "MSP4_sdiarArray[20],charArrayID[6],cbuf1[1],cbuf1[1]
,cbuf1[1],cbuf2[1],cbuf1[1],buf1[1、buf1],1[f1[1],buf1[bbuf1],1[f1],buf1[f1],buf1[f1[1],buf1[bbuf1[1],f1[,f1[,f1],buf1[f1],buf1[bbuf1[,fbuf1],f1],fbuf1[,f1[,bufbuf1],f1[,fbufbufbuf1[,f1],f1],f1[,buf1[,f1[,f1[,fbufbufbuf1],f1],
//停止WDT
WDT_A_HOLD (WDT_A_BASE);
//Status1 STATUS2输出
GPIO _setAsOutputPin (GPIO端口P3,GPIO _PIN0 + GPIO _PIN1);
//Status1 STATUS2低
GPIO _setOutputLowOnPin (GPIO端口P3,GPIO _PIN0 + GPIO _PIN1);
//RS485 de Re
GPIO _setAsOutputPin (GPIO端口P2,GPIO _PIN0 + GPIO _PIN1);
//恢复低电平
GPIO _setOutputLowOnPin (GPIO端口P2,GPIO _PIN0 + GPIO _PIN1);
//UART - RS485
GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P1, GPIO _PIN1 + GPIO PIN2);
//SPI - ste = 1.0
SPI_init();
GPIO _setAsOutputPin (GPIO端口P1,GPIO _PIN0);//+ GPIO _PIN3 + GPIO _PIN4 + GPIO _PIN5);
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);//+ GPIO _PIN3 + GPIO _PIN4 + GPIO _PIN5);
//gPIO_setOutputHighOnPin (gPIO_PORT_P1,gPIO_PIN0);
//Baudrate = 9600,时钟频率= 1.048MHz
//UCBRx =109,UCBRFx =0,UCBRSx =2,UCOS16 =0 -->从MSP430F5529示例复制
USI_A_UART_initParam ={0};
param.selectClockSource = USI_A_UART_CLOCKSOURCE_SMCLK;
Param.clockPrescalar = 109;
Param.firstModReg = 0;
param.secondModReg = 2;
Param.parity = USI_A_UART_NO_PARTIC;
Param.msborLsbFirst = USI_A_UART_LSB_FIRST;
StopBits的Param.Number= USI_A_UART_OON_STOP_BIT;
Param.uartMode = USI_A_UART_MODE;
Param.oversampling = USI_A_UART_LLOW频率_BAUDRATE_RELEA;
IF (STATUS_FAIL == USI_A_UART_INIT (USI_A0_BASE,¶m))
{
返回;
}
//启用UART模块以进行操作
USI_A_UART_ENABLE (USI_A0_BASE);
//启用接收中断
USI_A_UART_CLEARInterrupt (USI_A0_BASE,USI_A_UART_receive中断);
USI_A_UART_enableInterrupt (USI_A0_BASE,USI_A_UART_receive中断);
//CIHAZ ID
CharArrayID[0]='4';
CharArrayID[1]='6';
CharArrayID[2]='0';
CharArrayID[3]='7';
CharArrayID[4]='5';
CharArrayID[5]='1';
//ads8684 ayarlar
///reset
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0x8500);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);
//AUTO_SEQ_EN
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);
SPI_transfer16 (0x01FF);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);
//通道断电->全部打开
/*GPIO_setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);
SPI_transfer16 (0x0200);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);*/
//通道1 2.5xV参考电压
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0x0505);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);
//通道2 2.5xV参考电压
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0x0605);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);
//通道3 2.5xV参考电压
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0x0705);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);
//通道4 2.5xV参考电压
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0x0805);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1000);
SPI_transfer16 (0xA000);
SPI_transfer16(0x0000);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1000);
__enable_interrupit();
而(1){
GPIO _setOutputLowOnPin (GPIO端口P3,GPIO _PIN0);
GPIO _setOutputHighOnPin (GPIO端口P3,GPIO _PIN1);
__DELAY周期(10.5万);
GPIO _setOutputLowOnPin (GPIO端口P3,GPIO _PIN1);
GPIO _setOutputHighOnPin (GPIO端口P3,GPIO _PIN0);
__DELAY周期(10.5万);
__disable_interrupt ();
/CH1.
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1万);
buF1 = SPI_TRANSFER (0x00);
buf2 = SPI_transfer (0x00);
buf3 = SPI_transfer (0x00);
buf4 = SPI_transfer (0x00);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1万);
/CH2.
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1万);
buf5 = SPI_transfer (0x00);
buf6 = SPI_transfer (0x00);
buf7 = spI_transfer (0x00);
buf8 = SPI_transfer (0x00);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1万);
/CH3.
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1万);
buf9 = SPI_transfer (0x00);
buf10 = SPI_transfer (0x00);
buf11 = SPI_transfer (0x00);
buf12 = SPI_transfer (0x00);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1万);
//CH4
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
//__delay_cycles (1万);
buf13 = SPI_transfer (0x00);
buf14 = SPI_transfer (0x00);
buf15 = SPI_transfer (0x00);
buf16 = SPI_transfer (0x00);
GPIO _setOutputHighOnPin (GPIO端口P1,GPIO _PIN0);
__DELAY周期(1万);
ltoa (buF1,cbuF1);
ltoa (buf2,cbuf2);
ltoa (buf3,cbuf3);
ltoa (buf4,cbuf4);
ltoa (buf5,cbuf5);
ltoa (buf6,cbuf6);
ltoa (buf7,cbuf7);
ltoa (buf8,cbuf8);
ltoa (buf9,cbuf9);
ltoa (buf10,cbuf10);
ltoa (buf11,cbuf11);
ltoa (buf12,cbuf12);
ltoa (buf13,cbuf13);
ltoa (buf14,cbuf14);
ltoa (buf15,cbuf15);
ltoa (buf16,cbuf16);
buf1 = 0;
buf2 = 0;
buf3 = 0;
buf4 = 0;
buf5 = 0;
buf6 = 0;
buf7 = 0;
buf8 = 0;
buf9 = 0;
buf10 = 0;
buf11 = 0;
buf12 = 0;
buf13 = 0;
buf14 = 0;
buf15 = 0;
buf16 = 0;
GPIO _setOutputHighOnPin (GPIO端口P2,GPIO _PIN0 + GPIO _PIN1);
__DELAY周期(1.8万);
USI_A_UART_SDEARData (USI_A0_BASE,'A');
USI_A_UART_SDEARData (USI_A0_BASE,'C');
USI_A_UART_SDEARData (USI_A0_BASE,'K');
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[0]);
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[1];
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[2];
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[3];
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[4];
USI_A_UART_SDESDLData(USCI_A0_base, charArrayID[5]);
USI_A_UART_HESMData(USCI_A0_base,'#');
USI_A_UART_SDEARData (USI_A0_BASE,cbuF1[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf2[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf3[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf4[0]);
USI_A_UART_HESMData(USCI_A0_base,'#');
USI_A_UART_SDEARData (USI_A0_BASE,cbuf5[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf6[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf7[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf8[0]);
USI_A_UART_HESMData(USCI_A0_base,'#');
USI_A_UART_SDEARData (USI_A0_BASE,cbuf9[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf10[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf11[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf12[0]);
USI_A_UART_HESMData(USCI_A0_base,'#');
USI_A_UART_SDEARData (USI_A0_BASE,cbuf13[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf14[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf15[0]);
USI_A_UART_SDEARData (USI_A0_BASE,cbuf16[0]);
USI_A_UART_HESNData(USCI_A0_base,'\n');
__DELAY周期(1.8万);
GPIO _setOutputLowOnPin (GPIO端口P2,GPIO _PIN0 + GPIO _PIN1);
__enable_interrupt ();
}
}//**************************************************************************************************************
////
这是USI_A0中断向量服务例程。
////************************************************************************************************
#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_ICC__)
#pragma vector=USI_A0_vector
__interrupt
#Elif defined(__Gnuinu_)
__attribute__((interrupt (USI_A0_vector))
#endif
void USI_A0_ISR(void)
{
Switch(__偶 数_in_range(UCA0IV,4))
{
//矢量2 - RXIFG
案例2:
receivedData = USI_A_UART_receiveData (USI_A0_BASE);
/*if(receivedData !='#') //检查值
{
IF ((c == 0 && receivedData =='4')||(c == 1 && receivedData =='6')||(c == 2 && receivedData =='0')||(c >= 3 &c < 13))
{
charArray[c]=已接收数据;
C++;
CharReceived = 0;
其他
{
C = 0;
CharReceived = 0;
}
其他{
//c = 0;
//gPIO_ToggleOutputOnPin (gPIO_PORT_P7,gPIO_PIN1);
CharReceived = 1;
}*/
中断;
默认值:break;
}
}
>>>>>> MSP430_SPI.c <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#if defined(__MSP430_has _USI_B0__)&& defined(SPI_DRIVER_USSCI_B)
void SPI_init()
{/*
为MSP430器件上的USCI_B配置端口*/
#ifdef __SEL MSP430F5172
P1SEL || BIT3 | BIT4 | BIT5;
#endif
#ifdef #ifdef_B */MSP430F5172|
BIT1=
#ifdef __MSP430F5132
P1SEL || BIT3 | BIT4 | BIT5;
#endif
/* USSCI-B specific SPI setup */
UCB0CTL1 |= UCSWRST;
UCB0CTL0 = UCCKPH | UCMSB | UCMST | UCSODE_0 | UCSYNC;// SPI模式0,主
UCB0BR0 = 0x01;//
CBR1与SMCLK = UCSC0相同的速度
;UCBEL_0 //时钟= SMCLK,清除UCSWRST并启用USI_B模块
。}
UINT8_t SPI_TRANSFER (uint8_t inb)
{
UCB0TXBUF = inb;
while (!(UCB0IFG & UCRXIFG))//等待RXIFG,表示通过SOMI接收到的远程字节
;
返回UCB0XBUF;
}
uint16_CBt_transfer16(uint16_16;uintw_8
= uint8;uintw_8
while (!(UCB0IFG & UCRXIFG)
;
retw8[1]= UCB0RXBUF;
UCB0TXBUF = inw8[0];
while (!(UCB0IFG & UCRXIFG);
retw8[0]= UCB0RXBUF;
retw;
}
3) UART输出到控制台
4)示意图:
请您帮助说明SPI不工作的原因。
此致,
奥努尔


