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

[复制链接]
9126|22
 楼主| 1dqmoon 发表于 2008-1-31 21:51 | 显示全部楼层 |阅读模式
请大家推荐一款单片机,性能大概如下:<br />1.工作主频需要到30MHz以上<br />2.io口速度用下面的程序能够产生20MHz以上的方波<br /><br /><br /><br /><br />tt:<br />&nbsp;&nbsp;&nbsp;&nbsp;PORT_SET;<br />&nbsp;&nbsp;&nbsp;&nbsp;PORT_CLR;<br />......(很多个)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PORT_SET;<br />&nbsp;&nbsp;&nbsp;&nbsp;PORT_CLR;<br />goto&nbsp;tt;<br /><br /><br />这种测试方式可能不准,或者根本就不能说明什么,但我在实际应用的时候必须要这么用,请大家见谅<br /><br /><br />================<br /><br />目前我想找一款具有高速io的单片机,用io实现一种测量功能.用上面的程序我测试了几款单片机,数据如下<br /><br />单片机&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主频率&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO口方波频率<br />ATMEGA32L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12Mhz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6.xxMHz<br />HD64f3062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24Mhz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.xxMhz<br />STM32F103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;72Mhz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.xxMhz<br />S3C2410&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;208Mhz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.xxMhz<br /><br /><br /><br />我知道,不同编译器编译出来的代码,可能会造成io口方波速度的不一样,&nbsp;但上面的数据似乎差的也太远了吧...主频越低,io口速度反而越快<br />而且,类似arm这类单片机,io口输出的速度并没有想象中那么快,可能是硬件上的限制.&nbsp;<br /><br />至于STM32,&nbsp;IO口使用&nbsp;50Mhz的输出方式,也没有达到预计的目的.而且我也不是很明白这个50Mhz的意义.<br /><br /><br /><br />请大家推荐单片机,FPGA和CPLD暂时不能算在内,谢谢!<br />
phoenixmy 发表于 2008-1-31 21:53 | 显示全部楼层

知道的给讲讲

<br /><br />为啥gpio到不了比较高的速度??<br /><br />
王紫豪 发表于 2008-1-31 21:56 | 显示全部楼层

试试 nxp的 fast io

  
 楼主| 1dqmoon 发表于 2008-1-31 22:07 | 显示全部楼层

我的理解

GPIO是作为ARM核的一个部件,对其访问是通过寄存器控制来的,所以速度做不到很高
香水城 发表于 2008-1-31 22:11 | 显示全部楼层

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

关于I/O口的50MHz输出方式,是指I/O端口的驱动电路可通过50MHz的方波信号,输出信号的频率取决于程序,请看我在下面这个帖自中76楼的解释:<font color=#3366CC>STM32&nbsp;GPIO的十大优越功能综述</font>。<br /><br />STM32F103可以在I/O端口上产生最高18MHz的方波,如果把内部时钟直接输出可以达50MHz。<br /><br />你可以把你的测试程序发到ST&nbsp;MCU的版面上,我帮你看看哪里有问题。
 楼主| 1dqmoon 发表于 2008-1-31 22:27 | 显示全部楼层

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

先是设置为50mhz输出,然后是往IO口的数据寄存器里写数据.<br />当时测的时候,为了保证速度,我是特意直接往地址里送数据的,而不是用stm32自带的io库<br /><br />在STM32&nbsp;IO口十大功能那帖里我也回了,50Mhz是我理解上的错误.<br />程序需要等到明天才能发,不在现在的电脑里.<br /><br /><br /><br /><br /><br /><br />to&nbsp;&nbsp;&nbsp;王紫豪<br /><br />刚才看了lpc的io口方式,确实和其他arm芯片不一样,直接将io口挂在了总线上.<br />大哥能不能帮忙试一下,看看能产生多高频率的方波?
香水城 发表于 2008-1-31 22:32 | 显示全部楼层

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

“为了保证速度,我是特意直接往地址里送数据的,而不是用stm32自带的io库”,这点也很重要,但不知是否考虑了编译器的效应:下面这个帖子的实验就是个很好的例子:<font color=#000080>STM32的代码,跑在ram里快?还是跑在flash里快?</font>
xwj 发表于 2008-1-31 23:25 | 显示全部楼层

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

不用这样写代码来以空间换时间,<br />速度估计谁都比不过<br />
zalin 发表于 2008-1-31 23:46 | 显示全部楼层

可以看看AVR32的UC3系列

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

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

个人验证,仅作参考<br />平台EVK1100,芯片UC3A0512<br />工作频率66Mhz,方波输出33Mhz<br />#include&nbsp;&quot;gpio.h&quot;<br />#include&nbsp;&quot;compiler.h&quot;<br /><br />volatile&nbsp;avr32_gpio_t&nbsp;*gpio&nbsp;=&nbsp;(volatile&nbsp;avr32_gpio_t*)&nbsp;&AVR32_GPIO;<br />&nbsp;<br />int&nbsp;main(void)<br />{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;volatile&nbsp;avr32_gpio_port_t&nbsp;*gpio_port&nbsp;=&nbsp;<br />&nbsp;(volatile&nbsp;avr32_gpio_port_t&nbsp;*)&nbsp;&gpio-&gtport[1/32];<br />&nbsp;&nbsp;gpio_port-&gtoders&nbsp;=&nbsp;(1&lt&lt(1%32));&nbsp;<br />&nbsp;&nbsp;gpio_port-&gtgpers&nbsp;=&nbsp;(1&lt&lt(1%32));<br />&nbsp;&nbsp;&nbsp;__asm__&nbsp;__volatile__&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;ld.w&nbsp;&nbsp;r9,r7[-4]
        &quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;mov&nbsp;&nbsp;&nbsp;r8,0
        &quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;orh&nbsp;&nbsp;&nbsp;r8,0x2000
        &quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;while&nbsp;(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__asm__&nbsp;__volatile__&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;st.w&nbsp;&nbsp;r9[92],r8
        &quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;……<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;……<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;st.w&nbsp;&nbsp;r9[92],r8
        &quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;}<br />}<br />&quot;st.w&nbsp;&nbsp;r9[92],r8
        &quot;翻转状态,单周期<br />板上验证通过
pumac 发表于 2008-2-2 09:08 | 显示全部楼层

maxii的cpld吧

我也是选了N个单片机也没找到高速io的,还是maxii容易解决这个问题,而且便宜
xzm0662 发表于 2008-2-2 10:41 | 显示全部楼层

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

我就不信stm32io有这么慢。<br />str711还可以用到5M多,我实测过
nj手术刀 发表于 2008-2-2 12:27 | 显示全部楼层

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

  
zkr 发表于 2008-2-2 15:41 | 显示全部楼层

结构问题

ARM7/9内核的GPIO控制器一般是挂在APB上边的。ARM&nbsp;Core要用STR访问的时候,要过一堆逻辑,到AHB,过Bridge,到APB,然后才能写进去数据,中间有额外的等待周期很正常。这个在数据手册的芯片结构里很容易看到。<br /><br />NXP的IO速度能快是因为FastGPIO把外设寄存器挂在了Core的LocalBus上,自然速度比较快。好像是能到3周期的。<br /><br />以上两个以前有人测试过的。可以搜索一下。<br /><br />STM的Cortex&nbsp;M3的结构没有看过,不知道Core的结构什么样。这个硬件上的延迟是没有办法避免的。
 楼主| 1dqmoon 发表于 2008-2-2 19:59 | 显示全部楼层

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

因为对STM32并不是特别熟悉,所以在现有程序改动来的,频率设置是那个程序中的,我没做改动.<br />我所说的对地址操作,是直接定义某个端口的地址,然后望这个地址上送数.就是类似<br />#define&nbsp;PORT&nbsp;*((volatile&nbsp;unsigned&nbsp;*)0x40100c00)<br />这样的方式来访问的<br /><br /><br /><br /><br />to&nbsp;fudanking:<br />你的那个程序是在环境下编译的?&nbsp;我想试试看
drentsi 发表于 2008-2-3 11:10 | 显示全部楼层

这种搞法纯粹是钻牛角尖

要实现这么个方波,方法非常多,关键看用多少钱来实现.<br />最便宜的是CPLD,<br />可以在一个20元的CPLD上做一个PICOBLAZE软核单片机,跑80MHZ,IO口可以输出40MHZ的方波,但是这个单片机程序空间只有256条或者1024条,对于一般的简单应用绰绰有余.
fudanking 发表于 2008-2-3 12:08 | 显示全部楼层

在AVR32studio

1dqmoon<br />在AVR32studio下编译的
tage 发表于 2008-2-11 19:40 | 显示全部楼层

不是单片机干的活

  
wangkj 发表于 2008-2-11 20:48 | 显示全部楼层

普通io是不可能的

  
hotpower 发表于 2008-2-11 21:14 | 显示全部楼层

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

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

本版积分规则

63

主题

253

帖子

0

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