This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
尊敬的所有人:
这是 vikash Chandra Raman、我正在 MSP430F5529上执行一个项目。 我将 ACS71020 IC 与 SPI 通信相连。 我必须通过 SPI 发送32位寄存器、并且还必须从控制器 RXBUFF 上的 ACS71020接收32位数据。
我已经通过发送函数发送32位寄存器、请检查我的发送函数。
SYNC_LOW;
发送(0x2325、2)、发送(0x5626、2)
SYNC_HIGH;
void send (int data、int i)
{
int l;
_disable_interrupt ();
L=数据;
L=l>>8;
while (i){
while (!(UCB1IFG & UCTXIFG));
UCB1TXBUF = l;
L=数据;
一----;
}
while (UCB1STAT 和 UCBUSY);
_enable_interrupt ();
}
它成功发送、但当我接收到数据时、它只接收8位、它显示在 RXBUFF 上。
因此,我请求说,如果我必须在 rxbuff 上接收32位数据,我应该怎么做。
请告诉我解决方案或提出一些想法。
等待您的积极回应
Vikash Chandra Raman
Comcon 行业
新德里
尊敬的先生,
当我们在 MISO 上发送32位数据时,它需要32个时钟才能正确发送数据。 但是、在发送数据时、当我们在 SIMO 上检查数据时、它只在 SIMO 引脚上显示8位数据、即0xFF。 这意味着什么?
由于采用了 Beacus71020 IC、因此可提供32位输出。
因此、我的问题是、当我通过接口逐位接收数据时。
我在 msp430f5529上编写一个代码、我请求您查看我的发送函数和接收函数、并告诉我哪里出错了?
void send (int data、int i)
{
int l;
_disable_interrupt ();
L=数据;
L=l>>8;
while (i){
while (!(UCB1IFG & UCTXIFG));
UCB1TXBUF = l;
L=数据;
一----;
}
while (UCB1STAT 和 UCBUSY);
//__enable_interrupt ();
_bis_SR_register (GIE);
}
#pragma vector=USCI_B1_Vector
_interrupt void USCI_B1_ISR (void)
{
switch (__evo_in_range (UCB1IV、4))
{
情况0:中断;//向量0 -无中断
情况2://向量2 - RXIFG
for (i=0;i<32;i++)
{
if (i=32){
flag=1;
UCB1IFG &=~ UCRXIFG;
中断;
}
while (!(UCB1IFG & UCRXIFG));
*值= UCB1RXBUF;
值++;
}
_bis_SR_register (GIE);
中断;
情况4:中断;//向量4 - TXIFG
默认值:break;
}
}
以下是我的数据:
/*Custmer access code (0x4F70656E) with address 0x2F*/
P3OUT&=~BIT7;
发送(0x2F、1);
发送(0x4F70、2);
发送(0x656E、2);
P3OUT|=BIT7;
while (1)
{
_DELAY_CYCLES (1234);
P3OUT&=~BIT7;
发送(0x20、1);
_DELAY_CYCLES (4321);
P3OUT|=BIT7;
}
在这里、我使用4引脚 SPI
空 init_UCB1 (空)
{
P4SEL|=BIT1 + BIT2 + BIT3;
UCB1CTL1 |= UCSWRST;
UCB1CTL0 = UCCKPH + UCMSB + UCMST + UCMODE_1 + UCSYNC;//UCB0CTL0 |= UCMST+UCSYNC+UCCKPL+UCMSB;
UCB1CTL1 = UCSSEL_2;
//UCB0BR0 = 255;
UCB1CTL1 &=~UCSWRST;
}
请检查我的代码、因为我没有接收到 Simo 引脚上的数据32位。
等待您的积极回应
Vikash Chandra Raman
Comcon Industries
新德里
器件型号:MSP430F5529
工具/软件:Code Composer Studio
尊敬的先生:
这是来自 Comcon-Industries 的 Vikash Chandra Raman。 我正在执行一个与测量电流和电压相关的项目。 为了测量电流和电压、我使用了一个连接 SPI 通信(4线通信)的 MSP430F5529控制器。
我必须发送32位数据、并在 SOMI (RX)引脚上接收32位数据。
我已经发送了32位数据以及地址,但是当我接收到数据时,它只在 SOMI 引脚上接收8位数据。 我请求您检查我的代码或让我了解如何在 SOMI 引脚上接收32位数据。
对于设置 SPI 通信、我使用以下寄存器以及整个代码
#include
短整型 arry[32]={0};
短整型*值= arry;
unsigned int i=0、size=0、Flag=0;
空 PinSetup()
{
/*CS1*/
P4DIR|=BIT0;
/*CS2*/
P3DIR|=BIT7;
P3OUT|=BIT7;
/*CS3*/
P3DIR|=BIT6;
P3OUT|=BIT6;
}
空 init_UCB1 (空)
{
P4SEL|=BIT1 + BIT2 + BIT3;
UCB1CTL1 |= UCSWRST;
UCB1CTL0 = UCCKPH + UCCKPL + UCMST + UCMODE_1 + UCSYNC;//UCB0CTL0 |= UCMST+UCSYNC+UCCKPL+UCMSB;
UCB1CTL1 = UCSSEL_2;
//UCB0BR0 = 255;
UCB1CTL1 &=~UCSWRST;
UCB1IE |= UCRXIE;
}
void send (int data、int i)
{
int l;
_disable_interrupt ();
L=数据;
L=l>>8;
while (i){
while (!(UCB1IFG & UCTXIFG));
UCB1TXBUF = l;
L=数据;
一----;
}
while (UCB1STAT 和 UCBUSY);
_enable_interrupt ();
}
void send_8bit (int data、int i)
{
_disable_interrupt ();
while (i){
while (!(UCB1IFG & UCTXIFG));
UCB1TXBUF =数据;
一----;
}
while (UCB1STAT 和 UCBUSY);
_enable_interrupt ();
}
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;
PinSetup();
init_UCB1();
/*Custmer access code (0x4F70656E) with address 0x2F*/
P4OUT&=~BIT0;
/*read_1 && write_0*/
SEND_8BIT (0x2F、1);
发送(0x6E65、2);
发送(0x704F、2);
// P4OUT|=BIT0;
while (1){
//_delay_cycles (1234);
P4OUT&=~BIT0;
SEND_8BIT (0xA0、1);//? 读取或写入??
发送(0x00002);
发送(0x00002);
//__delay_cycles (4321);
// P4OUT|=BIT0;
值= arry;
}
}
#pragma vector=USCI_B1_Vector
_interrupt void USCI_B1_ISR (void)
{
switch (__evo_in_range (UCB1IV、4))
{
情况0:中断;//向量0 -无中断
情况2://向量2 - RXIFG
// for (i=0;i<32;i++)
//{
// if (i=32){
// Flag=1;
// UCB1IFG &=~ UCRXIFG;
//中断;}
while (!(UCB1IFG & UCTXIFG));
*值= UCB1RXBUF;
值++;
//}
//_ bis_SR_register (GIE);
中断;
情况4:中断;//向量4 - TXIFG
默认值:break;
}
}
请给我一个答案、以便我能够读取 SOMI 引脚上的32位数据。
等待您的积极回应
Vikash Chandra Raman
Comcon 行业
新德里
尊敬的先生:
感谢您的回复,此代码对我及其工作非常有帮助。
此致
Vikash