微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > msp430读写24c512程序

msp430读写24c512程序

时间:11-22 来源:互联网 点击:

FPGACfg+tempAddr,0x80);
P4OUT ^= 0x80;
for (m=0;m<125;m++) {for (n=0;n<110;n++);}
P4OUT ^= 0x80;
}

tempAddr = 128*j;
while (I2CBUSY & I2CDCTL); // I2C ready?
I2cSendSubAddr(tempAddr,0x4f);
I2cSendStr(FPGACfg+tempAddr,0x4f);
P4OUT ^= 0x80;
for (m=0;m<125;m++) {for (n=0;n<110;n++);}
P4OUT ^= 0x80;
}



void I2cReceSubAddr(unsigned int suba) // test 09-25 读之前先写地址
{
unsigned char Hi_suba,Lo_suba;
P3OUT = 0x00; // clear P3 output register
P3SEL = 0x0A; // P3.1=SDA, P3.3=SCL,Select I2C pins, Setup I2C module
U0CTL |= I2C + SYNC; // select I2C mode;XA=0,7bit_addresing;
U0CTL &= ~I2CEN; // i2c功能使能无效
// I2CTCTL =I2CRM + I2CSSEL_2;//I2CRM = 1,自己设定字节个数

I2CTCTL =I2CSSEL_2; // I2CRM = 0,
I2CNDAT = 2; // I2CRM = 0,2byte地址 + 128byte数据,固定字节
I2CIFG = 0;
I2CPSC = 1; // set scl
// I2CSCLH = 0x02; // High period of SCL
//I2CSCLL = 0x02; // Low period of SCL
I2CSA = 0x50; // Slave address of At24c512
U0CTL |= I2CEN; // enable I2C module, 7 bit addr,master mode 08-26
U0CTL |= MST;


Hi_suba = ( unsigned char )( suba >> 8 );
Lo_suba = ( unsigned char )( suba & 0x00ff );

while (I2CBUSY & I2CDCTL); // I2C ready? 在空闲状态:0,空闲;1:忙
I2CTCTL |= I2CTRX + I2CSTT + I2CSTP ;// I2CRM =0,启动总线,发送从器件地址
while((I2CIFG & NACKIFG) == 0x02) // ack 为低电平,等待地址应答位 ,判断无应答NACKIFG = 1
{
I2CTCTL |= I2CSTP; // 结束总线
}

I2cBusSendByte( Hi_suba ); //发送器件子地址
while((I2CIFG & NACKIFG) == 0x02) // ack 为低电平,等待地址应答位 ,判断无应答NACKIFG = 1
{
I2CTCTL |= I2CSTP; // 结束总线
}
I2cBusSendByte( Lo_suba ); //发送器件子地址
while((I2CIFG & NACKIFG) == 0x02) // ack 为低电平,等待地址应答位 ,判断无应答NACKIFG = 1
{
I2CTCTL |= I2CSTP; // 结束总线
}
DelayTime10us(250);
DelayTime10us(250);
DelayTime10us(250);
DelayTime10us(250);
}

void InitI2cRece(unsigned char num)
{
P3OUT = 0x00; // clear P3 output register
P3SEL = 0x0A; // P3.1=SDA, P3.3=SCL,Select I2C pins, Setup I2C module
U0CTL |= I2C + SYNC; // select I2C mode;XA=0,7bit_addresing;
U0CTL &= ~I2CEN; // i2c功能使能无效
// I2CTCTL = I2CRM + I2CSSEL_2;// I2CRM=1 x(x>256)字节模式

I2CTCTL =I2CSSEL_2; // I2CRM=0
I2CNDAT = num; // 1个字节
I2CPSC = 1; // set scl
//I2CSCLH = 0x01; // High period of SCL
//I2CSCLL = 0x01; // Low period of SCL
I2CIFG = 0;
I2CSA = 0x50; // Slave address of At24c512
I2CTCTL &= ~I2CTRX;
U0CTL |= I2CEN; // enable I2C module, 7 bit addr,master mode 08-26
}

unsigned char I2cReceSlaByte(void)
{
unsigned char ch;
DelayTime10us(15);
U0CTL |=MST; //主模式
while (I2CBUSY & I2CDCTL); // I2C ready? 在空闲状态:0,空闲;1:忙
I2CTCTL |= I2CSTT + I2CSTP; // I2CRM =0; Receive, ST, SP (clears MST)
while((I2CIFG & RXRDYIFG) != RXRDYIFG);// 等待地址应答位 ,判断
ch = I2CDRB;
return(ch);
}

void I2cReceSlaStr(unsigned char num)
{
unsigned char i;
DelayTime10us(15);
U0CTL |=MST; //主模式
while (I2CBUSY & I2CDCTL); // I2C ready? 在空闲状态:0,空闲;1:忙
I2CTCTL |= I2CSTT + I2CSTP; // I2CRM =0; Receive, ST, SP (clears MST)
for (i=0;i
{
while((I2CIFG & RXRDYIFG) != RXRDYIFG);// 等待地址应答位 ,判断
rxDataArray = I2CDRB;
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top