在“线程”中讨论的其他部件:ADS1231,, ADS1231REF, ENERGIA
您好,
我 想使用SPI通信将ads1231连接到msp430r4133。 我正在为此编写代码:-
包括"msp430fr4133.h"
#include "stdbool.h"
内部SPI (无效)
{
unsigned int data2, data3, signExtension;
长int数据a1;
INT符号;
bool dataComplete =假;
P5SEL0 || BIT1 |BIT3;//将2-SPI引脚设置为第二个功能
P5DIR |= 0x01;
UCB0CTLW0|= UCSWRST;//**将状态机置于复位**
UCB0CTLW0 |= UCMST|UCSYNC|UCCKPL|UCMSB;// 3引脚,8位SPI主控制器
//时钟极性高,MSB
UCB0CTLW0 |= UCSSEL__SMCLK;//选择SMCLK
UCB0BR0 = 0x01;///2,fBitClock = fBRCLK/(UCBRx+1)。
UCB0BR1 = 0;//
// UCA0MCTLW = 0;//无调制
UCB0CTLW0 &=~UCSWRST;//**初始化USCI状态机**
UCB0IE |= UCRXIE;//启用USI_A0 RX中断
PM5CTL0 &=~LCKLPM5;//禁用GPIO开机默认高阻抗模式
//以激活先前配置的端口设置
/*每次DRDY处于低电平时,MSP430都应在此循环中进行。 这意味着它需要获得24位的数据,然后DRDY应该再次高。 它将一直保持高位,直到
ADS已准备好发送更多数据。*/
同时(1)
{
IF( dataComplete){//代码应在第25 SCLK处进入循环,然后停止SCLK
UCB0CTL1 &=~UCSWRST;//停止串行时钟
dataComplete =假;
}
IF (!P5IN)
{
UCB0CTL1 &=~UCSWRST;//*初始化USCI状态机*
UCB0TXBUF = 0x00;//虚拟写入以启动SPI
UCB0TXBUF = 0x00;
同时(!(UCB0IFG和UCRXIFG);// USI_B0 TX缓冲器准备就绪?
Data1 = UCB0RXBUF;// R15 = 00|MSB
符号= data1 >>7;
如果(sign = 1)
{
signExtension=1111.1111万;
}
否则
{
signExtension=0万;
}
信号扩展<24;
Data1 = data1 <16;
同时(!(UCB0IFG和UCRXIFG);// USI_B0 TX缓冲器准备就绪?
Data2 = UCB0RXBUF;
Data2=data2<8;
同时(!(UCB0IFG和UCRXIFG);// USI_B0 TX缓冲器准备就绪?
Data3 = UCB0RXBUF;
Data1 = data1 + data2 + data3 + signExtension;// r14 = 00|lsb
dataComplete = true;//确保它只通过进入IF语句一次就停止SCLK一次
}
}
}
我的代码是否正确? 为什么使用符号扩展功能??
请您通过电子邮件向我发送msp430fr4133的ADS1231REF接口的代码。
我的电子邮件:pathak.sayali58@gmail.com