GPIO模拟SLAVE SPI

2019-03-24 12:31发布

大家好!
           我现在要用TI M3的GPIO来实现接收SPI上的数据,SPI的格式如下:
SPI格式 SPI格式
主机SPI信号描述: 在SYN_EN保持低电平的期间,SYN_DATA发送24bit数据。时钟SYN_CLK为4.5MHZ
我现在板子上的硬件是这样的,SYN_EN信号连在LMS2793的GPIOE_0上,SYN_CLK直接连在GPIOE_1上,SYN_DATA直接连在GPIOE_2上。
我想用中断的方式来实现:
第一步初始化:用内部时钟16MHZ,将GPIOE_0,GPIOE_1和GPIOE_2设置为GPIO,都定义为输入信号,3个输入信号都内部设置为上拉,.
第二步定义中断:设置GPIOE_0(SYN_EN)为下降沿检测,打开GPIOE端口中断,开始等中断;
第三步调用中断程序:即当检测到SYN_EN信号,即GPIOE_0信号有下降沿时,调用中断程序SPI_ISR,在中断程序中如果检测到GPI0E_1为高且GPIOE_0为低同时成立时,读取GPIOE_2上的数据,延迟一定时间后,再去重复23次判断GPIOE_0为高和GPIOE_0为低同时成立,读取GPIO_2上的数据,这样就能读出完成的24bit SYN_DATA数据。
我现在几个问题: 1.我在第二步中打开GPIOE端口的中断后,应该是GPIOE口的8个PIN脚中的任意一个有下降沿(假设不是GPIOE_0 PIN脚),应该都会触发中断,这样是不是会带来误判。
                              2.在弟三步中,每读取一次GPIOE_2上的值,都要延迟一定的时间,这个时间怎么去精确的设置呢? 假设如果这个延迟时间太短,会在一个SYN_CLK的高电平期间,会重复的读取GPIOE_2上的值;如果延迟时间太长,会漏掉GPIOE_2上的一些值。
                              3.  如果我不去考虑这个延迟的话,我能不能在SPI_ISR中再嵌套一个中断,即检测到GPIOE_0下降沿后,调用SPI_ISR, 在SPI_ISR中断子程序中去检测GPIOE_1上的上升沿,如果检测到,则调用另外一个中断程序Read_value,在Read_value中去读GPIOE_2上的值。  因为这几个信号都在同一个GPIO断(GPIOE),这种方式能实现吗? 如何实现? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
Li_Lei
1楼-- · 2019-03-24 17:55
< 1:通过设置某一个io触发中断,不能全中断
2:你应该结合时钟做逻辑,时钟的边沿检测数据和移位,脱离时钟就没逻辑了
3:如2..
yangsheng0328
2楼-- · 2019-03-24 21:53
< :TI_MSP430_内容页_SA7 --> 我发现有GPIO模拟SLAVE SPI,GPIO读取速度没有那么快,我听从网上的建议,还是用M3专用的SPI接口,将其配为8bit,当接收FIFO里面有数据时,连续读取3次。我用两种方式实现:
1. 当检测的FIFO里面有数据时,对FIFO连续的读取3次,此时读出来的值为接收到的24bit的前8bit,后来连续2次读的结果都是0;
2. 当检测到FIFO里面有数据时,对FIFO读取一次,之后等待再次检测到FIFO里面有数据,再对FIFO读取一次数据,这样子重复3次,但是这样出来的结果是对应于3个24bit数据的前8bit数据。
这两种方法我都无法完成对一个24bit的数据完全读出来。各位大侠还有没有其他法子?
谢谢!

[ 本帖最后由 yangsheng0328 于 2013-6-4 12:09 编辑 ]

一周热门 更多>

相关问题

    相关文章