[求助]
求助ADS7843的驱动,愿出200元报酬
LM3S下使用SSI驱动ADS7843的代码,搞了3天了,还是没搞定,不知道问题出在哪里了
模拟的就算了,我一开始就做出来了,我想要的是硬件SPI模式的。
另外,也可以用ucos iii + LWIP来交换这个代码。LWIP目前还没有ucos iii下的移植版本哦
不知道大家对200元有什么意见没有
我说一下我使用的方法:
freescale模式,时钟极性为上升沿,在第一个时钟来到时采样,即使用的是SSI_FRF_MOTO_MODE_0
现象是,只要一读ADS7843,7843就没中断了,一定要重上电才行。断开SPI CLK就没这个现象
这个是我买TFT屏是卖家给的资料,我还没用过,希望对你有帮助。。。
3楼是用模拟的,模拟的我早就实现了,不好意思
不过还是谢谢
如果哪位有,请发上来,让大家共享,费用一定会支付的
应该是你的SSI的驱动有问题了,调整一下SSI配置参数试试看。
硬件SSI实现比软件模拟更简单的
[ 本帖最后由 azhiking 于 2012-4-27 17:39 编辑 ]
等会我把代码贴出来,所有的模式我都试过,都是不行的,除了SSI_FRF_MOTO_MODE_2以外,所有的模式都会导致7843读写一次后挂掉.但SSI_FRF_MOTO_MODE_2明显不对,而且读到的都是0
奇怪的是,我用STM32的硬件SPI是可以的,而且和LM3S同样的模式7843也不会挂
你可以用示波器看看波形,排除通讯时序上的问题,然后在找其他原因
基本确定这是TI的芯片BUG,请大家关注一下
下面两个图是STM32和LM3S的SPI对比图,大家看看有什么区别没有
唯一的区别就是,STM32的MOSI在空闲时是低电平,而LM3S确是高电平。
于是,我把模拟SPI改了一下,使之空闲时候是高电平,果然,ADS7843不响应
在手册上有以下语句:
SSIClk 被强制变为低电平
■ SSIFss 被强制变为高电平
■ 发送数据线 SSITx 被仲裁强制变为低电平
■ 当 SSI 配置为主机时,它将启用 SSIClk 管脚
■ 当 SSI 配置为从机时,它将禁用 SSIClk 管
英文:
英文:
■ SSIClk is forced Low
■ SSIFss is forced High
■ The transmit data line SSITx is arbitrarily forced Low
■ When the SSI is configured as a master, it enables the SSIClk pad
■ When the SSI is configured as a slave, it disables the SSIClk pad
现在大家可以去量一下,你初始化SPI之后MOSI是不是高电平,其实是高电平倒不要紧,我想大多数器件对此不敏感,但ADS7843就不同,它一定要低电平,这两个芯片可都是TI的啊。
初始化代码:
SSIDisable(SSI1_BASE);
GPIOPinConfigure(GPIO_PE2_SSI1RX);
GPIOPinConfigure(GPIO_PE3_SSI1TX);
GPIOPinTypeSSI (GPIO_PORTE_BASE, GPIO_PIN_2 | GPIO_PIN_3);
GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_2 , GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);
GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPD);
GPIOPinConfigure(GPIO_PH5_SSI1FSS);
GPIOPinConfigure(GPIO_PH4_SSI1CLK);
GPIOPinTypeSSI (GPIO_PORTH_BASE, GPIO_PIN_5);
GPIOPinTypeSSI (GPIO_PORTH_BASE, GPIO_PIN_4);
GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_4 | GPIO_PIN_5, GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);
SSIConfigSetExpClk(SSI1_BASE,SysCtlClockGet(),SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER,100000,8);
SSIEnable(SSI1_BASE);
static void write_spi (long cmd)
{
DWORD rcvdat;
SSIDataPut(SSI1_BASE, cmd);
SSIDataGet(SSI1_BASE, &rcvdat);
}
static unsigned char read_spi (void)
{
DWORD rcvdat;
SSIDataPut(SSI1_BASE, 0xff);
SSIDataGet(SSI1_BASE, &rcvdat);
return (unsigned char)rcvdat;
}
大家可以看看这样有问题没有
回复 11楼 big 的帖子
有时候SSIConfigSetExpClk(SSI1_BASE,SysCtlClockGet(),SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER,100000,8);
这个函数里面位速率那个参数设置得太高,SPI通信也不会成功的
我试过除10的,跟这个关系应该不大,因为模拟的时候mosi在空闲时为高都不行
回复 13楼 big 的帖子
GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPD);
这个为什么要设置为弱下拉呢?
这两个脚都设置成弱上拉不行吗?
回复 14楼 Study_Stellaris 的帖子
开始我也是设置成弱上拉的,后来看到STM32的MOSI是低电平,所以设成下拉看看,可空闲时候还是拉不下,这说明MOSI在空闲的时候是高电平,并不是高阻或低电平
回复 15楼 big 的帖子
今天上午用LM3S6911的SSI1测试了下读取ADS7834。可以正确读取坐标。不知道你那个是怎么回事
回复 16楼 zw357234798 的帖子
能否发你的代码给我看看,或者看我的是哪里出问题了?我的时序都分析出来了
如能发代码给我调试成功,我可以支付200元,直接淘宝交易
请在淘宝上开一个付款的,如果成功,付款200,没有的话付一百,我说到做到