[ZLG-ARM] 2131的SSP的SPI主机连24位的ADC LTC2440从机,接收32位的转换结果

[复制链接]
4460|6
 楼主| wjxwjx 发表于 2007-6-29 20:01 | 显示全部楼层 |阅读模式
ADC, LTC, spi, se, ST
我想用LPC2131的SSP使用SPI模式主机与24位的ADC&nbsp;LTC2440从机相连,接收32位的转换结果,接线方式如下:<br />&nbsp;&nbsp;LPC2131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LTC2440<br />&nbsp;&nbsp;&nbsp;SSEL1----------CS<br />&nbsp;&nbsp;&nbsp;SCK1-----------SCK<br />&nbsp;&nbsp;&nbsp;MISO1----------SDO<br />&nbsp;&nbsp;&nbsp;MOSI1----------SDI<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;当(cpol=0,cpha=0)时序与LTC2440的是相匹配的,但是在连续两帧传输时,接收一帧16位后,SSEL电平被拉高,这会中断LTC2440的传输,导致后面的32位结果的后16位接收不到,应该怎么办?&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />However,&nbsp;in&nbsp;the&nbsp;case&nbsp;of&nbsp;continuous&nbsp;back-to-back&nbsp;transmissions,&nbsp;the&nbsp;SSEL&nbsp;signal&nbsp;must&nbsp;be&nbsp;pulsed&nbsp;HIGH&nbsp;between&nbsp;each&nbsp;data&nbsp;word&nbsp;transfer.&nbsp;This&nbsp;is&nbsp;because&nbsp;the&nbsp;slave&nbsp;select&nbsp;pin&nbsp;freezes&nbsp;the&nbsp;data&nbsp;in&nbsp;its&nbsp;serial&nbsp;peripheral&nbsp;register&nbsp;and&nbsp;does&nbsp;not&nbsp;allow&nbsp;it&nbsp;to&nbsp;be&nbsp;altered&nbsp;if&nbsp;the&nbsp;CPHA&nbsp;bit&nbsp;is&nbsp;logic&nbsp;zero.&nbsp;Therefore&nbsp;the&nbsp;master&nbsp;device&nbsp;must&nbsp;raise&nbsp;the&nbsp;SSEL&nbsp;pin&nbsp;of&nbsp;the&nbsp;slave&nbsp;device&nbsp;between&nbsp;each&nbsp;data&nbsp;transfer&nbsp;to&nbsp;enable&nbsp;the&nbsp;serial&nbsp;peripheral&nbsp;data&nbsp;write.&nbsp;On&nbsp;completion&nbsp;of&nbsp;the&nbsp;continuous&nbsp;transfer,&nbsp;the&nbsp;SSEL&nbsp;pin&nbsp;is&nbsp;returned&nbsp;to&nbsp;its&nbsp;idle&nbsp;state&nbsp;one&nbsp;SCK&nbsp;period&nbsp;after&nbsp;the&nbsp;last&nbsp;bit&nbsp;has&nbsp;been&nbsp;captured.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;数据手册中说:两帧数据间CS必须拉高是因为当cpha=0时,从机选择针冻结了在串行外设寄存器中的数据而不允许改变.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;如果在接线时,不用LPC2131的SSEL1引脚功能而将其设置为&nbsp;I/O&nbsp;口控制LTC2440的CS,是不是会解决接收一帧16位后,SSEL电平被拉高因而中断LTC2440的传输的问题.<br /><br />还有一个问题,当SSP做主SPI时,数据手册上说只有FIFO中有数据才能启动发送,并同时接收从机数据,那样的话,主机是不是要一次写入2帧16位的数据才能接收到2帧16位的从机结果,<br />
 楼主| wjxwjx 发表于 2007-7-7 19:10 | 显示全部楼层

没有人知道吗

  
 楼主| wjxwjx 发表于 2007-7-7 19:30 | 显示全部楼层

关于FIFO

关于SSP部分的内容nxp的数据手册不如ST写的详细,ST关于FIFO是10字发送,10字接收,而且还有软件包
yyf196 发表于 2007-8-2 16:57 | 显示全部楼层

SPI好贴,顶起来

读多字节时,用SPI寄存器容易出错,建议你用I/O口模拟方式读。
zlgARM 发表于 2007-8-2 17:17 | 显示全部楼层

wjxwjx

您好:<br />&nbsp;&nbsp;&nbsp;&nbsp;直接使用硬件SPI是可以的,不需要IO模拟。楼主考虑把SSEL功能所在脚作GPIO用。手动产生ADC所需要的SSEL时序。
 楼主| wjxwjx 发表于 2007-8-5 22:43 | 显示全部楼层

zlgARM

首先感谢zlgARM的指点!<br /><br />我想确认一下SSP的SSEL引脚用作GPIO,你们做过测试没有?因为在数据手册中,关于SPIO部分有明确的说明<br /><br />“On&nbsp;the&nbsp;LPC213x&nbsp;(unlike&nbsp;earlier&nbsp;Philips&nbsp;ARM&nbsp;devices)&nbsp;the&nbsp;SSEL0&nbsp;pin&nbsp;can&nbsp;be&nbsp;used&nbsp;for&nbsp;a&nbsp;different&nbsp;function&nbsp;when&nbsp;the&nbsp;SPI0&nbsp;interface&nbsp;is&nbsp;only&nbsp;used&nbsp;in&nbsp;Master&nbsp;mode.&nbsp;For&nbsp;example,&nbsp;pin&nbsp;hosting&nbsp;the&nbsp;SSEL0&nbsp;function&nbsp;can&nbsp;be&nbsp;configured&nbsp;as&nbsp;an&nbsp;output&nbsp;digital&nbsp;GPIO&nbsp;pin&nbsp;and&nbsp;used&nbsp;to&nbsp;select&nbsp;one&nbsp;of&nbsp;the&nbsp;SPI0&nbsp;slaves.”<br /><br />但是关于SSP的部分确没有!<br /><br />另外我想知道SSP的关于“8-frame&nbsp;FIFOs&nbsp;for&nbsp;both&nbsp;transmit&nbsp;and&nbsp;receive”<br /><br />1、8-frame&nbsp;FIFOs是8帧*16位的还是8帧*8位的?<br /><br />2、8帧FIFO对于发送和接收是怎样分配的,4帧发送,4帧接收吗?<br /><br />3、在接收LTC2440的32数据时,我应该连写2帧16位数据到SSPDR,然后连读2次SSPDR得到结果,还是写1次16位,读1次得到16位结果,然后再写1次16位,再读一次得到另外的16位结果?<br /><br />
zlgARM 发表于 2007-8-6 06:25 | 显示全部楼层

wjxwjx

您好:<br />&nbsp;&nbsp;&nbsp;&nbsp;2131&nbsp;SPI0和SPI1的SSEL功能所在脚都可以用作GPIO。一旦明白了这一点,所有问题就简化为,如何用GPIO产生对方所需的时序。这样是否简单一点了?此外,能否作GPIO,您完全可以作个实验验证,不用担心会把芯片搞坏的。很多问题,如果找不到答案,可以自己动手作试验。我们不仅是芯片的学习者,也是芯片的研究者。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

36

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部