采用5438的UCB2,配置成IIC模式,配置程序如下:
P9DIR |= 0x06;
P9OUT |= 0x06;
P9SEL |= 0x06;
UCB2CTL1 |= UCSWRST;//reset the iic
UCB2CTL0 |= UCMODE_3 + UCMST + UCSYNC;//iic
UCB2CTL1 |= UCSSEL_3 + UCTR;//iic
UCB2CTL1 &= ~UCSWRST;//reset the iic
UCB2BRW = I2c_baute_speed; //set the baute speed 100kbps
UCB2I2COA |= I2c_self_address;
UCB2I2CSA |= I2c_sl××e_address;
UCB2IE = 0x03;//I2c_ie_control;//允许中断*/
配置完之后启动IIC:
UCB2CTL1 |= UCTXSTT; //start the iic
进入中断程序后总感觉不对,用示波器测试波形,发现IIC模块发出开始时序后接着发送7位从地址和写标志位(0xa0);然后SCL就没有脉冲了,这样从器件的第九位ACK就接收不到,UCTXSTT就不能自动复位,各位大侠看看该如何处理,谢谢!
启动之后进入的是UCB0的发送空中断向量,再这个终端里尝试修改为接收模式UCTR为0,结果除了ACK接收到外又多接收了一个0xff数据。等待指点中......
MSP430F5438的IIC问题
经过再学习MSP430F5438的spec资料,终于有点小理解了,硬件设计就是设计成这个样子的。也有他一定的道理,严格按照spec资料去编程就可以的。如果想读数据就先设置UCTR为写,然后启动IIC,自动发送从地址,接着把开始写入的地址写入TXBUF,写完后将UCTR设置为读,就可以从你设置的地址开始读入数据了,总之还是要依据各自的资料去写程序,因为虽然都是IIC,但是不同的模块设计并不尽相同,唉,好浪费时间,要是可以统一就好了。。。
我在用f169,也遇到类似的问题,我是写进去再读出来,读出的数据始终是02或20,时序感觉没有问题,不知道问题究竟在哪
窝貌似没遇到过 不过i2c SPI模块是比较繁琐的 需要多做实验多看资料 慢慢领会 明白“脾性”之后还是挺好用的
引用:
我在用f169,也遇到类似的问题,我是写进去再读出来,读出的数据始终是02或20,时序感觉没有问题,不知道问题箮.
|
|
能具体点么?用的的是硬件IIC模块,能保证写入的正确么,这个东西还是一步一步来,先保证写入没有问题,再调试读,还有就是写入进去不能马上读,EEPROM写入结束后有个等待内部擦写的过程。
我的是f149 ,根本没有,只能跟51一样模拟,悲剧啊
UCB2CTL1 |= UCSWRST;可能是这里设置出错了!应该是UCB2CTL1&=~ UCSWRST;试试对不?我看uart这类的都是先清除swrst