ads7843.c
资源名称:GPRS_work.rar [点击查看]
上传用户:sdaoma
上传日期:2013-08-07
资源大小:3838k
文件大小:4k
源码类别:
GPS编程
开发平台:
C/C++
- /****************************************************************************
- * 文件名:ADS7843.C
- * 功能:ADS7843驱动程序。
- *
- * 说明:若系统时钟过快,需要调整DELYA_200NS的值。
- ****************************************************************************/
- #include "config.h"
- #define ADS7843_CSS() IO2SET = ADS7843_CS
- #define ADS7843_CSC() IO2CLR = ADS7843_CS
- #define ADS7843_DOUTR() (IO2PIN & ADS7843_DOUT)
- #define ADS7843_DINS() IO2SET = ADS7843_DIN
- #define ADS7843_DINC() IO2CLR = ADS7843_DIN
- #define ADS7843_DCLKS() IO2SET = ADS7843_DCLK
- #define ADS7843_DCLKC() IO2CLR = ADS7843_DCLK
- /* 操作时序控制宏(即延时控制值) */
- #define DELAY_200NS 5
- /****************************************************************************
- * 名称:DelayNo()
- * 功能:短软件延时。
- * 入口参数:dly 延时参数,值越大,延时越久
- * 出口参数:无
- ****************************************************************************/
- void DelayNo(uint32 i)
- { for(; i>0; i--);
- }
- /****************************************************************************
- * 名称:TestDelayNo()
- * 功能:测试短软件延时,以便于产生正确的时序。
- * 入口参数:无
- * 出口参数:无
- ****************************************************************************/
- void TestDelayNo(void)
- { while(1)
- { ADS7843_DCLKS();
- DelayNo(DELAY_200NS);
- ADS7843_DCLKC();
- DelayNo(DELAY_200NS);
- }
- }
- /****************************************************************************
- * 名称:ADS7843_IRQR()
- * 功能:ADS7843的PENIRQ引脚测量,返回当前此引脚的电平值。
- * 入口参数:无
- * 出口参数:返回为0表示PENIRQ为低电平状态,否则为高电平。
- ****************************************************************************/
- uint8 ADS7843_IRQR(void)
- { uint8 dat[3];
- DelayNo(1);
- if(IO0PIN&ADS7843_IRQ) dat[0] = 1;
- else dat[0] = 0;
- if(IO0PIN&ADS7843_IRQ) dat[1] = 1;
- else dat[1] = 0;
- if(IO0PIN&ADS7843_IRQ) dat[2] = 1;
- else dat[2] = 0;
- if((dat[0] + dat[1] + dat[2]) > 1) return(1);
- else return(0);
- }
- /****************************************************************************
- * 名称:ADS7843_IOInit()
- * 功能:初始化ADS7843的控制I/O,CS=1,DCLK=0,DIN=0。
- * 入口参数:无
- * 出口参数:无
- ****************************************************************************/
- void ADS7843_IOInit(void)
- { ADS7843_CSS(); // CS = 1
- ADS7843_DCLKC(); // DCLK = 0
- ADS7843_DINC(); // DIN = 0
- DelayNo(DELAY_200NS);
- }
- /****************************************************************************
- * 名称:ADS7843_WriteRead()
- * 功能:对ADS7843进行读写操作。操作按照ADS7843的规定,24Clocks,先写8位控制数据,然
- * 后读取12位的转换结果。
- * 入口参数:data 控制数据
- * 出口参数:返回值为读出的数据
- ****************************************************************************/
- uint16 ADS7843_WriteRead(uint8 data)
- { uint8 i;
- uint16 ret_dat;
- data = data|0x80; // 设置S位
- ADS7843_IOInit();
- ADS7843_CSC(); // CS = 0
- for(i=0; i<8; i++)
- { if( (data&0x80) != 0 ) ADS7843_DINS(); // DIN = 1
- else ADS7843_DINC(); // DIN = 0
- DelayNo(DELAY_200NS);
- ADS7843_DCLKS(); // DCLK = 1
- DelayNo(DELAY_200NS);
- ADS7843_DCLKC(); // DCLK = 0
- data = data<<1;
- }
- ADS7843_DINC(); // DIN = 0
- DelayNo(DELAY_200NS * 3);
- ADS7843_DCLKS(); // DCLK = 1
- DelayNo(DELAY_200NS);
- ADS7843_DCLKC(); // DCLK = 0
- ret_dat = 0;
- for(i=0; i<12; i++)
- { ret_dat = ret_dat<<1;
- DelayNo(DELAY_200NS);
- ADS7843_DCLKS(); // DCLK = 1
- if( ADS7843_DOUTR() != 0 ) ret_dat = ret_dat | 1;
- DelayNo(DELAY_200NS);
- ADS7843_DCLKC(); // DCLK = 0
- if(i==6) DelayNo(DELAY_200NS * 2);
- }
- for(i=0;i<3;i++)
- { DelayNo(DELAY_200NS);
- ADS7843_DCLKS(); // DCLK = 1
- DelayNo(DELAY_200NS);
- ADS7843_DCLKC(); // DCLK = 0
- }
- DelayNo(DELAY_200NS);
- ADS7843_CSS(); // CS = 1
- return(ret_dat);
- }