www.pudn.com > ATT7028.rar > att7028.c


// ATT7028底层驱动模块 
// 编制: jinys 
// 时间: 2004-08-19 v1.0 
 
#include "..\..\a\main\main.h" 
#include "ATT7028.h" 
 
union Long_byte_st 
{ 
    tLong ul; 
    tByte uc[4]; 
}; 
 
#define DELAY()  _nop_(), _nop_(), _nop_(); 
 
//-----------私有参数------------------------------------------------------------// 
#define CS_ATT7028    AD_CS 
#define SCK_ATT7028   AD_SCLK 
#define SI_ATT7028    AD_DIN 
#define SO_ATT7028    AD_DOUT 
#define RST_ATT7028   AD_RST 
#define SIG_ATT7028   AD_SIG 
 
/****************************** 
** 原型: ATT7028_Init()      ** 
** 功能: 初始化7028          ** 
** 入口: 无                  ** 
** 出口: 无                  ** 
******************************/ 
void ATT7028_Init(void) 
{ 
    RST_ATT7028 = 0; 
    CS_ATT7028 = 1; 
    SCK_ATT7028 = 0; 
    SI_ATT7028 = 1; 
    SO_ATT7028 = 1; 
    RST_ATT7028 = 1; 
} 
 
/********************************* 
** 原型: ATT7028_rCmd()         ** 
** 功能: 从7028读取一个数据     ** 
** 入口: uCmd(命令字)           ** 
** 出口: 读回的数据             ** 
*********************************/ 
tLong ATT7028_rCmd(tByte uCmd) 
{ 
    tByte ucA; 
    tLong data uData = 0; 
 
    ucA = 8; 
    CS_ATT7028 = 0; 
    EA_OFF(); 
    do 
    { 
        SI_ATT7028 = (bit)(uCmd & 0x80); 
        uCmd <<= 1; 
        SCK_ATT7028 = 1; 
        DELAY(); 
        SCK_ATT7028 = 0; 
        DELAY(); 
    }while(--ucA); 
 
    // delay 3us 
    DELAY(); 
 
    ucA = 24; 
    do 
    { 
        uData = _lrol_(uData, 1); 
        uData |= SO_ATT7028; 
        SCK_ATT7028 = 1; 
        DELAY(); 
        SCK_ATT7028 = 0; 
        DELAY(); 
    }while(--ucA); 
 
    CS_ATT7028 = 1; 
    EA_ON(); 
    return(uData); 
} 
 
/********************************* 
** 原型: ATT7028_wCmd()         ** 
** 功能: 向7028写一个数据       ** 
** 入口: uCmd(命令字)           ** 
**       ulData(数据)           ** 
** 出口: 无                     ** 
*********************************/ 
void ATT7028_wCmd(tByte uCmd, tLong ulData) 
{ 
    tByte ucA, ucB; 
 
    ucB = mCMD_W + uCmd; 
    CS_ATT7028 = 0; 
    ucA = 8; 
    EA_OFF(); 
    do 
    { 
        SCK_ATT7028 = 1; 
        DELAY(); 
        SI_ATT7028 = (bit)(ucB & 0x80); 
        ucB <<= 1; 
        SCK_ATT7028 = 0; 
        DELAY(); 
    }while(--ucA); 
 
    ucA = 24; 
    do 
    { 
        SCK_ATT7028 = 1; 
        DELAY(); 
        SI_ATT7028 = (bit)(ulData & 0x800000); 
        ulData = _lrol_(ulData , 1); 
        SCK_ATT7028 = 0; 
        DELAY(); 
    }while(--ucA); 
 
    CS_ATT7028 = 1; 
    EA_ON(); 
} 
 
/*------------------------------------------------------------------*- 
  ---- END OF FILE ------------------------------------------------- 
-*------------------------------------------------------------------*/