呵呵,这个题目比较有挑战。
也许可以做到,但可能会占用不少资源。
可以尝试使用定时器的TRIG触发DMA,用DMA传送一个只有2个单元的数组到GPIO,这2个单元分别包含对应GPIO的0和1。初始化DMA时,需要检查一下输入信号的极性,如果是"1",则DMA数组的第1个单元为"0",第2个单元为"1";如果输入信号的初始极性是"0",则DMA数组的第1个单元为"1",第2个单元为"0";然后配置DMA为循环模式,这样每次触发DMA传送时,就会间隔地输出"0"和"1"至指定的I/O端口。
在定时器端,只需要配置定时器的CH1和CH2分别为上升沿和下降沿捕获,这样TI1FP1和TI2FP2会分别在输入信号的上升沿和下降沿产生信号,然后产生TRIG输出至DMA。
下面2张图可以帮助理解:
|