大家好,我最近用5529的SPI控制ADS1292出现了几点问题,我在数据手册看到SPI接收与发送中断是独立的,初始化的时候初始化了UCRXIE这个,但是我在发送的时候刚把数据装入TXBUF之后,UCRXIFG马上置位了,然后进入中断,我想问这个正常吗?下面是我的程序
#include <msp430.h>
#define uint unsigned int
#define uchar unsigned char
uint y;
void Init_SPI(void);
void delay(uint ms);
/*
* main.c
*/
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Init_SPI();
while (!(UCB0IFG & UCTXIFG));
UCA0TXBUF = 0x44;
return 0;
}
void Init_SPI(void)
{
P3SEL |= BIT0 + BIT1 +BIT2; // Set SPI peripheral bits
P3DIR |= BIT0 + BIT2; // Clock and Din as output
P3DIR &= ~BIT1; // Dout as input
P3REN |= BIT1; //enable P3.1 inside resistant
UCA0CTL1 = UCSWRST;
UCA0CTL0 |= UCMSB+UCMST+UCSYNC+UCMODE_0 ;//+UCCKPL;
UCA0CTL1 |= UCSSEL_2;
UCA0BR0 = 0X02;
UCA0BR1 = 0;
UCA0CTL1 &= ~UCSWRST;
UCA0IE |= UCRXIE;
_BIS_SR(GIE); //开可屏蔽中断
}
/*********************************************************************************************************
* delay
*
*******************************************************************************************************/
void delay(uint ms)
{
uint i;
while(ms–)
{
for(i=0;i<150;i++);
}
}
#pragma vector=USCI_A0_VECTOR
__interrupt void USCIA0_ISR (void)
{
if(UCA0IFG & UCRXIFG)
{
y = UCA0RXBUF;
}
}
还有控制ADS1292的时候我控制寄存器的时序是 复位->CS拉低->发送地址+40h->发送0(操作一个寄存器)—>发送操作数,这样有问题吗?SCLK的频率是ADS1292频率的1/2。
困扰一段时间了,希望能帮我解答下,谢谢!
zhiye Lai:
有人吗,你们用SPI的时候没出现过这个问题吗
zhiye Lai:
程序可能有些错误,但是是贴程序上来的时候没有复制完全的问题,原来的太长,A0,B0暂时不要纠结,测试程序检查过没有问题额