默れ

对ADXL345寄存器的设置

0
阅读(3187)

在编写主程序之前,先建立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 ;
}