主题中讨论的其他器件: 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。