极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11870|回复: 2

求教!关于使用gpio模拟输出的问题

[复制链接]
发表于 2016-12-22 16:24:26 | 显示全部楼层 |阅读模式
我打算使用dsp F2812开发板来模拟XY2-100信号,XY2-100信号如下

但是模拟结果确实这样的,加了延时指令调了很久都有不能同时处于上升沿的情况

4个gpio口初始化是这样的
        GpioDataRegs.GPFCLEAR.bit.GPIOF2 = 1;
        GpioDataRegs.GPFCLEAR.bit.GPIOF0 = 1;
        GpioDataRegs.GPFCLEAR.bit.GPIOF3 = 1;
        GpioDataRegs.GPFCLEAR.bit.GPIOF1 = 1;

其中一个周期是这样的
        GpioDataRegs.GPFTOGGLE.bit.GPIOF2 = 1;
        GpioDataRegs.GPFDAT.bit.GPIOF0 = 1;
        GpioDataRegs.GPFDAT.bit.GPIOF3 = x_data.C2;
        GpioDataRegs.GPFDAT.bit.GPIOF1 = y_data.C2;
        Delay2();
        GpioDataRegs.GPFTOGGLE.bit.GPIOF2 = 1;
        Delay();

Delay函数中我写的是若干asm(" nop")。
求教高手指教一下如何才能保证不同gpio口能在同时处于一个上升沿或一个下降沿?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2016-12-23 10:49:24 | 显示全部楼层
本帖最后由 croma 于 2016-12-23 10:53 编辑

兩個方法~
第一種 對整個 Port  丟資料,簡單的說就是對存鎖器做邏輯運算,例如
P0 8個bit 現在的值是 0xFF,每個位元是一個腳位的信號,那麼把第0和第2腳位設定成低電位
P0 = P0 & 0xFA;
把第0和第2腳位設定成高電位
P0 = P0 | 0x05;
這樣你可以在一個指令內完成多個接腳的操作

第二種~ 其實我們根本不在乎信號有沒有同時上升下降(雖然說方法一這樣做比較省電,但是並不好閱讀),因為有同步的時脈訊號告訴對方資料準備好了沒有,所以只要在同步時脈發送前把資料準備好就行了,信號的延遲時間不要超過協定規定的時間就行了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-17 01:38 , Processed in 0.038973 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表