自己参考自己以前在其它的LM3S芯片上写的程序,稍微改动一下就可以。其实TI的LM3S的存储结构都一言,甚至引脚的硬件的功能也一样,只是版本越高芯片的功能越多。学好LM3S811在学其它高版本的LM3S的芯片上手也很快的。在LM3S811板子上写的程序。串口是自己焊个板子,接出两条线就可以了,也很简单。
#include<includes.h>
#include"uart_send.h"
#include"delay.h"
#include"VI2C_LM3S101.h"
#define IIC_Write 0x1D
#define IIC_Read 0x1D
#define LED_PERIPH SYSCTL_PERIPH_GPIOC
#define LED_BASE GPIO_PORTC_BASE
#define LED_PIN GPIO_PIN_6
#define UARTPutC(x) UARTCharPut(UART0_BASE,x)
uint8 test[]={"MMA7455测试成功。"};
uint8 kaishi[]={"开始接收X,Y,Z轴的数据"};
uint8 Re_x[]={"测试到的X轴上的数据:"};
uint8 Re_y[]={"测试到的Y轴上的数据:"};
uint8 Re_z[]={"测试到的Z轴上的数据:"};
char x,y,z;
uint8 reci[1]={0};
void Sys_Init();
void self_test7455();
void iic_write_Fini(uint8 addr,uint8 data);
uint8 iic_read_Fini(uint8 addr);
void sendx();
void sendy();
void sendz();
int main()
{
Sys_Init();
usart_init();
self_test7455();
delay_ms(100);
iic_write_Fini(0x10,0x15);
iic_write_Fini(0X12,0X25);
iic_write_Fini(0x14,0x10);
delay_ms(100);
// UARTSend(kaishi,sizeof(kaishi));
while(1)
{
x=iic_read_Fini(0x06);
y=iic_read_Fini(0x07);
z=iic_read_Fini(0x08);
delay_ms(100);
// UARTSend(Re_x,sizeof(Re_x));
sendx();
delay_ms(100);
UARTPutC('\n');
// UARTSend(Re_y,sizeof(Re_y));
sendy();
delay_ms(100);
UARTPutC('\n');
// UARTSend(Re_z,sizeof(Re_z));
sendz();
delay_ms(100);
UARTPutC('\n');
}
}
void Sys_Init()
{
SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_XTAL_8MHZ|SYSCTL_OSC_MAIN|SYSCTL_USE_OSC);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB|SYSCTL_PERIPH_GPIOC);
// SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);
// GPIOPinTypeI2C(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1);
// I2CMasterInit(I2C_MASTER_BASE,false);
GPIODirModeSet(GPIO_PORTB_BASE, SDA | SCL, GPIO_DIR_MODE_OUT); /* 配置相关引脚为I2C操作 */
GPIOPadConfigSet(GPIO_PORTB_BASE, SDA | SCL, /* 配置I2C的端口模式 */
GPIO_STRENGTH_4MA,
GPIO_PIN_TYPE_STD);
GPIODirModeSet(LED_BASE,LED_PIN,GPIO_DIR_MODE_OUT);
GPIOPadConfigSet(LED_BASE,LED_PIN,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
GPIOPinWrite(LED_BASE,LED_PIN,LED_PIN);
}
void self_test7455()
{
uint8 data;
// uint8 *ss;
delay_us(10);
iic_write_Fini(0x16,0x01);
// delay_us(200);
iic_read_Fini(0x16);
// while(!retu1);
if(reci[0]==0x01)
{
GPIOPinWrite(LED_BASE,LED_PIN,~LED_PIN);
delay_us(100);
// UARTSend(test,sizeof(test));
}
}
void iic_write_Fini(uint8 addr,uint8 data)
{
uint8 t,retu;
//int retu;
t=(IIC_Write<<1);
ISendStr(t,addr,&data,1);
//while(!retu);
}
uint8 iic_read_Fini(uint8 addr)
{
uint8 rt,retu1;
rt=(IIC_Read<<1);
retu1=IRcvStr(rt,addr,reci,1);
while(!retu1);
return(reci[0]);
}
void sendx()
{
uint8 x1,x2,x3;
// char x;
// x=iic_read_Fini(0x06);
if((x&0x80)==0x00)
{
// xsign=0x2b; //+
UARTPutC('+');
}
else
{
//xsign=0x2d; //-
UARTPutC('-');
x=x-0x01;
x=~x;
}
x1=(x/15);
x2=((x*100/15)%100)/10;
x3=(x*100/15)%10;
UARTPutC('X');
UARTPutC(x1+0x30);
delay_us(100);
UARTPutC(0x2E);
delay_us(100);
UARTPutC(x2+0x30);
delay_us(100);
UARTPutC(x3+0x30);
}
void sendy()
{
char y1,y2,y3;
// y=iic_read_Fini(0x07);
if((y&0x80)==0x00)
{
// xsign=0x2b; //+
UARTPutC('+');
}
else
{
//xsign=0x2d; //-
UARTPutC('-');
y=y-0x01;
y=~y;
}
y1=(y/15);
y2=((y*100/15)%100)/10;
y3=(y*100/15)%10;
UARTPutC('Y');
UARTPutC(y1+0x30);
delay_us(100);
UARTPutC(0x2E);
delay_us(100);
UARTPutC(y2+0x30);
delay_us(100);
UARTPutC(y3+0x30);
delay_us(100);
}
void sendz()
{
// char z;
uint8 z1,z2,z3;
// z=iic_read_Fini(0x08);
if((z&0x80)==0x00)
{
// xsign=0x2b; //+
UARTPutC('+');
}
else
{
//xsign=0x2d; //-
UARTPutC('-');
z=z-0x01;
z=~z;
}
z1=(z/15);
z2=((z*100/15)%100)/10;
z3=(z*100/15)%10;
UARTPutC('Z');
UARTPutC(z1+0x30);
delay_us(100);
UARTPutC(0x2E);
delay_us(100);
UARTPutC(z2+0x30);
delay_us(100);
UARTPutC(z3+0x30);
delay_us(100);
} |