请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430F5529 主题中讨论的其他部分: INA219
工具/软件:Code Composer Studio
IA M尝试将多字节数据从MSP430F5529发送到INA219校准寄存器以进行电流测量。我总共发送3个字节,其中第一字节是校准寄存器地址,其余两字节是要写入 校准寄存器的内容 以下代码片段,在传输注册地址后,程序停止,编译器甚至不进入中断服务例程。如果我知道我的代码片段是否有问题,以及需要进行哪些适当的更改以满足我的目的,将会很有帮助。
#include"driverlib.h"
#define slaver_address 0x40
#define TXLENGTH 0x03
uint8_t S数据[3]={0x40,0x34,0x6E};
uint8_t传输计数器= 0;
void main()
{
//停止WDT
WDT_A_HOLD (WDT_A_BASE);
//将I2C引脚分配给USI_B0
GPIO_setAsPeripheralModuleFunctionInputPin (
GPIO端口P3,
GPIO _PIN1 + GPIO _PIN2
);
//初始化主中继器
USI_B_I2C_initMasterParam ={0};
param.selectClockSource = USI_B_I2C_CLOCKSOURCE_SMCLK;
PARAM.i2cClk = UCS_getSMCLK();
Param.datarate = USI_B_I2C_SET_DATA_RATE_400KBPS;
USI_B_I2C_INITMaster (USI_B0_BASE,¶m);
//指定从属地址
USI_B_I2C_setSlaveAddress (USI_B0_BASE,
Slaver_address
);
//设置传输模式
USI_B_I2C_setMode (USI_B0_BASE,
USI_B_I2C_Transmit_mode
);
//启用I2C模块以启动操作
USI_B_I2C_ENABLE (USI_B0_BASE);
同时(1)
{
//启用发射中断
USI_B_I2C_clearInterrupt (USI_B0_BASE,
USI_B_I2C_Transmit_Interrupt
);
USI_B_I2C_enableInterrupt (USI_B0_BASE,
USI_B_I2C_Transmit_Interrupt
);
//每个事务之间的延迟
__DELAY周期(50);
//加载TX字节计数器
传输计数器= 1;
//启动开始并发送第一个字符
USI_B_I2C_masterSendMultiByteStart(USCI_B0_Base,
传输数据[0]
);
//在启用中断的情况下输入LPM0
__bis_sr_register (LPM0_bits + GIE);
__no_operation();
//延迟到传输完成
while (USI_B_I2C_isBusy (USI_B0_BASE))
{
;}
}//******************************************************************************************************
//
//这是USI_B0中断向量服务例程。
////************************************************************************************************
#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_ICC__)
#pragma vector=USI_B0_vector
__interrupt
#Elif defined(__Gnu___)
__attribute__((interrupt (USI_B0_vector))
#endif
void USI_B0_ISR(vector))
{
SWITCH(__EIV_IN_RANGE(UCB0IV,12))
{
案例USI_I2C_UCTXIFG:
{
//检查TX字节计数器
IF (传输计数器< TXLENGTH)
{
//启动从主服务器到从服务器的字符发送
USI_B_I2C_masterSendMultiByteNext(USCI_B0_BASE,
传输数据[传输计数器]
);
//增量TX字节计数器
传输计数器++;
}
否则
{
//仅启动停止
USI_B_I2C_masterSendMultiByteStop (USI_B0_BASE);
//清除主中断状态
USI_B_I2C_clearInterrupt (USI_B0_BASE,
USI_B_I2C_Transmit_Interrupt);
//中断返回时退出LPM0
__BIC_SR_REGISTER_ON_EXIT (LPM0_bits);
}
中断;
}
}
}