[ZLG-ARM] 串口扩展芯片SC16IS752的SPI驱动接口问题

[复制链接]
4817|2
 楼主| lightrainy 发表于 2007-4-10 10:01 | 显示全部楼层 |阅读模式
我在LPC2214上使用该芯片,但出现了一些问题,现象描述如下:不论我向芯片的寄存器写入什么数据,读到的一直是0或者0xFF,从示波器的波形看,波形很工整,没发现有什么问题,以下是我的代码,请帮忙看看<br /><br /><br />void&nbsp;SPIInit(&nbsp;INT8U&nbsp;ch&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;if(&nbsp;ch&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;else&nbsp;if(&nbsp;ch&nbsp;==&nbsp;1&nbsp;)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置&nbsp;P0.17~20&nbsp;为&nbsp;SPI&nbsp;功能<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1&nbsp;=&nbsp;(&nbsp;PINSEL0&nbsp;&&nbsp;0xFFFFFC03&nbsp;)&nbsp;|&nbsp;0x00002A8;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置片选(P1.18)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PINSEL2&nbsp;&=&nbsp;0xFFFFFFF7;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO1DIR&nbsp;&nbsp;|=&nbsp;1&lt&lt18;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO1SET&nbsp;&nbsp;=&nbsp;1&lt&lt18;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;S1PCCR&nbsp;=&nbsp;12;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;时钟分频<br />&nbsp;&nbsp;&nbsp;&nbsp;S1PCR&nbsp;=&nbsp;0x20;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;CPHA&nbsp;=&nbsp;0&nbsp;&nbsp;&nbsp;CPOL&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIWrite(&nbsp;1,&nbsp;SC16IS752IPW_LCR,&nbsp;0x80);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIWrite(&nbsp;1,&nbsp;SC16IS752IPW_DLL,&nbsp;0x0C);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIWrite(&nbsp;1,&nbsp;SC16IS752IPW_DLH,&nbsp;0x00);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIWrite(&nbsp;1,&nbsp;SC16IS752IPW_LCR,&nbsp;0xBF);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIWrite(&nbsp;1,&nbsp;SC16IS752IPW_EFR,&nbsp;0X10);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIWrite(&nbsp;1,&nbsp;SC16IS752IPW_LCR,&nbsp;0x03);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIWrite(&nbsp;1,&nbsp;SC16IS752IPW_FCR,&nbsp;0x06);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIWrite(&nbsp;1,&nbsp;SC16IS752IPW_FCR,&nbsp;0x01);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />INT8U&nbsp;SPISend(&nbsp;INT8U&nbsp;ch,&nbsp;INT8U&nbsp;data&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;ret;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;ch&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(&nbsp;ch&nbsp;==&nbsp;1&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S1PDR&nbsp;=&nbsp;data&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(&nbsp;(S1PSR&nbsp;&&nbsp;0x80)&nbsp;==&nbsp;0&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;S1PDR&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;<br />}<br /><br />/*<br />&nbsp;*&nbsp;从SPI接口读入数据<br />&nbsp;*/<br />INT8U&nbsp;SPIRead(&nbsp;INT8U&nbsp;ch,&nbsp;INT8U&nbsp;reg&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;ret;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR&nbsp;=&nbsp;1&lt&lt18;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPISend(&nbsp;ch,&nbsp;reg&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;SPISend(&nbsp;ch,&nbsp;0&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET&nbsp;=&nbsp;1&lt&lt18;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;<br />}<br /><br />/*<br />&nbsp;*&nbsp;写入数据至SPI接口<br />&nbsp;*/<br />void&nbsp;SPIWrite(INT8U&nbsp;ch,&nbsp;INT8U&nbsp;reg,&nbsp;INT8U&nbsp;data&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1CLR&nbsp;=&nbsp;1&lt&lt18;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPISend(&nbsp;ch,&nbsp;reg&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;SPISend(&nbsp;ch,&nbsp;data&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO1SET&nbsp;=&nbsp;1&lt&lt18;<br />}<br /><br /><br />void&nbsp;&nbsp;TaskSPI(&nbsp;void&nbsp;*pdata&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;buf[10];<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIInit(&nbsp;1&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[0]&nbsp;=&nbsp;UART4RegRead(&nbsp;SC16IS752IPW_LCR&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[1]&nbsp;=&nbsp;UART4RegRead(&nbsp;SC16IS752IPW_DLL&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[3]&nbsp;=&nbsp;UART4RegRead(&nbsp;SC16IS752IPW_DLH&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[4]&nbsp;=&nbsp;UART4RegRead(&nbsp;SC16IS752IPW_LSR&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[5]&nbsp;=&nbsp;UART4RegRead(&nbsp;SC16IS752IPW_IER&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[6]&nbsp;=&nbsp;UART4RegRead(&nbsp;SC16IS752IPW_IIR&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(&nbsp;10&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />
 楼主| lightrainy 发表于 2007-4-10 11:01 | 显示全部楼层

少了2个函数

#define&nbsp;SC16IS752IPW_REG_READ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x80<br />#define&nbsp;SC16IS752IPW_REG_WRITE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00<br /><br />#define&nbsp;SC16IS752IPW_CHL_A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00<br />#define&nbsp;SC16IS752IPW_CHL_B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x01<br /><br />void&nbsp;UART4RegWrite(&nbsp;INT8U&nbsp;reg,&nbsp;INT8U&nbsp;value&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;r0;<br />&nbsp;&nbsp;&nbsp;&nbsp;r0&nbsp;=&nbsp;SC16IS752IPW_REG_WRITE&nbsp;+&nbsp;SC16IS752IPW_CHL_A&nbsp;+&nbsp;reg&lt&lt3&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIWrite(&nbsp;1,&nbsp;r0,&nbsp;value&nbsp;);<br />}<br /><br />INT8U&nbsp;UART4RegRead(&nbsp;INT8U&nbsp;reg&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;r0;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;ret;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;r0&nbsp;=&nbsp;SC16IS752IPW_REG_READ&nbsp;+&nbsp;SC16IS752IPW_CHL_A&nbsp;+&nbsp;reg&lt&lt3&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;SPIRead(&nbsp;1,&nbsp;r0&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;<br />}<br />
zlgARM 发表于 2007-4-10 19:02 | 显示全部楼层

lightrainy

&nbsp;&nbsp;&nbsp;&nbsp;如果该芯片是在我们公司购买的,可以直接致电我们的技术支持。如果芯片量大,可以联系我们的销售,直接获得例程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

23

帖子

0

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