|
大家好!
我现在要用TI M3的GPIO来实现接收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),这种方式能实现吗? 如何实现?
|
|