主题中讨论的其他器件: MSP-FET430UIF、 HDC2022
大家好、
我在 msp430fr5043中使用 I2C。 我尝试连接 AD5122A (数字电位器)。
我选择的 SCLK 频率为100KHz。 AD5122A 的 ADDR0和 ADDR1连接到 GND、因此根据 AD5122A 的数据表、从器件地址为0101111。
在开始条件和从器件地址之后、我再发送两个字节来设置10K 欧姆的电位器为0x10、0x0D。
这里的问题是在启动条件 UCNACKIFG 被置位后。
请找到以下代码。
#include <msp430.h>
/**
* main.c
*/
char array[] = {0x10,0x0D};
int cnt=0;
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
// Software reset enable
UCB1CTLW0 |= UCSWRST;
// Clock source selection and SCLK speed
UCB1CTLW0 |= UCSSEL__SMCLK;
UCB1BRW = 10;
//I2C Mode
UCB1CTLW0 |= UCMODE_3;
//Master mode
UCB1CTLW0 |= UCMST;
//Transmitter mode
UCB1CTLW0 |= UCTR;
//Slave address
UCB1I2CSA = 0x5E;
//Auto stop
UCB1CTLW1 |= UCASTP_2;
UCB1TBCNT = sizeof(array);
// GPIO Initialization
P5SEL0 &=~ BIT5;
P5SEL1 |= BIT5;
P5SEL0 &=~ BIT6;
P5SEL1 |= BIT6;
PM5CTL0 &=~ LOCKLPM5;
//Disable software reset
UCB1CTLW0 &=~ UCSWRST;
//Enable interrupt
UCB1IE |= UCTXIE0;
__enable_interrupt();
int i=0;
while(1)
{
UCB1CTLW0 |= UCTXSTT;
for(i=0;i<10;i++);
}
return 0;
}
#pragma vector = EUSCI_B1_VECTOR
__interrupt void EUSCI_B1_I2C_ISR(void)
{
if(cnt == sizeof(array)-1)
{
UCB1TXBUF = array[cnt];
cnt=0;
}
else
{
UCB1TXBUF = array[cnt];
cnt++;
}
}
我正在使用
MSP430-FR5043微控制器
2. MSP430 USB 调试-用于编程的接口(MSP-FET430UIF)。
请指引我出错的地方。
谢谢、
Ashok。