您好,
我尝试在从属模式下通过i2c将数据从MSP430F5529发送到imx7 Sabre板。 在Sabre上进行读取时,我看不到写入传输缓冲区(UCB1TXBUF)的数据。
我不知道我做错了什么。 我的代码如下所示。 请有人帮忙吗?
#include <MSP4S.h>
unsigned char *PRxData;//指向RX数据的指针
无符号的char RXByteCtr;
未签名的char TXByteCtr;
volatile unsigned char RXData[128];
未签名的char TxData;
void SetupI2C(void);
/**
主要c
*/
内部主(无效)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
SetupI2I2();
P1DIR |= 0x01;
P1OUT &=~(0x01);
TxData = 0;
TXByteCtr = 0;
RXData[0]=44;
同时(1)
{
PRxData =(unsigned char *) RXData;// RX缓冲区开始
RXByteCtr = 0;//清除RX字节计数
__bis_sr_register(LPM0_bits + GIE);//输入LPM0并等待中断
P1OUT ^= 0x01;//切换WFP 1.0
__no_operation();//设置断点>>此处<<并阅读
}// RXData
返回0;
}
// USI_B1数据ISR
#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector = USI_B1_Vector
__interrupt void USI_B1_ISR(void)
#Elif已定义(__GMNU__)
void __attribute__((interrupt (USI_B1_vector))) USI_B1_ISR (void)
#否则
错误编译器不受支持!
#endif
{
SWITCH(__EIV_IN_RANGE(UCB1IV,12))
{
案例0:中断;//矢量0:无中断
案例2:中断;//矢量2:ALIFG
案例4:中断;//矢量4:NACKIFG
案例6://矢量6:STTIFG
{
UCB1IFG &=~UCSTIFG;
中断;
}
案例8://矢量8:STPIFG
{
UCB1IFG &=~UPSTPIIFG;
TXByteCtr = 0;
//UCB1TXBUF = RXData[TXByteCTR+];
//IF (RXByteCtr)//检查RX字节计数器
__BIC_SR_REGISTER_ON_EXIT (LPM0_bits);
中断;
}
案例10://矢量10:RXIFG
{
*PRxData++= UCB1RXBUF;//将RX字节输入缓冲区
RXByteCtr ++;
中断;
}
案例12://矢量12:TXIFG
{
UCB1TXBUF = TxData++;
//__BIC_SR_REGISTER_ON_EXIT (LPM0_bits);
中断;
}
默认值:中断;
}
}
void设置I2C (void)
{
P4SEL || BIT1 + BIT2;
UCB1CTL1 || UCSWRST;//启用软件重置
UCB1CTL0 = UCMODE_3 + UCSYNC;// I2C从属,同步模式
UCB1BR1 = 0;//分隔符字的高位字节
UCB1BR0 = 10;//时钟= SMCLK / 10 = 100 KHz
UCB1I2COA = 0x39;//自有地址为039h
UCB1CTL1 &=~UCSWRST;//清除软件重置,恢复操作
//UCB1IE |= UCRXIE;//启用RX中断
UCB1IE || UCSTPIE + UCSTTIE + UCRXIE + UCTXIE;//启用STT,STP和RX中断
}