📄 test.c
字号:
//用SPI读写AD7705,P4.2 STE1, P4.3 SIMO, P4.4 SOMI, P4.5 UCLK1, P4.6 DRDY
/*
AD7705寄存器
1:通信寄存器
DRDY RS2 RS1 RS0 R/W STBY CH1 CH0
DRDY:写操作时此位为0。
RS2、RS1、RS0:选择寄存器。000:通信寄存器; 001:设置寄存器; 010:时钟寄存器。
R/W:0写操作; 1读操作.
STBY:等待模式。0正常工作模式.
CH1 CH0:通道选择。
2:设置寄存器
MD1 MD0 G2 G1 G0 B/U BUF FSYNC
MD1 MD0:校准模式选择。00正常模式; 01自校准模式; 10 零刻度校准模式; 11全刻度校准模式.
G2 G1 G0:增益选择位。
B/U:单极性与双极性选择。0双极,1单极。
BUF:缓冲。1缓冲,0无缓冲。
FSYNC:同步过滤器。
3:时钟寄存器
ZER0 ZER0 ZER0 CLKDIS CLKDIV CLK FS1 FS0
ZER0:0必须写进该位,才能保证7705的运转正确。
CLKDIS:主时钟禁止位。"1"禁止MCLKOUT脚输出。
CLKDIV:时钟分频位。"1"主时钟二频; "0"不分频。
CLK:时钟位。2.4576M/4.9152M时对应CLK=1;1M/2M时对应CLK=0.
FS0 FS1:数据刷新选择位。应与CLK结合来决定数据刷新速度。
*/
#include<msp430x44x.h>
void init_SPI(void)
{
P4SEL|=0x38; //P4.3~5置位外围模块
P4DIR|=0x04; //P4.2输出模式
P4DIR&=0x40; //P4.6输入模式
ME2|=USPIE1; // 使能 USART0 SPI 模式
UTCTL1=CKPH+SSEL1+SSEL0+STC ; // 设置 SMCLK 和 3-pin 模式;
UCTL1=CHAR+SYNC+MM; //设置 8-bit 字符模式
UBR01=0x02; //设置波特率
UBR11=0x00;
UMCTL1=0x00; //波特率调整
IE2|=URXIE1; //使能接受中断
IFG2=0x00; //接受中断标志位清零
}
//将一个字节倒序的函数
unsigned char rearrange(unsigned char a)
{
unsigned char j;
unsigned char b;
b=a&0x01;
for(j=1;j<8;j++)
{
b=b<<1;
a=a>>1;
b=b+(a&0x01);
}
return b;
}
void send(unsigned char a)//向AD7705 写入一个字节的函数
{
TXBUF1=a;
while((UTCTL1&0x01)!=0x01); //等待直到没有数据发送
}
unsigned int readword(void) //从AD7705 读出两个字节的函数
{
unsigned char high8=0;
unsigned char low8=0;
unsigned int out=0;
P4DIR&=0x40;
while((P4IN&0x40)==0x00);
while(!IFG2);
high8=RXBUF1;
while(!IFG2);
low8=RXBUF1;
out=rearrange(high8);
out=out<<8;
out=out+rearrange(low8);
return out;
}
//对采样通道的初始化函数, 所有的控制数据均已倒序
void main(void)
{
WDTCTL=WDTHOLD+WDTPW;
init_SPI();
send(0x04);
send(0xf0);
send(0x08);
send(0x62);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -