首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教  SPI 通信问题

设置CPHA=1时 出现的是8位转换不是16位转换了
CPHA是用于选择SPI的时钟相位的,并不是用于控制时钟连续或数据位数等。TLC2543的SPI通讯格式应该要求采用CPHA=0的方式,即用CS启动SPI通讯,用时钟的前沿同步数据。
海纳百川  有容乃大
可是每八个时钟就会有一个断续情况,对十六位数据数据传输有影响啊1

[此贴子已经被作者于2007-5-19 22:08:29编辑过]

[此贴子已经被作者于2007-5-19 22:08:44编辑过]

还是上次的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
请问一下我出错的问题在哪里??
你应该先将TLC2543的输入固定,使它产生固定的输出值,再来判断SPI通讯是否有问题。要仔细用示波器看一下各个信号,特别是CS与时钟信号之间的相位关系是否正确。
海纳百川  有容乃大
感谢版主,我试试
返回列表