[求助]谁能放出个MSP430F149的双SPI主从对发的例子啊
自己编了一个,可是怎么也调试不通。
IAR430,3.20a,4K限制版。
程序主要是想验证一下SPI通讯,从主设备1口发出0x12,从设备0口接收到后回发,通过查看0口的RXBUF0来验证通讯成功,现在的情况是RXBUF0不为0x12。
源程序如下:
/*
硬件接线:
STE: P3.0--> P5.0
SIMO: P3.1--> P5.1
SOMI: P3.2--> P5.2
UCLK: P3.3--> P5.3
晶振:
XT2-4M
*/
#include <msp430x14x.h>
/**************************************************************wh
*初始化函数声明
***************************************************************wh*/
__monitor void InitCPU(void);
__monitor void InitUART0(void);
__monitor void InitUART1(void);
unsigned int Data;
/**************************************************************wh
*函数:main()主循环函数
*作者:wh
*日期:
*参数:
*返回:
*功能:
***************************************************************wh*/
void main(void)
{
_DINT();
InitCPU(); //init CPU
InitUART0(); //init UART0,rx enabled
InitUART1(); //init UART1,all about disabled
_EINT();
while (!(IFG2 & UTXIFG1));
TXBUF1 =0x12;
while(1);
}
/**************************************************************wh
*函数:InitCPU()
*作者:wh
*日期:
*参数:
*返回:
*功能:选择晶振,等待晶振稳定,关狗,选择分频
***************************************************************wh*/
__monitor void InitCPU(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 &= ~XT2OFF; // XT2on
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xff; i > 0; i--); // Time for flag to set
}while ((IFG1 & OFIFG)); // OSCFault flag still set?
//BCSCTL2 |= SELM_2 + SELS; // MCLK = SMCLK = XT2 (safe)
BCSCTL2 |= SELM_2 + SELS + DIVS_3 + DIVM_3;
}
/**************************************************************wh
*函数:InitUART0()
*作者:wh
*日期:
*参数:
*返回:
*功能:UART0 Slave
***************************************************************wh*/
__monitor void InitUART0(void)
{
P3SEL = 0x0E; // Setup P3 for SPI mode
U0CTL = CHAR + SYNC + SWRST; // 8-bit, SPI, Slave
U0TCTL = CKPL + STC; // Polarity, UCLK, 3-wire
ME1 = USPIE0; // Module enable
U0CTL &= ~SWRST; // SPI enable
IE1 |= URXIE0; // Recieve interrupt enable
}
/**************************************************************wh
*函数:InitUART1()
*作者:wh
*日期:
*参数:
*返回:
*功能:UART1 Master
***************************************************************wh*/
__monitor void InitUART1(void)
{
P5SEL |= 0x0E; // P5.1,2,3 SPI option select
P5OUT &= ~0x01;
P5DIR |= 0x01; //Reset Slave
P5DIR &= ~0x01;
U1CTL = CHAR + SYNC + MM + SWRST; // 8-bit, SPI, Master
U1TCTL = CKPL + SSEL1 + STC; // Polarity, SMCLK, 3-wire
U1BR0 = 0x02; // SPICLK = SMCLK/2
U1BR1 = 0x00;
U1MCTL = 0x00;
ME2 |= USPIE1; // Module enable
U1CTL &= ~SWRST; // SPI enable
IE2 |= URXIE1 + UTXIE1; // RX and TX interrupt enable
}
/**************************************************************wh
*函数:
*作者:wh
*日期:
*参数:
*返回:
*功能:1号口SPI的接收中断
***************************************************************wh*/
#pragma vector=UART1RX_VECTOR
__interrupt void UART1RX (void)
{
while (!(IFG2 & UTXIFG1));
TXBUF1 = 0x12;
}
/**************************************************************wh
*函数:UART0RX_VECTOR
*作者:wh
*日期:
*参数:
*返回:
*功能:0号SPI口的接收中断
***************************************************************wh*/
#pragma vector=UART0RX_VECTOR
__interrupt void UART0RX (void)
{
while (!(IFG1 & UTXIFG0));
TXBUF0=0x12;// return data
}
发表时间:2004年10月23日18:49:52