📄 a7102.c
字号:
/***********************************************
* copyrite (c) 2007
*文件名: A7102.c
*作者: larry
*当前版本: v1.0
*建立时间: 2007-6-11 09:45
*完成日期:
*描述: A7102驱动抽象程序,与MCU和IO
* 接口无关,由外部.h文件宏定义
************************************************/
#include "../header/A7102.h"
/***********************************************
函 数: Byte_Write()
功 能: 写8bit数据到sck和sdio
输 入: byte
输 出: /
描 述: 左移位,bit7在先,sck负边缘触发
***********************************************/
void Byte_Write(unsigned char byte)
{
unsigned char i;
for(i = 0x00; i < 0x08; i++)
{
if(byte&0x80)
iSPI_Sdi = positive;
else
iSPI_Sdi = negative;
delay_A7102_us();
iSPI_Sck = positive;
delay_A7102_us();
iSPI_Sck = negative;
delay_A7102_us();
byte <<= 0x01;
}
}
/***********************************************
函 数: Byte_Read()
功 能: 读8bit数据从sck和sdio
输 入: /
输 出: byte
描 述: 左移位,bit7在先,sck负边缘触发
***********************************************/
unsigned char Byte_Read(void)
{
unsigned char i;
unsigned char byte;
for(i = 0x00; i < 0x08; i++)
{
byte <<= 0x01;
delay_A7102_us();
if(iSPI_Sdo)
byte |= 0x01;
else
byte &= 0xfe;
iSPI_Sck = positive;
delay_A7102_us();
iSPI_Sck = negative;
}
/* 返回读取数值 */
return (byte);
}
/***********************************************
函 数: Word_Write()
功 能: 写16bit数据到sck和sdio
输 入: word
输 出: /
描 述: 左移位,bit15在先,sck负边缘触发
***********************************************/
void Word_Write(unsigned int word)
{
unsigned char i;
for(i = 0x00; i < 0x10; i++)
{
if(word&0x8000)
iSPI_Sdi = positive;
else
iSPI_Sdi = negative;
delay_A7102_us();
iSPI_Sck = positive;
delay_A7102_us();
iSPI_Sck = negative;
delay_A7102_us();
word <<= 0x01;
}
}
/***********************************************
函 数: Word_Read()
功 能: 读16bit数据从sck和sdio
输 入: /
输 出: word
描 述: 左移位,bit16在先,sck负边缘触发
***********************************************/
unsigned int Word_Read(void)
{
unsigned char i;
unsigned int word;
for(i = 0x00; i < 0x10; i++)
{
word <<= 0x01;
delay_A7102_us();
if(iSPI_Sdo)
word |= 0x0001;
else
word &= 0xfffe;
iSPI_Sck = positive;
delay_A7102_us();
iSPI_Sck = negative;
}
/* 返回读取数值 */
return (word);
}
/***********************************************
函 数: A7102_Reset_Chip()
功 能: 复位A7102芯片
输 入: /
输 出: /
描 述: /
***********************************************/
void A7102_Reset_Chip(void)
{
iSPI_Scs = negative;
/* 写A7102-Reset命令 */
Byte_Write(0x7a);
iSPI_Scs = positive;
}
/***********************************************
函 数: A7102_Reset_FifoTX()
功 能: 复位A7102发送FIFO指针
输 入: /
输 出: /
描 述: /
***********************************************/
void A7102_Reset_FifoTX(void)
{
iSPI_Sck = negative;
iSPI_Scs = negative;
/* 写A7102-FifoTX命令 */
Byte_Write(0x6a);
iSPI_Scs = positive;
}
/***********************************************
函 数: A7102_Reset_FifoRX()
功 能: 复位A7102接收FIFO指针
输 入: /
输 出: /
描 述: /
***********************************************/
void A7102_Reset_FifoRX(void)
{
iSPI_Sck = negative;
iSPI_Scs = negative;
/* 写A7102-FifoRX命令 */
Byte_Write(0xea);
iSPI_Scs = positive;
}
/***********************************************
函 数: A7102_Fifo_Read()
功 能: 读FIFO数据
输 入: read_buff
输 出: /
描 述: /
***********************************************/
void A7102_Fifo_Read(unsigned char *read_buff)
{
unsigned char i;
iSPI_Sck = negative;
iSPI_Scs = negative;
/* 读A7102-FIFO命令 */
Byte_Write(0xca);
declare_sdo_input();
/* 读A7102-FIFO数据 */
for(i = 0x00;i < C_FIFO_Byte;i++)
{
*read_buff = Byte_Read();
read_buff ++;
}
declare_sdo_output();
iSPI_Scs = positive;
}
/***********************************************
函 数: A7102_Fifo_Write()
功 能: 写FIFO数据
输 入: write_buff
输 出: /
描 述: /
***********************************************/
void A7102_Fifo_Write(unsigned char *write_buff)
{
unsigned char i;
iSPI_Sck = negative;
iSPI_Scs = negative;
/* 写A7102-FIFO命令 */
Byte_Write(0x5a);
/* 写A7102-FIFO数据 */
for(i = 0x00;i < C_FIFO_Byte;i++)
{
Byte_Write(*write_buff);
write_buff ++;
}
iSPI_Scs = positive;
}
/***********************************************
函 数: A7102_Id_Write()
功 能: 写ID到A7102内部寄存器
输 入: buff_id[]
输 出: /
描 述: 写ID必须一次性写入
***********************************************/
void A7102_Id_Write(unsigned char *id_buff)
{
unsigned char i;
iSPI_Sck = negative;
iSPI_Scs = negative;
/* 写A7102-ID命令 */
Byte_Write(0x2a);
/* 写A7102-ID数据 */
for(i = 0x00;i < 0x04;i++)
{
Byte_Write(*id_buff);
id_buff ++;
}
iSPI_Scs = positive;
}
/***********************************************
函 数: A7102_Id_Read()
功 能: 读ID从A7102内部寄存器
输 入: /
输 出: buff_id[]
描 述: 读ID必须一次性读出
***********************************************/
void A7102_Id_Read(unsigned char *id_buff)
{
unsigned char i;
iSPI_Sck = negative;
iSPI_Scs = negative;
/* 读A7102-ID命令 */
Byte_Write(0xaa);
declare_sdo_input();
/* 读A7102-ID数据 */
for(i = 0x00;i < 0x04;i++)
{
*id_buff = Byte_Read();
id_buff ++;
}
declare_sdo_output();
iSPI_Scs = positive;
}
/***********************************************
函 数: A7102_Register_Write()
功 能: 写控制数据到A7102内部寄存器
输 入: addr,parameter
输 出: /
描 述: /
***********************************************/
void A7102_Register_Write(unsigned char addr,unsigned int parameter)
{
iSPI_Sck = negative;
delay_A7102_us();
iSPI_Scs = negative;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -