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.

[参考译文] SPI 编程(MSP430主器件)(msp432从器件)

Guru**** 2577385 points
Other Parts Discussed in Thread: MSP430G2553

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/610497/spi-programming-msp430-master-msp432-slave

主题中讨论的其他器件:MSP430G2553

1) 在 主微控制器中、如果端口2的引脚0断开连接、则 mster (MSP 430)将仅向从器件(msp432)传输(0x01)、LED 将在 msp432的端口2.0处切换。

2) 在 主微控制器中、如果端口2的引脚1断开连接、则 mster (MSP 430)将仅向从器件(msp432)传输(0x02)、LED 将在 msp432的端口1.0处切换。

程序工作正常、但我的问题是 LED 持续闪烁。我希望 LED 在引脚断开连接后仅闪烁一次(在1引脚0情况下为1引脚1、在2引脚1情况下为任何情况)  

3) plz 帮助我、、、我认为我可以使用 interrupt、但不确定..您也可以帮助我提供不同的替代方案。

#include
volatile char received_ch = 0;
int main (空)

//P1OUT |= BIT5;
P1SEL = BIT0 | BIT2 | BIT4;
P1SEL2 = BIT0 | BIT2 | BIT4;

UCA0CTL1 = UCSWRST;
UCA0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC;// 3引脚、8位 SPI 主器件
UCA0CTL1 |= UCSSEL_2;// SMCLK
UCA0BR0 |= 0x01;///2
UCA0BR1 = 0;//
UCA0MCTL = 0;//无调制
UCA0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
IE2 |= UCA0TXIE;//启用 USCI0 RX 中断
// P1OUT &=(~BIT5);//选择器件
_bis_SR_register (LPM0_bits + GIE);// CPU 关闭、启用中断
// P1OUT |=(BIT5);//取消选择器件

///----------------------------------------------------------
//测试有效的 RX 和 TX 字符
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCIAB0TX_vector
_interrupt void USCIA0TX_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (USCIAB0TX_vector)) USCIA0TX_ISR (void)
其他
错误编译器不受支持!
#endif

while (!(IFG2 & UCA0TXIFG));// USCI_A0 TX 缓冲器准备就绪?

如果((0x01 & P2IN))//由于 LED1为(0x01)即(0000 0001) 8位,因为2V 电源是我们的常数
{//输入所有输入引脚都为高电平 WT 和 P2IN、因此如果输入被置位
P1OUT &=~ 0x01;  

其他

UCA0TXBUF = 0x01;//通过 SPI 发送到从器件
__DELAY_CYCLES (50);//将传输之间的时间添加到

如果((0x02 & P2IN))//由于 LED1为(0x01)即(0000 0001) 8位,因为2V 电源是我们的常数
{//输入所有输入引脚都为高电平 WT 和 P2IN、因此如果输入被置位
P1OUT &=~ 0x01;//停止输出蜂鸣器(不执行任何操作)

其他

UCA0TXBUF = 0x02;//通过 SPI 发送到从器件
_DELAY_CYCLES (50);  


//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/*********
* MSP 432从设备
* IDS 系统
*引脚连接
* MSP430g2553主器件 MSP432P401x 从器件
//------------ --------
///|\|/|\||
//||||| |
//-|RST |-|RST |
//||||
//||数据输入(UCB0SIMO)|
//| P1.0|--- |P1.6 |
//||||
//|数据输出(UCB0SOMI)|
//| P1.2|--------------- |P1.7 |
//||||
//| S 时钟(UCB0CLK)|
//| P1.4|--- |P1.5 |
//||||
//
********* 从站计划是'********* /
#include "msp.h"
volatile unsigned int RXData、w;
int main (空)

WDT_A->CTL = WDT_A_CTL_PW |//停止看门狗计时器
WDT_A_CTL_HOLD;

P2->DIR |= BIT0;// P2.0设置为输出

P1->SEL0 |= BIT5 | BIT6 | BIT7;//将 P1.5、P1.6和 P1.7设置为
// SPI 引脚功能

EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_SWRST;//将状态机置于复位状态
EUSCI_B0->CTLW0 = EUSCI_B_CTLW0_SWRST |//保持状态机处于复位状态
EUSCI_B_CTLW0_SYNC |//设置为同步模式
EUSCI_A_CTLW0_CKPL |//将时钟极性设置为高电平
EUSCI_B_CTLW0_MSB;// MSB 优先和从

EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_ssel_ACLK;// ACLK
EUSCI_B0->BRW = 0x02;///2、fBitClock = fBRCLK/(UCBRx+1)。
EUSCI_B0->CTLW0 &=~EUSCI_B_CTLW0_SWRST;//初始化 USCI 状态机
EUSCI_B0->IE |= EUSCI_B_IE_RXIE;//启用 USCI_B0 RX 中断
//启用全局中断
__ENABLE_IRQ();
//在 NVIC 模块中启用 eUSCI_B0中断
NVIC->ISER[0]= 1 <<((EUSCIB0_IRQn)& 31);
_SLEEP();
__no_operation();
//在退出 ISR 时保持在 LPM 中
// SCB->SCR |= SCB_SCR_SLEEPONEXIT_MSK;
//确保 SLEEPONEXIT 立即生效
//_ DSB();

///--------------------------------------------
// SPI 中断服务例程
空 EUSCIB0_IRQHandler (空)

//等待字符被接收
while (!(EUSCI_B0->IFG 和 EUSCI_B_IFG_RXIFG));
RXData = EUSCI_B0->RXBUF;
如果(RXData=0x01)

P2->OUT μ^ BIT0;// XOR P1.0
对于(w = 20000;w > 0;w-);//延迟

如果(RXData=0x02)

P1->OUT μ^ BIT0;// XOR P1.0
对于(w = 20000;w > 0;w-);//延迟

//清除接收中断标志
EUSCI_B0->IFG &=~EUSCI_B_IFG_RXIFG;
NVIC->ISER[0]&&~(1 <<(((EUSCIB0_IRQn)& 31));

///----------------------------------------------

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从器件每次接收到0x01 (或0x02)时都会使 LED 闪烁(切换)。

    只要主器件的 P2.0 (P2.1)为低电平、主器件就会重复发送0x01 (或0x02)。 这会导致从器件重复闪烁。

    您要更改哪种行为?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    先生,如果连接断开,我希望 LED 只闪烁一次(从高到低)