📄 x76f100.c
字号:
#include <msp430xw42x.h>
#include "I2C.h"
#include "X76F100.h"
#define CS BIT0
#define RST BIT7
char pResetBuf[4];
//设备码 100
void writeX76F100(int addr,char pWritePassBuf[],char pBuf[])
{
char command;
char temp;
int i;
int flag = 0;
//命令字节组成
command = 0x80;
temp = (char)(addr & 0x0f);
command |= (temp << 1);
//启动总线
I2C_START();
// 发送控制命令
I2C_TxHToL(command);
// 等待 ACK
I2C_GetACK();
//发送密码
for(i = 0;i < 8;i++)
{
//从最高位密码开始发送
I2C_TxHToL(pWritePassBuf[7 - i]);
// 等待 ACK
I2C_GetACK();
}
//尝试5次
for(i = 0;i < 5;i++)
{
//启动总线
I2C_START();
// 发送密码ACK命令
I2C_TxHToL(0x55);
// 等待 ACK
temp = I2C_GetACK();
if(temp == 0)
{
flag = 1;
break;
}
}
//失败
if(flag == 0) return;
//写入数据
for(i = 0;i < 8;i++)
{
// 发送数据
I2C_TxHToL(pBuf[i]);
// 等待 ACK
I2C_GetACK();
}
// 停止总线
I2C_STOP();
}
void readX76F100(int addr,char pReadPassBuf[],char pBuf[])
{
char command;
char temp;
int i;
int flag;
//命令字节组成
command = 0x80;
temp = (char)(addr & 0x0f);
command |= (temp << 1);
//读控制位
command |= 1;
//启动总线
I2C_START();
// 发送控制命令
I2C_TxHToL(command);
// 等待 ACK
I2C_GetACK();
//发送密码
for(i = 0;i < 8;i++)
{
//从最高位密码开始发送
I2C_TxHToL(pReadPassBuf[7 - i]);
// 等待 ACK
I2C_GetACK();
}
//尝试5次
for(i = 0;i < 5;i++)
{
//启动总线
I2C_START();
// 发送密码ACK命令
I2C_TxHToL(0x55);
// 等待 ACK
temp = I2C_GetACK();
if(temp == 0)
{
flag = 1;
break;
}
}
//失败
if(flag == 0) return;
//读入数据
for(i = 0;i < 8;i++)
{
// 读取数据
pBuf[i] = I2C_RxHToL();
// 设置 ACK
I2C_SetACK();
}
// 停止总线
I2C_STOP();
}
void setReadPass(char pReadPassBuf[],char pBuf[])
{
int i;
int flag;
char temp;
//启动总线
I2C_START();
// 发送控制命令
I2C_TxHToL(0xfc);
// 等待 ACK
I2C_GetACK();
//发送密码
for(i = 0;i < 8;i++)
{
//从最高位密码开始发送
I2C_TxHToL(pReadPassBuf[7 - i]);
// 等待 ACK
I2C_GetACK();
}
//尝试5次
for(i = 0;i < 5;i++)
{
//启动总线
I2C_START();
// 发送密码ACK命令
I2C_TxHToL(0x55);
// 等待 ACK
temp = I2C_GetACK();
if(temp == 0)
{
flag = 1;
break;
}
}
//失败
if(flag == 0) return;
//读入数据
for(i = 0;i < 8;i++)
{
// 读取数据
pBuf[i] = I2C_RxHToL();
// 设置 ACK
I2C_SetACK();
}
// 停止总线
I2C_STOP();
//保存新密码
for(i = 0;i < 8;i++)
{
pReadPassBuf[i] = pBuf[i];
}
}
void setWritePass(char pWritePassBuf[],char pBuf[])
{
int i;
int flag;
char temp;
//启动总线
I2C_START();
// 发送控制命令
I2C_TxHToL(0xfe);
// 等待 ACK
I2C_GetACK();
//发送密码
for(i = 0;i < 8;i++)
{
//从最高位密码开始发送
I2C_TxHToL(pWritePassBuf[7 - i]);
// 等待 ACK
I2C_GetACK();
}
//尝试5次
for(i = 0;i < 5;i++)
{
//启动总线
I2C_START();
// 发送密码ACK命令
I2C_TxHToL(0x55);
// 等待 ACK
temp = I2C_GetACK();
if(temp == 0)
{
flag = 1;
break;
}
}
//失败
if(flag == 0) return;
//读入数据
for(i = 0;i < 8;i++)
{
// 读取数据
pBuf[i] = I2C_RxHToL();
// 设置 ACK
I2C_SetACK();
}
// 停止总线
I2C_STOP();
for(i = 0;i < 8;i++)
{
pWritePassBuf[i] = pBuf[i];
}
}
void resetX76F100()
{
//CS拉低
CS_LOW();
//RST拉低
RST_LOW();
//RST拉高
RST_HIGH();
//RST拉低
RST_LOW();
//读字节
pResetBuf[0] = I2C_RxByte();
pResetBuf[1] = I2C_RxByte();
pResetBuf[2] = I2C_RxByte();
pResetBuf[3] = I2C_RxByte();
}
void CS_HIGH(void)
{
P2DIR |= CS;
P2OUT |= CS;
}
void CS_LOW(void)
{
P2DIR |= CS;
P2OUT &= ~CS;
}
void RST_HIGH(void)
{
P1DIR |= RST;
P1OUT |= RST;
}
void RST_LOW(void)
{
P1DIR |= RST;
P1OUT &= ~RST;
}
void openX76F100(void)
{
//片选使能
CS_LOW();
//RST管脚复位
resetX76F100();
}
void closeX76F100(void)
{
//片选禁止
CS_HIGH();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -