打印
[Kinetis]

读书笔记/学习心得 2.飞思卡尔FRDM-KE02Z的FGPIO的调试,更新oled

[复制链接]
6569|43
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
motodefy|  楼主 | 2013-10-26 16:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 motodefy 于 2013-10-27 13:03 编辑

昨天装完了驱动···今天就开始跑例程了···
因为第一次接触飞思卡尔,先从简单的GPIO开始吧

载完程序,上示波器,发现确实是个10MHz的I/O翻转
速度为频率的一半,相当快,看看例程。

例程是这样写的
//config GPIO PTB2 as a general-purpose output
FGPIOA_PDDR |= (4<<8);
设置PTB2这个引脚为输出模式
//set PTB2 output 0
FGPIOA_PCOR = (4<<8);
设置为低电平
然后是个循环,翻转电平
FGPIOA_PTOR = 0x400;
FGPIOA_PTOR = 0x400;

GPIOA_PTOR = 0x400;
GPIOA_PTOR = 0x400;
这里有个问题,他写的程序里一直重复写了翻转好几次,是这样的


但是我去掉大部分只留下1句翻转后,频率就降下来了,到不了10M
多次尝试,发现在多次翻转以后会有一个大的时间的波形下降的过程,这个导致了示波器测出的频率不准确。
猜测应该是初始化定义引脚低电平时占用的时间。实际上FGPIO的翻转速度还是很快的。
用FGPIOA_PTOR = 0x400;翻转的话确实是GPIOA_PTOR = 0x400;速度的3倍左右。
然后看下各个寄存器的定义吧
Port Set Output Register (GPIOB_PSOR)  端口置高
Port Clear Output Register (GPIOB_PCOR)   端口置低
Port Toggle Output Register (GPIOB_PTOR) 端口数据输出寄存器
Port Data Input Register (GPIOB_PDIR) 端口切换,翻转
Port Data Direction Register (GPIOB_PDDR) 端口数据方向寄存器
Port Input Disable Register (GPIOB_PIDR)端口数据输入寄存器
FGPIO和GPIO是一样的
关于I/O口还是比较简单的,和之前用的M3大同小异,还是比较容易上手的,等会写个小程序试试
有问题大家多多交流啊:lol
数据手册
KE02_Reference_Manual_Rev.2.1.rar (3.37 MB)

晚上花了点时间移植了下oled的显示,用的3线的spi。I/O口模拟的,效果还不错















相关帖子

沙发
123de7| | 2013-10-26 20:45 | 只看该作者
看来,和STM32 有点一样啊  顶一个!!

使用特权

评论回复
板凳
KuMo_2011| | 2013-10-26 21:33 | 只看该作者



这是个问题呀,我是新手我也不知道,但有问题就问嘛。希望高手解答。

使用特权

评论回复
地板
motodefy|  楼主 | 2013-10-27 09:22 | 只看该作者
KuMo_2011 发表于 2013-10-26 21:33
这是个问题呀,我是新手我也不知道,但有问题就问嘛。希望高手解答。
...

我也不太清楚自己的理解对不对···求高手出现啊

使用特权

评论回复
5
YDCMAN| | 2013-10-27 19:39 | 只看该作者
写的不错,支持

使用特权

评论回复
6
KuMo_2011| | 2013-10-27 21:22 | 只看该作者
楼主有实物,学的果然快

使用特权

评论回复
7
FSL_TICS_Robin| | 2013-10-28 09:43 | 只看该作者
你可以看下这段代码的反汇编,FGPIOA_PTOR = 0x400;对应的汇编都是一条指令STR       R1, [R0, #0x4]
但是当程序执行到for(;;)循环底部那句FGPIOA_PTOR = 0x400;时,增加了一些汇编指令,所以执行时间较之前长了。




使用特权

评论回复
8
motodefy|  楼主 | 2013-10-28 11:48 | 只看该作者
FSL_TICS_Robin 发表于 2013-10-28 09:43
你可以看下这段代码的反汇编,FGPIOA_PTOR = 0x400;对应的汇编都是一条指令STR       R1, [R0, #0x4]
但是 ...

哦哦~多谢多谢,和我想的差不多,但是这样一解释瞬间清楚了

使用特权

评论回复
9
KuMo_2011| | 2013-10-28 12:07 | 只看该作者
motodefy 发表于 2013-10-28 11:48
哦哦~多谢多谢,和我想的差不多,但是这样一解释瞬间清楚了

解释的太模糊了吧,楼主懂了?能解释的白话一些吗?

使用特权

评论回复
10
KuMo_2011| | 2013-10-28 12:10 | 只看该作者
FSL_TICS_Robin 发表于 2013-10-28 09:43
你可以看下这段代码的反汇编,FGPIOA_PTOR = 0x400;对应的汇编都是一条指令STR       R1, [R0, #0x4]
但是 ...

是不是FGPIOA_PTOR = 0x400;越多误差越小?

使用特权

评论回复
11
motodefy|  楼主 | 2013-10-28 12:45 | 只看该作者
KuMo_2011 发表于 2013-10-28 12:10
是不是FGPIOA_PTOR = 0x400;越多误差越小?

额,可以这样理解,越多的话他在一个循环里面的时间久越久,在循环进行到末尾的时候要跳转到循环的第一句去,这时执行的是其他的汇编指令,要占用一段时间,再开始I/O的翻转的指令,这个时间引起了频率不准的问题。恩,就这样

使用特权

评论回复
12
KuMo_2011| | 2013-10-28 13:16 | 只看该作者
motodefy 发表于 2013-10-28 12:45
额,可以这样理解,越多的话他在一个循环里面的时间久越久,在循环进行到末尾的时候要跳转到循环的第一句 ...

用延时可不可以呢?

使用特权

评论回复
13
motodefy|  楼主 | 2013-10-28 13:22 | 只看该作者
KuMo_2011 发表于 2013-10-28 13:16
用延时可不可以呢?

延时不就时间更久频率更低了么···用的是FGPIO所以速度快,主频为20M,可以达到10M的翻转速度。

使用特权

评论回复
14
KuMo_2011| | 2013-10-28 13:26 | 只看该作者
motodefy 发表于 2013-10-28 13:22
延时不就时间更久频率更低了么···用的是FGPIO所以速度快,主频为20M,可以达到10M的翻转速度。 ...

同一条语句重复多次,也就是不变,不是同样等效于延时吗
既然用的那么多重复语句,按这么说,频率是不是也会受影响呢

使用特权

评论回复
15
motodefy|  楼主 | 2013-10-28 13:28 | 只看该作者
KuMo_2011 发表于 2013-10-28 13:26
同一条语句重复多次,也就是不变,不是同样等效于延时吗
既然用的那么多重复语句,按这么说,频率是不是 ...

额··这条语句的功能是I/O口电平翻转一次啊亲,执行一次,I/O翻转一次

使用特权

评论回复
16
KuMo_2011| | 2013-10-28 13:40 | 只看该作者
motodefy 发表于 2013-10-28 12:45
额,可以这样理解,越多的话他在一个循环里面的时间久越久,在循环进行到末尾的时候要跳转到循环的第一句 ...

哦,我一开始是认为这是一句翻转指令来着,不过不太确定(新手嘛),我是把上面这句话理解错了,好了,现在明白了,谢啦

使用特权

评论回复
17
motodefy|  楼主 | 2013-10-28 13:41 | 只看该作者
KuMo_2011 发表于 2013-10-28 13:40
哦,我一开始是认为这是一句翻转指令来着,不过不太确定(新手嘛),我是把上面这句话理解错了,好了,现 ...

:lol额,没事没事,大家多交流嘛

使用特权

评论回复
18
Singapour| | 2013-10-28 15:07 | 只看该作者
您好!我现在接触KL25Z的芯片不久,我想通过访问芯片的B端口引脚输入的高低电平来控制某一功能,就如: if(PORTB_PCR0)..... 在这之前我需要做些什么定义或是申明什么的?就是怎么样可以让这个条件控制语句有效?
求帮助啊,谢谢!

使用特权

评论回复
19
FSL_TICS_Robin| | 2013-10-28 16:11 | 只看该作者
Singapour 发表于 2013-10-28 15:07
您好!我现在接触KL25Z的芯片不久,我想通过访问芯片的B端口引脚输入的高低电平来控制某一功能,就如: if(PORT ...


刚入门的确是会遇到这种问题的,如果你使用CodeWarrior软件的Processor Expert 创建工程,那么只要简单配置就可以实现了。
你可以去看下这个帖子,介绍了PE创建GPIO的。
https://bbs.21ic.com/icview-627528-1-1.html

使用特权

评论回复
20
motodefy|  楼主 | 2013-10-28 16:56 | 只看该作者
Singapour 发表于 2013-10-28 15:07
您好!我现在接触KL25Z的芯片不久,我想通过访问芯片的B端口引脚输入的高低电平来控制某一功能,就如: if(PORT ...

如果是keil或者iar开发的话,如果要检测一个端口的状态,定义这个端口为输入模式然后就可判断了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

475

帖子

3

粉丝