GPIO灵活控制

[复制链接]
3400|46
isseed 发表于 2015-10-31 22:39 | 显示全部楼层
初始化之后才能操作。
zhuotuzi 发表于 2015-10-31 23:00 来自手机 | 显示全部楼层
蛮贵版主说的真好,原来还有.all这么个用法
 楼主| 清枫城主 发表于 2016-7-10 16:13 | 显示全部楼层
裁定心生 发表于 2015-10-31 17:02
可以,C++就有类似的操作。

问题是没学过C++ 只学过C语言 让后觉得51的控制容易掌握 所以想模拟出51的操作方式
 楼主| 清枫城主 发表于 2016-7-10 16:16 | 显示全部楼层
lwsn 发表于 2015-10-31 10:57
.all相当于P0  
.bit相当于P0.0

这个我知道  
但是如果我要控制某个器件  采用8位并行接口 51可以直接用P0或者P1等直接控制,那么DSP的引脚如果我没办法采用连续的8个引脚来控制的话,我该怎么处理?此时我想的就是任意找8个引脚模拟出51的P1模式。
 楼主| 清枫城主 发表于 2016-7-10 16:17 | 显示全部楼层
稳稳の幸福 发表于 2015-10-29 16:03
就像51操作一样,直接就是P0=com

我需要8个引脚,但是这8个引脚不连续,属于不同组的IO,这时就没办法直接用类似P0=COM的方法了
稳稳の幸福 发表于 2016-7-10 21:26 | 显示全部楼层
清枫城主 发表于 2016-7-10 16:17
我需要8个引脚,但是这8个引脚不连续,属于不同组的IO,这时就没办法直接用类似P0=COM的方法了 ...

应该可以吧,你通过一个宏定义来通过位的逻辑操作实现同时控制。
稳稳の幸福 发表于 2016-7-10 21:27 | 显示全部楼层
你可以定义一个宏或者一个函数,在这个函数体里面通过位的逻辑操作,来实现这个功能。因为操作时间间隔比较短,就跟同时操作一个连续端口是一样的效果。
 楼主| 清枫城主 发表于 2016-8-31 19:28 | 显示全部楼层
稳稳の幸福 发表于 2016-7-10 21:27
你可以定义一个宏或者一个函数,在这个函数体里面通过位的逻辑操作,来实现这个功能。因为操作时间间隔比较 ...

宏我不懂 但是通过一个函数 我倒是觉得可行 但是我调试时 发现要对相应的GPIO进行操作时失败 但是语法也不报错
GpioDataRegs.GPBDAT.bit.GPIO39 = dat&0x01;这句话没有错 但是调试时 结果好像是不行。
 楼主| 清枫城主 发表于 2016-9-1 12:26 | 显示全部楼层
zhangmangui 发表于 2015-10-25 22:50
.all就相当于你单片机中的P0啊    .bit就相当于你的P0.0
要整体操作   肯定就是.all = .all  & 0x*****     ...

关键是 如果我能用的GPIO没有在同一个组中 是随机的几个GPIO  那么我给数据就很麻烦了
 楼主| 清枫城主 发表于 2016-9-1 12:27 | 显示全部楼层
xujihu 发表于 2015-10-26 01:22
要在同一个端口上才能直接P0操作吧,如果是任意IO就用个函数,根据需要在函数里面操作相应IO; lcd_data(ui ...

你这思路跟我想的一样 但是你这样操作太过于麻烦了  整个子函数运行完耗时严重
 楼主| 清枫城主 发表于 2016-9-1 12:28 | 显示全部楼层
justtest111 发表于 2015-10-26 08:30
针对每个IO单独 位与 赋值就可以了啊。

这样麻烦 所以我想有没有什么办法可以一次性同时操作任意的几个GPIO
 楼主| 清枫城主 发表于 2016-9-1 12:29 | 显示全部楼层
shenmu2012 发表于 2015-10-26 19:44
相关寄存器的控制很重要的,注意配置的。

这个我知道  现在的问题是我要任意搭配GPIO进行数据的并行处理  好比我要控制一个TFT显示屏 他是8位数据线并行控制  但是我能用的GPIO确实分布在不同的组中 那么 我要如何可以一次性的给这8个IO同时幅值呢
 楼主| 清枫城主 发表于 2016-9-1 12:30 | 显示全部楼层
haolaishi 发表于 2015-10-26 22:36
可以的。可以用软件实现。把几个并为一个虚拟的IO组。

想法跟我一样 我正在调试   发现这样有问题
 楼主| 清枫城主 发表于 2016-9-1 12:30 | 显示全部楼层
haolaishi 发表于 2015-10-26 22:37
如果有类似M3的位带的功能的话,也可以实现的。

STM32没学过  所以关于M3的位带功能不清楚
zhangmangui 发表于 2016-9-1 22:12 | 显示全部楼层
清枫城主 发表于 2016-9-1 12:26
关键是 如果我能用的GPIO没有在同一个组中 是随机的几个GPIO  那么我给数据就很麻烦了 ...

那样就用.bit啊    然后写个函数   将要写的数传进去
然后分配给各自的bit啊
zhangmangui 发表于 2016-9-1 22:14 | 显示全部楼层
51那比如P1.1和P0.1不也不在一个组吗    这就相当于.bit
isseed 发表于 2016-9-3 11:09 | 显示全部楼层
使用宏定义是最简单的。
isseed 发表于 2016-9-3 11:10 | 显示全部楼层
宏定义可以节约这些步骤。
 楼主| 清枫城主 发表于 2016-9-19 17:27 | 显示全部楼层
zhangmangui 发表于 2016-9-1 22:12
那样就用.bit啊    然后写个函数   将要写的数传进去
然后分配给各自的bit啊  ...

嗯 我确实用着方法 但感觉效率不过高  
 楼主| 清枫城主 发表于 2016-9-19 17:28 | 显示全部楼层
isseed 发表于 2016-9-3 11:10
宏定义可以节约这些步骤。

宏定义只能针对一个IO吧 我要的是数个作为一组来操作
可否写一下让我看下  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部