?? 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 + -