佚名通过本文主要向大家介绍了stm8 gpio 高祖输入,树莓派gpio,gpio,gpio接口,gpio是什么意思等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:关于使用GPIO和CPLD通信的一个奇怪问题
描述:
我使用GPIO与CPLD之间通信,软件通过GPIO接口向CPLD写入命令后,CPLD执行。
有的命令是单板自身程序运行时就定时写入,比如点灯,有的命令是通过服务器端下达到子卡,子卡程序解析后,再向cpld中写入命令,比如复位命令或者其他命令,问题就是出在这里。
同一个命令,如果在telnet上直接输入这个命令,每次都可以执行成功,但是如果是在服务器上下达命令,然后在程序中解析并执行这个命令,就不一定能执行成功,而函数接口都是同一个。
还有一个现象,就是如果这个命令中包含有打印函数,比如我在命令函数中,执行具体写入GPIO之前先打印一条语句,在服务器上下达命令就可以每次都执行成功了。当然包含其他操作也可能可以,不过我没有测试。
第三个现象,如果在一个CPLD命令中,CPLD同时执行两个操作,比如点灯和复位。在telnet上输入命令时可以都正确执行,但是如果从服务器上下达命令,就只是点灯,复位就不执行。看起来好像是CPLD中的问题,但是为什么会受到软件打印函数的影响呢?
谁能帮我分析一下这个问题是怎么回事?谢谢了
解决方案1:
描述:
本帖最后由 jackydi 于 2014-06-30 16:02:40 编辑
gpio通信
这段时间遇到一个奇怪的问题,如下:我使用GPIO与CPLD之间通信,软件通过GPIO接口向CPLD写入命令后,CPLD执行。
有的命令是单板自身程序运行时就定时写入,比如点灯,有的命令是通过服务器端下达到子卡,子卡程序解析后,再向cpld中写入命令,比如复位命令或者其他命令,问题就是出在这里。
同一个命令,如果在telnet上直接输入这个命令,每次都可以执行成功,但是如果是在服务器上下达命令,然后在程序中解析并执行这个命令,就不一定能执行成功,而函数接口都是同一个。
还有一个现象,就是如果这个命令中包含有打印函数,比如我在命令函数中,执行具体写入GPIO之前先打印一条语句,在服务器上下达命令就可以每次都执行成功了。当然包含其他操作也可能可以,不过我没有测试。
第三个现象,如果在一个CPLD命令中,CPLD同时执行两个操作,比如点灯和复位。在telnet上输入命令时可以都正确执行,但是如果从服务器上下达命令,就只是点灯,复位就不执行。看起来好像是CPLD中的问题,但是为什么会受到软件打印函数的影响呢?
谁能帮我分析一下这个问题是怎么回事?谢谢了
解决方案1:
在shell下直接输入命令,命令运行在优先级是1的shell任务中。程序解析执行时,优先级可能比较低,命令可能会被打断,影响时序?
命令中有没有加关中断,开中断的保护啊?
时序问题?也许只是需要加一点点延时?打印程序起到延时作用