[求助] 求助ADS7843的驱动,愿出200元报酬

big   2012-4-26 10:22 楼主

LM3S下使用SSI驱动ADS7843的代码,搞了3天了,还是没搞定,不知道问题出在哪里了

模拟的就算了,我一开始就做出来了,我想要的是硬件SPI模式的。

另外,也可以用ucos iii + LWIP来交换这个代码。LWIP目前还没有ucos iii下的移植版本哦

不知道大家对200元有什么意见没有

 

我说一下我使用的方法:

freescale模式,时钟极性为上升沿,在第一个时钟来到时采样,即使用的是SSI_FRF_MOTO_MODE_0

现象是,只要一读ADS7843,7843就没中断了,一定要重上电才行。断开SPI CLK就没这个现象

回复评论 (25)

我也不知道;没玩过呢

我也没玩过呢
点赞  2012-4-26 13:50

 

这个是我买TFT屏是卖家给的资料,我还没用过,希望对你有帮助。。。

点赞  2012-4-27 10:35
3楼 200元代码就这么贴出来了
点赞  2012-4-27 14:06

5楼 big 

3楼是用模拟的,模拟的我早就实现了,不好意思
不过还是谢谢
如果哪位有,请发上来,让大家共享,费用一定会支付的
点赞  2012-4-27 15:29
应该是你的SSI的驱动有问题了,调整一下SSI配置参数试试看。
硬件SSI实现比软件模拟更简单的

[ 本帖最后由 azhiking 于 2012-4-27 17:39 编辑 ]
点赞  2012-4-27 17:27

7楼 big 

等会我把代码贴出来,所有的模式我都试过,都是不行的,除了SSI_FRF_MOTO_MODE_2以外,所有的模式都会导致7843读写一次后挂掉.但SSI_FRF_MOTO_MODE_2明显不对,而且读到的都是0

奇怪的是,我用STM32的硬件SPI是可以的,而且和LM3S同样的模式7843也不会挂
点赞  2012-4-27 17:36
你可以用示波器看看波形,排除通讯时序上的问题,然后在找其他原因
点赞  2012-4-27 17:58

9楼 big 

基本确定这是TI的芯片BUG,请大家关注一下

下面两个图是STM32和LM3S的SPI对比图,大家看看有什么区别没有

唯一的区别就是,STM32的MOSI在空闲时是低电平,而LM3S确是高电平。

于是,我把模拟SPI改了一下,使之空闲时候是高电平,果然,ADS7843不响应

在手册上有以下语句:

SSIClk 被强制变为低电平
■ SSIFss 被强制变为高电平
■ 发送数据线 SSITx 被仲裁强制变为低电平
■ 当 SSI 配置为主机时,它将启用 SSIClk 管脚
■ 当 SSI 配置为从机时,它将禁用 SSIClk 管

英文:

  • LM3S.JPG
  • STM32.JPG
点赞  2012-4-28 02:15
英文:
■ 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的啊。
点赞  2012-4-28 02:18
初始化代码:
    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;
}

大家可以看看这样有问题没有
点赞  2012-4-28 02:20

回复 11楼 big 的帖子

有时候SSIConfigSetExpClk(SSI1_BASE,SysCtlClockGet(),SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER,100000,8);
这个函数里面位速率那个参数设置得太高,SPI通信也不会成功的
点赞  2012-4-28 09:27
我试过除10的,跟这个关系应该不大,因为模拟的时候mosi在空闲时为高都不行
点赞  2012-4-28 09:57

回复 13楼 big 的帖子

GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPD);
这个为什么要设置为弱下拉呢?
这两个脚都设置成弱上拉不行吗?
点赞  2012-4-28 14:43

回复 14楼 Study_Stellaris 的帖子

开始我也是设置成弱上拉的,后来看到STM32的MOSI是低电平,所以设成下拉看看,可空闲时候还是拉不下,这说明MOSI在空闲的时候是高电平,并不是高阻或低电平
点赞  2012-4-28 15:08

回复 15楼 big 的帖子

今天上午用LM3S6911的SSI1测试了下读取ADS7834。可以正确读取坐标。不知道你那个是怎么回事
点赞  2012-4-29 13:11

回复 16楼 zw357234798 的帖子

能否发你的代码给我看看,或者看我的是哪里出问题了?我的时序都分析出来了
点赞  2012-4-29 15:15
如能发代码给我调试成功,我可以支付200元,直接淘宝交易
点赞  2012-4-29 15:20
这里代码,希望能帮到你。
ADS7834.zip (1.19 KB)
(下载次数: 15, 2012-4-29 16:38 上传)
点赞  2012-4-29 16:38
请在淘宝上开一个付款的,如果成功,付款200,没有的话付一百,我说到做到
点赞  2012-4-29 16:49
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复