打印

请推荐一款具有高速io功能的单片机

[复制链接]
7094|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1dqmoon|  楼主 | 2008-1-31 21:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请大家推荐一款单片机,性能大概如下:
1.工作主频需要到30MHz以上
2.io口速度用下面的程序能够产生20MHz以上的方波




tt:
    PORT_SET;
    PORT_CLR;
......(很多个)

    PORT_SET;
    PORT_CLR;
goto tt;


这种测试方式可能不准,或者根本就不能说明什么,但我在实际应用的时候必须要这么用,请大家见谅


================

目前我想找一款具有高速io的单片机,用io实现一种测量功能.用上面的程序我测试了几款单片机,数据如下

单片机         主频率       IO口方波频率
ATMEGA32L     12Mhz             6.xxMHz
HD64f3062     24Mhz             2.xxMhz
STM32F103     72Mhz             1.xxMhz
S3C2410       208Mhz            1.xxMhz



我知道,不同编译器编译出来的代码,可能会造成io口方波速度的不一样, 但上面的数据似乎差的也太远了吧...主频越低,io口速度反而越快
而且,类似arm这类单片机,io口输出的速度并没有想象中那么快,可能是硬件上的限制. 

至于STM32, IO口使用 50Mhz的输出方式,也没有达到预计的目的.而且我也不是很明白这个50Mhz的意义.



请大家推荐单片机,FPGA和CPLD暂时不能算在内,谢谢!

相关帖子

沙发
phoenixmy| | 2008-1-31 21:53 | 只看该作者

知道的给讲讲



为啥gpio到不了比较高的速度??

使用特权

评论回复
板凳
王紫豪| | 2008-1-31 21:56 | 只看该作者

试试 nxp的 fast io

使用特权

评论回复
地板
1dqmoon|  楼主 | 2008-1-31 22:07 | 只看该作者

我的理解

GPIO是作为ARM核的一个部件,对其访问是通过寄存器控制来的,所以速度做不到很高

使用特权

评论回复
5
香水城| | 2008-1-31 22:11 | 只看该作者

楼主能说说你是如何测试STM32F103的

关于I/O口的50MHz输出方式,是指I/O端口的驱动电路可通过50MHz的方波信号,输出信号的频率取决于程序,请看我在下面这个帖自中76楼的解释:STM32 GPIO的十大优越功能综述

STM32F103可以在I/O端口上产生最高18MHz的方波,如果把内部时钟直接输出可以达50MHz。

你可以把你的测试程序发到ST MCU的版面上,我帮你看看哪里有问题。

使用特权

评论回复
6
1dqmoon|  楼主 | 2008-1-31 22:27 | 只看该作者

程序是和我上面提到的方式一样

先是设置为50mhz输出,然后是往IO口的数据寄存器里写数据.
当时测的时候,为了保证速度,我是特意直接往地址里送数据的,而不是用stm32自带的io库

在STM32 IO口十大功能那帖里我也回了,50Mhz是我理解上的错误.
程序需要等到明天才能发,不在现在的电脑里.






to   王紫豪

刚才看了lpc的io口方式,确实和其他arm芯片不一样,直接将io口挂在了总线上.
大哥能不能帮忙试一下,看看能产生多高频率的方波?

使用特权

评论回复
7
香水城| | 2008-1-31 22:32 | 只看该作者

关键是你的I/O模块的驱动频率有多快

“为了保证速度,我是特意直接往地址里送数据的,而不是用stm32自带的io库”,这点也很重要,但不知是否考虑了编译器的效应:下面这个帖子的实验就是个很好的例子:STM32的代码,跑在ram里快?还是跑在flash里快?

使用特权

评论回复
8
xwj| | 2008-1-31 23:25 | 只看该作者

建议BF531,BF533,还可以0开销循环

不用这样写代码来以空间换时间,
速度估计谁都比不过

使用特权

评论回复
9
zalin| | 2008-1-31 23:46 | 只看该作者

可以看看AVR32的UC3系列

从手册上看,AVR32的ST指令只需要1个CPU时钟,而且UC3系列的端口寄存器也映射到了CPU的局部总线,也就是说访问端口寄存器只需要1个CPU时钟,这样端口的输出频率能达到CPU时钟的1/2,不过这只是猜测,没有经过验证。
而NXP有fast io功能的,虽然也同样将端口寄存器也映射到了CPU的局部总线,但ARM7的ST指令需要2个CPU时钟,所以端口的输出频率能只能达到CPU时钟的1/4,STM的估计也是由于这个限制只能输出最高18MHz的方波。
如果楼主只是需要产生一个连续或一定数量的脉冲,是否可以使用如SPI这些串行硬件来产生呢?这样的话有好多芯片能够达到你的要求

使用特权

评论回复
10
fudanking| | 2008-2-1 14:19 | 只看该作者

UC3验证,个人验证,仅作参考

个人验证,仅作参考
平台EVK1100,芯片UC3A0512
工作频率66Mhz,方波输出33Mhz
#include "gpio.h"
#include "compiler.h"

volatile avr32_gpio_t *gpio = (volatile avr32_gpio_t*) &AVR32_GPIO;
 
int main(void)
{   
  volatile avr32_gpio_port_t *gpio_port = 
 (volatile avr32_gpio_port_t *) &gpio->port[1/32];
  gpio_port->oders = (1<<(1%32)); 
  gpio_port->gpers = (1<<(1%32));
   __asm__ __volatile__ (
                       "ld.w  r9,r7[-4] "
                     "mov   r8,0 "
                     "orh   r8,0x2000 "
                     );
   while (1)
   {
          __asm__ __volatile__ (
                     "st.w  r9[92],r8 "
                     ……
                                               ……
                     "st.w  r9[92],r8 "
                      );
   }
}
"st.w  r9[92],r8 "翻转状态,单周期
板上验证通过

使用特权

评论回复
11
pumac| | 2008-2-2 09:08 | 只看该作者

maxii的cpld吧

我也是选了N个单片机也没找到高速io的,还是maxii容易解决这个问题,而且便宜

使用特权

评论回复
12
xzm0662| | 2008-2-2 10:41 | 只看该作者

不知楼主怎么设置stm32的主时钟和pclk的

我就不信stm32io有这么慢。
str711还可以用到5M多,我实测过

使用特权

评论回复
13
nj手术刀| | 2008-2-2 12:27 | 只看该作者

AT91SAM7S256,48M书MCLK,高优化,反相IO一次66ns左右

使用特权

评论回复
14
zkr| | 2008-2-2 15:41 | 只看该作者

结构问题

ARM7/9内核的GPIO控制器一般是挂在APB上边的。ARM Core要用STR访问的时候,要过一堆逻辑,到AHB,过Bridge,到APB,然后才能写进去数据,中间有额外的等待周期很正常。这个在数据手册的芯片结构里很容易看到。

NXP的IO速度能快是因为FastGPIO把外设寄存器挂在了Core的LocalBus上,自然速度比较快。好像是能到3周期的。

以上两个以前有人测试过的。可以搜索一下。

STM的Cortex M3的结构没有看过,不知道Core的结构什么样。这个硬件上的延迟是没有办法避免的。

使用特权

评论回复
15
1dqmoon|  楼主 | 2008-2-2 19:59 | 只看该作者

我的程序是在UARTDemo2(8M-2 uart)基础上改的

因为对STM32并不是特别熟悉,所以在现有程序改动来的,频率设置是那个程序中的,我没做改动.
我所说的对地址操作,是直接定义某个端口的地址,然后望这个地址上送数.就是类似
#define PORT *((volatile unsigned *)0x40100c00)
这样的方式来访问的




to fudanking:
你的那个程序是在环境下编译的? 我想试试看

使用特权

评论回复
16
drentsi| | 2008-2-3 11:10 | 只看该作者

这种搞法纯粹是钻牛角尖

要实现这么个方波,方法非常多,关键看用多少钱来实现.
最便宜的是CPLD,
可以在一个20元的CPLD上做一个PICOBLAZE软核单片机,跑80MHZ,IO口可以输出40MHZ的方波,但是这个单片机程序空间只有256条或者1024条,对于一般的简单应用绰绰有余.

使用特权

评论回复
17
fudanking| | 2008-2-3 12:08 | 只看该作者

在AVR32studio

1dqmoon
在AVR32studio下编译的

使用特权

评论回复
18
tage| | 2008-2-11 19:40 | 只看该作者

不是单片机干的活

使用特权

评论回复
19
wangkj| | 2008-2-11 20:48 | 只看该作者

普通io是不可能的

使用特权

评论回复
20
hotpower| | 2008-2-11 21:14 | 只看该作者

用固件库操作IO显然不公平~~~

使用特权

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

本版积分规则

63

主题

253

帖子

0

粉丝