Edwardwei 发表于 2014-10-13 17:24:54

我把P1的8个口作为液晶的并行数据口,但硬件SPI口也在P1上

单片机是STC12C5410AD,我把NRF的4个SPI口也接在了P1的4个硬件SPI上了,可以利用程序的方法使两者不干扰吗?否则只能在其他IO口上用软件SPI了

wkman 发表于 2014-10-13 17:26:40

外部SPI器件的 CS 用别的io就行了 {:shocked:}

pigy0754 发表于 2014-10-13 17:28:39

自古二楼出真相{:lol:}

Edwardwei 发表于 2014-10-13 17:34:14

wkman 发表于 2014-10-13 17:26
外部SPI器件的 CS 用别的io就行了

这样的话,也是硬件SPI么,我看IO口描述里有SPI的CS口,那就是说其实可以连其他的么,只要MISO,MOSI,SCK是连在指定的IO口上?

yoghourt 发表于 2014-10-13 17:37:49

SPI的CS不用P1上的IO口就可以了嘛

Edwardwei 发表于 2014-10-13 18:16:06

yoghourt 发表于 2014-10-13 17:37
SPI的CS不用P1上的IO口就可以了嘛

试了下,不行额,我把液晶插上,液晶显示到没问题,但是SPI不能用,NRF检测错误。

yoghourt 发表于 2014-10-13 18:29:43

CS都没选中,SPI那边应该不能操作啊

xiayuan 发表于 2014-10-13 18:31:48

Edwardwei 发表于 2014-10-13 18:16
试了下,不行额,我把液晶插上,液晶显示到没问题,但是SPI不能用,NRF检测错误。 ...

这个在启动SPI的时候要重新配置SPI,使用IO口的时候重新配置IO口吧

Edwardwei 发表于 2014-10-13 18:32:04

yoghourt 发表于 2014-10-13 18:29
CS都没选中,SPI那边应该不能操作啊

我把CS放到其他IO口上了啊,我还试了把SCK,MISO,MOSI放在其他口上,可以运行,但是放在P1上,SPI就不行了

Edwardwei 发表于 2014-10-13 18:35:58

yoghourt 发表于 2014-10-13 18:29
CS都没选中,SPI那边应该不能操作啊

忘记说了,我还没有用硬件SPI来做,因为之前有在8952上用软件SPI做过,所以直接移植过来用的。

Edwardwei 发表于 2014-10-13 18:36:24

xiayuan 发表于 2014-10-13 18:31
这个在启动SPI的时候要重新配置SPI,使用IO口的时候重新配置IO口吧

忘记说了,我还没有用硬件SPI来做,因为之前有在8952上用软件SPI做过,所以直接移植过来用的。

xiayuan 发表于 2014-10-13 18:41:40

你可以先把液晶部分功能关掉,只是用SPI功能,查看是否出错。确定一下是否是因为端口复用引起的

Edwardwei 发表于 2014-10-13 18:55:33

xiayuan 发表于 2014-10-13 18:41
你可以先把液晶部分功能关掉,只是用SPI功能,查看是否出错。确定一下是否是因为端口复用引起的 ...

不是,我没有用硬件SPI功能,而是把那三个IO口当做普通IO口用,用软件SPI通信

xiayuan 发表于 2014-10-13 19:30:45

Edwardwei 发表于 2014-10-13 18:55
不是,我没有用硬件SPI功能,而是把那三个IO口当做普通IO口用,用软件SPI通信 ...

我的意思是,P1口不用做液晶数据口,仅仅用来做SPI的功能,把两种功能分开调试,如果这样还是不正常的话那么就是电路或者程序的问题,跟P1口用不用做液晶数据口就没有关系。

eleqian 发表于 2014-10-13 19:34:03

软件SPI就随便找几个其他口,硬件SPI需要用把CS放其他口上,在CS是高电平时从设备IO是高阻态没影响,要用SPI时软件拉低CS脚,基本不影响传输速度。

Edwardwei 发表于 2014-10-13 19:53:02

xiayuan 发表于 2014-10-13 19:30
我的意思是,P1口不用做液晶数据口,仅仅用来做SPI的功能,把两种功能分开调试,如果这样还是不正常的话 ...

我去掉了液晶程序,用LED灯指示,把SPI口还是放在P1上,然后运行可以正常连接,但是把液晶插上后,就不行了

xiayuan 发表于 2014-10-13 20:11:11

在液晶的数据口加一片锁存器

Edwardwei 发表于 2014-10-13 20:44:24

xiayuan 发表于 2014-10-13 20:11
在液晶的数据口加一片锁存器

算了,加锁存太麻烦,我还是把液晶的那三个接口换下,因为所有的AD口都在P1上,以后要用AD的话还是会有问题

xiayuan 发表于 2014-10-13 21:19:06

Edwardwei 发表于 2014-10-13 20:44
算了,加锁存太麻烦,我还是把液晶的那三个接口换下,因为所有的AD口都在P1上,以后要用AD的话还是会有问 ...

如果IO口够用的话的确没必要这样做,数据口复用最好加锁存

Edwardwei 发表于 2014-10-13 21:58:28

xiayuan 发表于 2014-10-13 21:19
如果IO口够用的话的确没必要这样做,数据口复用最好加锁存

我是在一个很小的洞洞板上做的,没有位置去放锁存的,几乎是没有其他空间了。
不过我刚刚试了试,发现把CS放其他口,SPI不动,然后每次写完液晶后把P1口全置1,发现可以用了,但是奇怪的是,如果开头运行LCD初始化,SPI就不能工作,但是去掉那个初始化,不断电下载程序(LCD没断电,还保存初始化的配置),可以完美运行显示,怎么写液晶都行,就是不能在开头运行LCD初始化。所以如果断电,就要加上初始化下载后,再去掉初始化不断电下载。。。。 我快错乱了。。。

lizengmao 发表于 2014-10-13 22:31:04

是不是LCM锁住IO了?修改LCM的CS或者rst脚的电位看看

yoghourt 发表于 2014-10-14 09:22:32

Edwardwei 发表于 2014-10-13 18:35
忘记说了,我还没有用硬件SPI来做,因为之前有在8952上用软件SPI做过,所以直接移植过来用的。 ...

CS无效时,直接忽略SPI线上的变化就好了啊

yoghourt 发表于 2014-10-14 09:27:49

Edwardwei 发表于 2014-10-13 18:32
我把CS放到其他IO口上了啊,我还试了把SCK,MISO,MOSI放在其他口上,可以运行,但是放在P1上,SPI就不行了 ...

那可能是其他方面的原因。

xiayuan 发表于 2014-10-14 18:42:44

Edwardwei 发表于 2014-10-13 21:58
我是在一个很小的洞洞板上做的,没有位置去放锁存的,几乎是没有其他空间了。
不过我刚刚试了试,发现把C ...

你的P1口有没有配置啊,那个单片机IO口有配置寄存器

digitaltek 发表于 2014-10-14 21:23:37

也要控制液晶屏的cs

baoya1 发表于 2014-10-14 23:03:44

CS口的时序对了就行,但注意这些程序不要并行

Edwardwei 发表于 2014-10-15 23:34:36

xiayuan 发表于 2014-10-14 18:42
你的P1口有没有配置啊,那个单片机IO口有配置寄存器

所有IO口默认就是准双向口,应该没有必要配置。而且我也运行成功了,就是只要程序开有LCD的初始化,SPI就有问题了,这个问题我就搞不懂了。初始化程序又不能不加。。。
最后我还是把那三个口换成其他三个口了,然后把液晶的程序改了一下,运行OK。这三个口以后还得用作AD口,毕竟所有AD口都在P1上。。
页: [1]
查看完整版本: 我把P1的8个口作为液晶的并行数据口,但硬件SPI口也在P1上