请教 SPI 通信问题
- UID
- 161144
- 性别
- 男
|
设置CPHA=1时 出现的是8位转换不是16位转换了 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
CPHA是用于选择SPI的时钟相位的,并不是用于控制时钟连续或数据位数等。TLC2543的SPI通讯格式应该要求采用CPHA=0的方式,即用CS启动SPI通讯,用时钟的前沿同步数据。 |
|
|
|
|
|
- UID
- 161144
- 性别
- 男
|
可是每八个时钟就会有一个断续情况,对十六位数据数据传输有影响啊1
[此贴子已经被作者于2007-5-19 22:08:29编辑过]
[此贴子已经被作者于2007-5-19 22:08:44编辑过] |
|
|
|
|
|
- UID
- 161144
- 性别
- 男
|
还是上次的TLC2543的SPI通讯.经过我调试上回对了 可过几天我在用又出问题了
我是用SPI口三个口即SCK MISO MOSI 和一个通用I/O口作为片选信号
我在SPI中断中加入片选 即读完16位数据后给一个片选高电平后延时10us再给个低电平
SPI设置为如下:
SPI0BR=0x27;
SPI0CR2=0X00;
SPI0CR1=0Xd0;
SPI0DR=0x0c;
为什么我读的16位数据不准确 有变话而且在改变延时后输出的电压值变化不同有时候是以16为一个单位递增
我读数据函数如下:
interrupt void SPI_interrupt(void){
AD=SPI0SR; //读状态寄存器
SPI0DR=0X0C; //发送寄存器付值
AD[i++]=SPI0DR; //分两次读接收数据
if(i>=2){ //如果接收到16位
i=0;
recdata=((AD[0]<<4)&0x0ff0)|((AD[1]>>4)&0x000f); //转换为12位数据
PORTB_BIT0=1; //控制片选信号
delay_10us();
PORTB_BIT0=0;
}
}
我用的是HCS12DG128
请问一下我出错的问题在哪里?? |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
你应该先将TLC2543的输入固定,使它产生固定的输出值,再来判断SPI通讯是否有问题。要仔细用示波器看一下各个信号,特别是CS与时钟信号之间的相位关系是否正确。 |
|
|
|
|
|
- UID
- 161144
- 性别
- 男
|
|
|
|
|
|