对ADXL345寄存器的设置
0赞
发表于 3/2/2012 7:48:00 PM
阅读(4543)
在编写主程序之前,先建立C文件myxl345.c对寄存器进行设置,建立工程只需将该文件添加进去
#include "myxl345.h"
extern unsigned int fifo_flag;
extern unsigned int r_data[];
extern long long_r_data[];
extern unsigned int xl345_all[];
extern long mean_x;
extern long mean_y;
extern long mean_z;
extern long static_x;
extern long static_y;
extern long static_z;
void My_IRQ_Function(void);
void ADuC7026_all()
{
int i;
SPI_ADXL345_WRITE(XL345_POWER_CTL,0x08);
for(i=XL345_THRESH_TAP; i<=XL345_FIFO_STATUS; i++)
{
xl345_all[i-XL345_THRESH_TAP] = SPI_ADXL345_READ(i);
long_delay(2000);
}
}
void ADuC7026_once_2()
{
SPI_ADXL345_WRITE(XL345_POWER_CTL,0x08);
SPI_ADXL345_WRITE(XL345_FIFO_CTL,0x00);
SPI_ADXL345_M_READ(XL345_DATAX0,6);
static_x=tran_int2long(r_data[0],r_data[1]);
static_y=tran_int2long(r_data[2],r_data[3]);
static_z=tran_int2long(r_data[4],r_data[5]);
}
void ADuC7026_once()
{
SPI_ADXL345_WRITE(XL345_POWER_CTL,0x08);
SPI_ADXL345_M_READ(XL345_DATAX0,6);
long_r_data[0]=tran_int2long(r_data[0],r_data[1]);
long_r_data[1]=tran_int2long(r_data[2],r_data[3]);
long_r_data[2]=tran_int2long(r_data[4],r_data[5]);
}
void ADuC7026_static_rotate()
{
SPI_ADXL345_WRITE(XL345_INT_ENABLE,0x00);
SPI_ADXL345_WRITE(XL345_POWER_CTL,0x08);
SPI_ADXL345_WRITE(XL345_ACT_INACT_CTL,0xa0);
SPI_ADXL345_WRITE(XL345_FIFO_CTL,0x28);
SPI_ADXL345_WRITE(XL345_THRESH_ACT,10);
SPI_ADXL345_WRITE(XL345_THRESH_TAP,0X32);
SPI_ADXL345_WRITE(XL345_DUR,0X30);
SPI_ADXL345_WRITE(XL345_LATENT,0X22);
SPI_ADXL345_WRITE(XL345_WINDOW,0Xff);
SPI_ADXL345_WRITE(XL345_TAP_AXES,0X04);
SPI_ADXL345_READ(XL345_INT_SOURCE);
SPI_ADXL345_WRITE(XL345_INT_ENABLE,0x10);
}
void long_delay(long i)
{
while(i)i--;
}
void delay(int i){
while(i)i--;
}
long tran_int2long(unsigned int data1, unsigned int data2)
{
long result=0,temp=0;
temp=data2;
temp = temp<<8;
result=temp;
result+=data1;
temp=result&0xf000;
temp = temp<<16;
if(temp)
{
result=result|0xffff0000;
}
return result;
}
void putchar(unsigned char ch) /* Write character to Serial Port */
{
COMTX = ch; //COMTX is an 8-bit transmit register.
while(!(0x020==(COMSTA0 & 0x020)))
{;}
}
void ADuC7026_Initiate(void)
{
// Clock Initial //
POWKEY1 = 0x01; //Start PLL Setting
POWCON = 0x00; //Set PLL Active Mode With CD = 0 CPU CLOCK DIVIDER = 41.78MHz
POWKEY2 = 0xF4; //Finish PLL Setting
// GPIO SETTING //
GP1CON = 0x02222211; //P1.7 as GPIO, PIN set up for SPI, I2C and UART
GP2DAT = 0x80800000;
GP0CON = 0x00; //p0.4 int1, p0.5 int2
// UART Initial //
COMCON0 = 0x80; //Baud Rate = 115200
COMDIV0 = 0x0B;
COMDIV1 = 0x00;
COMCON0 = 0x07;
COMDIV2 = 0x883E;
// SPI SETTING //
SPIDIV = 0x05; //SPI speed in MHz = 3.482, Serial Clock=UCLK/[2*(1+SPIDIV)]
SPICON = 0x104F; //enable SPI master in continuous transfer mode, serial clock idles high
IRQ = My_IRQ_Function;
COMIEN0 = 0x01; //Enable Receive Buffer Full Interrupt
IRQEN =XIRQ1_BIT+XIRQ0_BIT; //Enable INT0 1 Interrupt
}
void My_IRQ_Function() {
unsigned int source;
if ((FIQSIG & XIRQ0_BIT) != 0)
{
source= SPI_ADXL345_READ(XL345_INT_SOURCE);
/*if(source&0x20) //double_tap
{
SPI_ADXL345_WRITE(XL345_INT_ENABLE,0x00);
fifo_flag=3;
}
else if(source&0x40)
{
SPI_ADXL345_WRITE(XL345_INT_ENABLE,0x00);
fifo_flag=2;
}
else */
if(source&0x10)
{
SPI_ADXL345_WRITE(XL345_INT_ENABLE,0x00);
fifo_flag=1;
}
long_delay(50000);
}
else if((FIQSIG & XIRQ1_BIT) != 0)
{;}
return ;
}
