频率不高

[复制链接]
933|17
手机看帖
扫描二维码
随时随地手机跟帖
xxrs|  楼主 | 2018-5-25 13:14 | 显示全部楼层 |阅读模式
在TD_Poll中仅有一个语句
PA4 = ~PA4,发现方波的频率只有两百多K,想问问大侠,这个频率能再高点么?
zwll| | 2018-5-25 14:47 | 显示全部楼层

你在做什么?

使用特权

评论回复
xxrs|  楼主 | 2018-5-25 14:52 | 显示全部楼层
实真正的问题是我在做一块GPIF控制的采集卡,但发现控制AD的信号频率太低

使用特权

评论回复
chuxh| | 2018-5-25 14:56 | 显示全部楼层

周期大于AD转换时间?

使用特权

评论回复
xxrs|  楼主 | 2018-5-25 15:01 | 显示全部楼层


是啊,采样频率始终上不去,只有一百多K

使用特权

评论回复
stly| | 2018-5-25 15:05 | 显示全部楼层
这个做过基于68013和Max115的数据采集卡交流下

使用特权

评论回复
dingy| | 2018-5-25 15:09 | 显示全部楼层
GPIF最快的例子是接硬盘,硬盘是有DSP处理器和缓存的,可以用DMA方式存取成块数据,这是GPIF的优势。

使用特权

评论回复
pengf| | 2018-5-25 15:15 | 显示全部楼层
如果你的采集卡上没有单独的处理器和存储器(如FIFO),那么MCU每次操作ADC,速度不会太高。

使用特权

评论回复
xxrs|  楼主 | 2018-5-25 15:19 | 显示全部楼层
用示波器看了下,CLKOUT是48MHz,晶振用的是24MHz

使用特权

评论回复
xxrs|  楼主 | 2018-5-25 15:24 | 显示全部楼层
另外初始化代码是:
CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);
Main函数中循环处代码:
while(TRUE)               // Main Loop
{
      if(GotSUD)            // Wait for SUDAV
      {
         SetupCommand();          // Implement setup command
         GotSUD = FALSE;            // Clear SUDAV flag
      }
      TD_Poll();
}
TD_Poll()函数代码:
void TD_Poll( void )
{
    PA4 = ~PA4;
}
实测了下,PA4输出方波只有352kHz,这个正常么?

使用特权

评论回复
xxrs|  楼主 | 2018-5-25 15:28 | 显示全部楼层
从Keil C中看汇编代码也才6条,按说48MHz时钟下应该不止这个频率的

使用特权

评论回复
liuzaiy| | 2018-5-25 15:35 | 显示全部楼层
352kHz,大致是2.8uS,不足3us,我觉得够快了,对一款51单片机来说,已经顶天了。

使用特权

评论回复
yinxiangh| | 2018-5-25 15:38 | 显示全部楼层

48M时钟,一个时钟周期(晶振频率)是21nS,2.8uS大致是134个时钟周期。
51单片机的一个机器周期包含12个时钟周期,那么134个时钟周期大致等于11个指令周期。

使用特权

评论回复
chenjunt| | 2018-5-25 15:44 | 显示全部楼层

我初步数了一下,上述程序是6条指令,12个指令字节,你查查指令集,可以算出来用了几个指令周期。

51大部分指令不是单周期指令,所以,估算差不多。

使用特权

评论回复
morrisk| | 2018-5-25 15:51 | 显示全部楼层
一个机器周期包含12个时钟周期,应该改为:一个指令周期包含12个时钟周期

使用特权

评论回复
kangzj| | 2018-5-25 15:55 | 显示全部楼层
时钟你也可以用IFCLK

使用特权

评论回复
xxrs|  楼主 | 2018-5-25 16:01 | 显示全部楼层

好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先

使用特权

评论回复
wsmysyn| | 2018-5-26 09:53 | 显示全部楼层
本帖最后由 wsmysyn 于 2018-5-26 10:06 编辑

这个片子是4T的8051,如果CPU用48MHz的话,实际相当于单个指令周期是12MHz的。。

从汇编代码看一共是5条指令(认为if条件不成立,实际每次循环执行的指令为5条)

JNB --> 4 cycles
LCALL --> 4 cycles
SJMP --> 3 cycles

(TD_Poll汇编指令2条)
CPL --> 2 cycles
RET --> 4 cycles

这样算起来执行一次循环是17 个cycles;  一个方波周期就是 34个cycles

12MHz / 34 ≈ 352.941kHz  

没错,非常符合你测到的频率

以前搞过这个片子,直接写机器码到SRAM里,,,
最快的指令就是,, CPL --> 2 cycles;  SJMP --> 3 cycles;
方波一周期需要10个 cycles;
12MHz / 10 = 1.2MHz

使用特权

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

本版积分规则

405

主题

7415

帖子

1

粉丝