df890724 发表于 2019-5-27 08:32
你也可以把与SPI相关的程序完整的贴出来,我这儿也有CC2530和ADS1118,如果有时间的话可以调一下。
另外,我建议你点击一下你问题左下角的“编辑标签“,并加入ADS1118和SPI,然后保存。这样以后其他人遇到类似问题,以ADS1118和SPI为关键字进行检索,可以检索的你的这一篇。重在分享么,我是这么 ...
我的代码是这样子写的:
#define SSN P1_3
#define MISO P1_7
#define MOSI P1_6
#define SCLK P1_5
uint8 voltage[4]=[0,0,0,0];
uint8 counter = 0;
void InitialUBARTSPI(void)//初始化SPI
[
//引脚绑定设置
PERCFG |=0x02;//选择UBART1作为SPI模式
P1SEL |=0xE0;//P1_7,P1_6,P1_5
P1SEL &=~0x08;//P1_3为通用IO口(SSN)
P1DIR |=0x08;//SSN的方向设为输出
//SCLK频率设置,设置波特率11520,U1BAUD_M=216,U1GCR_E=11,波特率115200
U1BAUD = 0xD8;
U1GCR |= 0x0B;
//操作模式,设置为Master模式
U1CSR &= ~0xA0;
//配置CPOL与CPHA,ADS1118要求CPOL=0,CPHA=1
U1GCR &=~0x80;
U1GCR |=0x40;
//配置传输先后顺序,ADS1118要求先传高再传低
U1GCR |=0x20;
//设置P1_7中断模式
P1DIR &=~0x80;
P1IEN |=0x080;//使能P1_7中断
PICTL |= 0x02; //下降沿触发
IEN2 |=0x10;//端口1中断使能
P1IFG &= ~0x80;
EA = 1;//开启所有的中断
]
#pragma vector = P1INT_VECTOR
__interrupt void P1_ISR(void)
[
P1IFG &=~0x80;//清除中断标志
voltage[counter] = U1DBUF;
counter++;
if(counter>3)
counter =0;
P1IF = 0;
]
void InitialADS(void)//初始化ADS1118,写入默认的0x8583
[
uint8 cmd[4]=[0x85,0x83,0x85,0x83];
//拉低SSN,片选信号使能
SSN = 0;
//写入命令字初始化ADS1118工作方式
while(!U1TX_BYTE);
for(int i=0;i<4;i++)//写入两次命令字
[
U1DBUF = cmd
;
while(!U1TX_BYTE);
U1TX_BYTE =0;//清除状态字
]
SSN = 1;
]
void StartConvert(void)//启动转换,写入命令字0xD593
[
uint8 cmd[8]=[0xD5,0x83,0xD5,0x83];
//拉低SSN,片选信号使能
SSN = 0;
//写入命令字初始化ADS1118工作方式
for(int i=0;i<4;i++)//写入命令字,0xD5,0xE2
[
U1DBUF = cmd;
while(!U1TX_BYTE);
U1TX_BYTE = 0;
]
SSN = 1;
]