Lis3lv02dq for tms320f2812cant workcode先发出来,给大家看看

[复制链接]
2678|0
 楼主| takeshic 发表于 2008-6-30 15:12 | 显示全部楼层 |阅读模式
#include&nbsp;&quot;DSP28_Device.h&quot;&nbsp;<br />unsigned&nbsp;int&nbsp;Spi_VarRx[100];&nbsp;<br />unsigned&nbsp;int&nbsp;i,j;&nbsp;<br />#define&nbsp;WHO_AM_I&nbsp;0x0f&nbsp;<br />#define&nbsp;OFFSET_X&nbsp;0x16&nbsp;<br />#define&nbsp;OFFSET_Y&nbsp;0x17&nbsp;<br />#define&nbsp;OFFSET_Z&nbsp;0x18&nbsp;<br />#define&nbsp;GAIN_X&nbsp;0x19&nbsp;<br />#define&nbsp;GAIN_Y&nbsp;0x1a&nbsp;<br />#define&nbsp;GAIN_Z&nbsp;0x1b&nbsp;<br />#define&nbsp;CTRL_REG1&nbsp;0x20&nbsp;<br />#define&nbsp;CTRL_REG2&nbsp;0x21&nbsp;<br />#define&nbsp;CTRL_REG3&nbsp;0x22&nbsp;<br />#define&nbsp;HP_FILTER_RESET&nbsp;0x23&nbsp;<br />#define&nbsp;STATUS_REG&nbsp;0x27&nbsp;<br />#define&nbsp;OUTX_L&nbsp;0x28&nbsp;<br />#define&nbsp;OUTX_H&nbsp;0x29&nbsp;<br />#define&nbsp;OUTY_L&nbsp;0x2a&nbsp;<br />#define&nbsp;OUTY_H&nbsp;0x2b&nbsp;<br />#define&nbsp;OUTZ_L&nbsp;0x2c&nbsp;<br />#define&nbsp;OUTZ_H&nbsp;0x2d&nbsp;<br />#define&nbsp;FF_WU_CFG&nbsp;0x30&nbsp;<br />#define&nbsp;FF_WU_SRC&nbsp;0x31&nbsp;<br />#define&nbsp;FF_WU_ACK&nbsp;0x32&nbsp;<br />#define&nbsp;FF_WU_THS_L&nbsp;0x34&nbsp;<br />#define&nbsp;FF_WU_THS_H&nbsp;0x35&nbsp;<br />#define&nbsp;FF_WU_DURATION&nbsp;0x36&nbsp;<br />#define&nbsp;DD_CFG&nbsp;0x38&nbsp;<br />#define&nbsp;DD_SRC&nbsp;0x39&nbsp;<br />#define&nbsp;DD_ACK&nbsp;0x3a&nbsp;<br />#define&nbsp;DD_THSI_L&nbsp;0x3c&nbsp;<br />#define&nbsp;DD_THSI_H&nbsp;0x3d&nbsp;<br />#define&nbsp;DD_THSE_L&nbsp;0x3e&nbsp;<br />#define&nbsp;DD_THSE_H&nbsp;0x3f&nbsp;<br /><br />void&nbsp;delay_loop(void);&nbsp;<br />void&nbsp;spi_init(void);&nbsp;<br />void&nbsp;spi_xmit(int&nbsp;a);&nbsp;<br />int&nbsp;spi_rev();&nbsp;<br />void&nbsp;spi_fifo_init(void);&nbsp;<br />void&nbsp;Lis3lv02dq_init(void);&nbsp;<br />int&nbsp;read_LIS_register(&nbsp;unsigned&nbsp;char&nbsp;register_name);&nbsp;<br />void&nbsp;write_LIS_register(unsigned&nbsp;char&nbsp;register_name,&nbsp;unsigned&nbsp;char&nbsp;register_value);&nbsp;<br />void&nbsp;Lis3lv02dq_init(void);&nbsp;<br />void&nbsp;LIS_read_x(unsigned&nbsp;int&nbsp;*x);&nbsp;<br />void&nbsp;LIS_read_y(unsigned&nbsp;int&nbsp;*y);&nbsp;<br />void&nbsp;LIS_read_z(unsigned&nbsp;int&nbsp;*z);&nbsp;<br />void&nbsp;read_LIS_x_y_z(unsigned&nbsp;int&nbsp;*x,&nbsp;unsigned&nbsp;int&nbsp;*y,&nbsp;unsigned&nbsp;int&nbsp;*z);&nbsp;<br /><br />unsigned&nbsp;int&nbsp;var1=0;&nbsp;<br />unsigned&nbsp;int&nbsp;var2=0;&nbsp;<br />unsigned&nbsp;int&nbsp;var3=0;&nbsp;<br />unsigned&nbsp;int&nbsp;Test_count=0;&nbsp;<br />unsigned&nbsp;int&nbsp;Test_flag1=0;&nbsp;<br />unsigned&nbsp;int&nbsp;Test_flag2=0;&nbsp;<br />unsigned&nbsp;int&nbsp;Test_flag3=0;&nbsp;<br />unsigned&nbsp;int&nbsp;Test_flag4=0;&nbsp;<br />unsigned&nbsp;int&nbsp;Test_var=0;&nbsp;<br />unsigned&nbsp;int&nbsp;Test_status[32];&nbsp;<br />unsigned&nbsp;int&nbsp;PASS_flag=0;&nbsp;<br />unsigned&nbsp;int&nbsp;Ret_var1=0;&nbsp;<br />unsigned&nbsp;int&nbsp;Ret_var2=0;&nbsp;<br />int&nbsp;ID_Lis3lv02dq;&nbsp;<br />//interrupt&nbsp;void&nbsp;ISRSciaTx(void);&nbsp;<br />//interrupt&nbsp;void&nbsp;ISRSciaRx(void);&nbsp;<br />#define&nbsp;LED0_ON&nbsp;GpioDataRegs.GPFDAT.bit.GPIOF6=1&nbsp;<br />#define&nbsp;LED0_OFF&nbsp;GpioDataRegs.GPFDAT.bit.GPIOF6=0&nbsp;<br />#define&nbsp;LED1_ON&nbsp;GpioDataRegs.GPFDAT.bit.GPIOF7=1&nbsp;<br />#define&nbsp;LED1_OFF&nbsp;GpioDataRegs.GPFDAT.bit.GPIOF7=0&nbsp;<br /><br />void&nbsp;main(void)&nbsp;<br />{&nbsp;<br />/*初始化系统*/&nbsp;<br />InitSysCtrl();&nbsp;<br />/*&nbsp;关中断&nbsp;*/&nbsp;<br />DINT;&nbsp;<br />IER&nbsp;=&nbsp;0x0000;&nbsp;<br />IFR&nbsp;=&nbsp;0x0000;&nbsp;<br />/*&nbsp;初始化PIE控制寄存器&nbsp;*/&nbsp;<br />InitPieCtrl();&nbsp;<br />/*&nbsp;初始化PIE参数表&nbsp;*/&nbsp;<br />InitPieVectTable();&nbsp;<br />/*&nbsp;初始化外设寄存器&nbsp;*/&nbsp;<br />InitPeripherals();&nbsp;<br /><br /><br />//Step4,使用特定的函数重新分配向量使能中断&nbsp;<br />spi_fifo_init();&nbsp;//&nbsp;初始化Spi&nbsp;FIFO&nbsp;<br /><br />spi_init();&nbsp;//设置SPI工作模式,SPI初始化&nbsp;<br /><br />Lis3lv02dq_init();&nbsp;//加速度计Lis3lv02dq初始化&nbsp;<br /><br />//&nbsp;write_LIS_register(CTRL_REG1,0xD7);&nbsp;//写加速度计地址20h,使加速度计从休眠模式唤醒(D7),160khz采样频率,使能xyz轴&nbsp;<br /><br />ID_Lis3lv02dq&nbsp;=&nbsp;read_LIS_register(WHO_AM_I);&nbsp;//读取LIS的ID号&nbsp;<br /><br />read_LIS_x_y_z(&var1,&var2,&var3);&nbsp;<br /><br />LED0_OFF;&nbsp;<br />for(;;&nbsp;<br /><br />}&nbsp;<br /><br />//Step5,所有中断服务程序和函数&nbsp;<br />void&nbsp;delay_loop()&nbsp;<br />{&nbsp;<br />long&nbsp;i;&nbsp;<br />for&nbsp;(i=0;i&lt1000000;i++){}&nbsp;<br />}&nbsp;<br /><br />//测试1,SPI&nbsp;8位字符,自测试,主模式,上升沿,波特率设置0x07F&nbsp;<br />void&nbsp;spi_init()&nbsp;<br />{&nbsp;<br />SpiaRegs.SPICCR.all=0x0007;&nbsp;//bit6~SPI复位,设置时钟为上升沿传输数据,8位字符长度&nbsp;<br />SpiaRegs.SPICTL.all=0x0006;&nbsp;//&nbsp;bit2使能主模式,标准相位&nbsp;<br />//&nbsp;bit1使能Talk(使能发送,对于4引脚选项,保证使能接&nbsp;<br />//收器的spiste引脚),SPIINT屏蔽(bit0)&nbsp;<br />SpiaRegs.SPIBRR&nbsp;=&nbsp;0x7C;&nbsp;//300KHZ设置波特率&nbsp;<br /><br />//Step2,配置芯片的通用数字I/O为希望的功能引脚&nbsp;<br />EALLOW;&nbsp;<br />GpioMuxRegs.GPFMUX.all=0x000F;&nbsp;//设置GPIO工作在SPI的功能&nbsp;<br />//Port&nbsp;F&nbsp;MUX-x000&nbsp;0000&nbsp;0000&nbsp;1111&nbsp;<br />EDIS;&nbsp;<br /><br />//退出复位状态&nbsp;<br />SpiaRegs.SPICCR.all=0x0087;&nbsp;//使SPI(正常工作状态),设置时钟为上升沿传输数据,8位字符长度&nbsp;<br />//&nbsp;SpiaRegs.SPICCR.all=0x0097;&nbsp;//使能SPI自测试模式bit4,sIMO/SOMI线路被内部连接在一起,用于自测试&nbsp;<br />}&nbsp;<br /><br /><br />void&nbsp;spi_fifo_init()&nbsp;<br />{&nbsp;<br />//初始化SPI&nbsp;FIFO寄存器&nbsp;<br />SpiaRegs.SPIFFTX.all=0xE040;&nbsp;<br />SpiaRegs.SPIFFRX.all=0x204F;&nbsp;<br />SpiaRegs.SPIFFCT.all=0x0;&nbsp;<br />}&nbsp;<br /><br /><br /><br />//发送一个读指令到加速度传感器&nbsp;<br />int&nbsp;read_LIS_register(&nbsp;unsigned&nbsp;char&nbsp;register_name)&nbsp;<br />{&nbsp;<br />int&nbsp;Rev_data;&nbsp;<br />int&nbsp;Tx_data&nbsp;=(register_name&nbsp;|&nbsp;0x0080)&lt&lt8;&nbsp;<br />SpiaRegs.SPICTL.bit.TALK=0;&nbsp;//spiste引脚高阻&nbsp;<br /><br />spi_xmit(Tx_data);&nbsp;//发送读取register_name指令,后8位位空操作指令&nbsp;<br />SpiaRegs.SPICTL.bit.TALK=1;&nbsp;//spiste引脚拉低&nbsp;<br /><br />if(SpiaRegs.SPISTS.bit.INT_FLAG&nbsp;==&nbsp;1)&nbsp;//读命令传输完成,数据可读&nbsp;<br />{&nbsp;<br />int&nbsp;Rev_data&nbsp;=&nbsp;spi_rev();&nbsp;//接收数据&nbsp;<br />}&nbsp;<br /><br />return(Rev_data);&nbsp;//返回读取到数据&nbsp;<br />}&nbsp;<br /><br />//发送一个写指令到加速度传感器&nbsp;<br />void&nbsp;write_LIS_register(unsigned&nbsp;char&nbsp;register_name,&nbsp;unsigned&nbsp;char&nbsp;register_value)&nbsp;<br />{&nbsp;<br />int&nbsp;Tx_data&nbsp;=(register_name&nbsp;&&nbsp;0x007F)&lt&lt8&nbsp;+&nbsp;register_value&nbsp;;&nbsp;<br /><br />SpiaRegs.SPICTL.bit.TALK=0;&nbsp;//spiste引脚高阻&nbsp;<br /><br />spi_xmit(Tx_data);&nbsp;//发送写register_name指令,后8位为写该寄存器的值&nbsp;<br /><br />SpiaRegs.SPICTL.bit.TALK=1;&nbsp;//spiste引脚拉低&nbsp;<br /><br />while(!SpiaRegs.SPISTS.bit.BUFFULL_FLAG&nbsp;)&nbsp;//确认字节已经移位到SPODAT&nbsp;<br />continue;&nbsp;<br />}&nbsp;<br /><br />//SPI发送&nbsp;<br />void&nbsp;spi_xmit(int&nbsp;a)&nbsp;<br />{&nbsp;<br />SpiaRegs.SPITXBUF=a;&nbsp;//向SPI发送缓冲写数据&nbsp;<br />}&nbsp;<br /><br />//SPI接收&nbsp;<br />int&nbsp;spi_rev()&nbsp;<br />{&nbsp;<br />return&nbsp;SpiaRegs.SPIRXBUF;&nbsp;//读SPI接收缓冲数据&nbsp;<br />}&nbsp;<br /><br />//加速度计Lis3lv02dq初始化&nbsp;<br />void&nbsp;Lis3lv02dq_init(void)&nbsp;<br />{&nbsp;<br />unsigned&nbsp;char&nbsp;id;&nbsp;<br />unsigned&nbsp;int&nbsp;w;&nbsp;<br /><br />write_LIS_register(CTRL_REG1,&nbsp;0xD7);&nbsp;//设置采样率,160khz。正常工作模式&nbsp;<br />delay_loop();&nbsp;<br />write_LIS_register(CTRL_REG2,&nbsp;0x14);&nbsp;//从内flash校准参数,如X/Y/Z轴的偏移量和增益,&nbsp;<br />//调整到出厂设置,调往boot位置o&nbsp;<br />delay_loop();&nbsp;<br />write_LIS_register(CTRL_REG1,&nbsp;0xD7);&nbsp;//设置采样率,160khz。正常工作模式&nbsp;<br />delay_loop();&nbsp;<br />write_LIS_register(CTRL_REG2,&nbsp;0x44);&nbsp;//读取完高字节后数据更新,确保数据传输正确,&nbsp;使能数据更新信号&nbsp;<br /><br /><br />id&nbsp;=&nbsp;read_LIS_register(OFFSET_X);&nbsp;//读取X轴加速度偏移量&nbsp;<br />printf(&quot;&nbsp;0x%x&nbsp;&quot;,&nbsp;id);&nbsp;<br />id&nbsp;=&nbsp;read_LIS_register(OFFSET_Y);&nbsp;//读取Y轴加速度偏移量&nbsp;<br />printf(&quot;&nbsp;0x%x&nbsp;&quot;,&nbsp;id);&nbsp;<br />id&nbsp;=&nbsp;read_LIS_register(OFFSET_Z);&nbsp;//读取Z轴加速度偏移量&nbsp;<br />printf(&quot;&nbsp;0x%x&nbsp;&quot;,&nbsp;id);&nbsp;<br />id&nbsp;=&nbsp;read_LIS_register(GAIN_X);&nbsp;//读取X轴加速度增益&nbsp;<br />printf(&quot;&nbsp;0x%x&nbsp;&quot;,&nbsp;id);&nbsp;<br />id&nbsp;=&nbsp;read_LIS_register(GAIN_Y);&nbsp;//读取Y轴加速度增益&nbsp;<br />printf(&quot;&nbsp;0x%x&nbsp;&quot;,&nbsp;id);&nbsp;<br />id&nbsp;=&nbsp;read_LIS_register(GAIN_Z);&nbsp;//读取Z轴加速度增益&nbsp;<br />printf(&quot;&nbsp;0x%x&nbsp;&quot;,&nbsp;id);&nbsp;<br />write_LIS_register(CTRL_REG1,&nbsp;0xD7);&nbsp;//写CTRL_REG1工作状态,正常工作&nbsp;<br />id&nbsp;=&nbsp;read_LIS_register(CTRL_REG1);&nbsp;<br />printf(&quot;&nbsp;0x%x&nbsp;&quot;,&nbsp;id);&nbsp;<br />id&nbsp;=&nbsp;read_LIS_register(CTRL_REG2);&nbsp;//读取CTRL_REG2&nbsp;<br />printf(&quot;&nbsp;0x%x&nbsp;&quot;,&nbsp;id);&nbsp;<br /><br />LIS_read_x(&w);&nbsp;//读取X轴加速度&nbsp;<br />LIS_read_y(&w);&nbsp;//读取Y轴加速度&nbsp;<br />LIS_read_z(&w);&nbsp;//读取Z轴加速度&nbsp;<br />}&nbsp;<br /><br /><br />//读取X轴加速度&nbsp;<br />void&nbsp;LIS_read_x(unsigned&nbsp;int&nbsp;*x)&nbsp;<br />{&nbsp;<br />unsigned&nbsp;char&nbsp;low,&nbsp;high;&nbsp;<br /><br />low&nbsp;=&nbsp;read_LIS_register(0x28);&nbsp;<br />high&nbsp;=&nbsp;read_LIS_register(0x29);&nbsp;<br />//printf(&quot;&nbsp;0x%x&nbsp;&quot;,&nbsp;high);&nbsp;<br />*x&nbsp;=&nbsp;(((unsigned&nbsp;int)high)&lt&lt&nbsp;|&nbsp;low;&nbsp;<br />}&nbsp;<br /><br />//读取Y轴加速度&nbsp;<br />void&nbsp;LIS_read_y(unsigned&nbsp;int&nbsp;*y)&nbsp;<br />{&nbsp;<br />unsigned&nbsp;char&nbsp;low,&nbsp;high;&nbsp;<br /><br />low&nbsp;=&nbsp;read_LIS_register(0x2A);&nbsp;<br />high&nbsp;=&nbsp;read_LIS_register(0x2B);&nbsp;<br />*y&nbsp;=&nbsp;(((unsigned&nbsp;int)high)&lt&lt&nbsp;|&nbsp;low;&nbsp;<br />}&nbsp;<br /><br />//读取Z轴加速度&nbsp;<br />void&nbsp;LIS_read_z(unsigned&nbsp;int&nbsp;*z)&nbsp;<br />{&nbsp;<br />unsigned&nbsp;char&nbsp;low,&nbsp;high;&nbsp;<br /><br />low&nbsp;=&nbsp;read_LIS_register(0x2C);&nbsp;<br />high&nbsp;=&nbsp;read_LIS_register(0x2D);&nbsp;<br />*z&nbsp;=&nbsp;(((unsigned&nbsp;int)high)&lt&lt&nbsp;|&nbsp;low;&nbsp;<br />}&nbsp;<br /><br /><br /><br /><br />void&nbsp;read_LIS_x_y_z(unsigned&nbsp;int&nbsp;*x,&nbsp;unsigned&nbsp;int&nbsp;*y,&nbsp;unsigned&nbsp;int&nbsp;*z)&nbsp;<br />{&nbsp;<br />LIS_read_y(y);&nbsp;<br />LIS_read_z(z);&nbsp;<br />LIS_read_x(x);&nbsp;<br />}&nbsp;<br /><br />//===========================================================================&nbsp;<br />//&nbsp;No&nbsp;more.&nbsp;<br />//===========================================================================
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

47

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部