打印

3款 PIC32单片机 IO口最快翻转速度测试

[复制链接]
4940|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kqmhdd|  楼主 | 2012-6-24 21:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
需要PIC32的IO翻转作为CMOS的驱动时钟,分别对 PIC32的4系列,6系列和7系列三款单片的IO口翻转速度进行测试。
外部晶振8Mhz,2分频,然后20倍频,最终为80Mhz。测试方式为:
while(1)
{
PORTDINV = 0x0800;
PORTDINV = 0x0800;
PORTDINV = 0x0800;
PORTDINV = 0x0800;
PORTDINV = 0x0800;
PORTDINV = 0x0800;
PORTDINV = 0x0800;
}
示波器测试结果pic32mx795的io输出40Mhz方波,而另两款的只能输出5Mhz左右的方波。相同的代码,器件间差别为何有这么大?
请达人解答。
沙发
IJK| | 2012-6-25 14:38 | 只看该作者
这种情况不奇怪,应该是内核到外围接口的延迟造成的。
就象ARM的芯片,如果GPIO挂在APB总线就比较慢,而GPIO挂在AHB总线就比较快,但差别没达到8倍,差别一般是2倍。

使用特权

评论回复
板凳
kqmhdd|  楼主 | 2012-6-25 14:55 | 只看该作者
说不通啊,那为什么PIC32F795的器件翻转速度就能达到40MHz,这三款单片机的架构是十分类似的。

使用特权

评论回复
地板
yewuyi| | 2012-6-25 15:10 | 只看该作者
检查芯片时钟部分的设置是多少频率?

然后自己根据指令周期计算一下是否满足,如果不满足再查问题。

使用特权

评论回复
5
kqmhdd|  楼主 | 2012-6-25 15:31 | 只看该作者
系统时钟80Mhz。UART按80Mhz配置,验证是没有问题的。
系统时钟的配置如下:
#pragma config FPLLIDIV = DIV_2         // PLL Input Divider (2x Divider)
#pragma config FPLLMUL = MUL_20         // PLL Multiplier (20x Multiplier)
#pragma config FPLLODIV = DIV_1         // System PLL Output Divider


IO翻转的部分汇编为
                          PORTCINV = 0x2000;
9D000060  24102000   addiu       s0,zero,8192
9D000068  AE30609C   sw          s0,24732(s1)
76:                          PORTCINV = 0x2000;
9D00006C  AE30609C   sw          s0,24732(s1)
77:                          PORTCINV = 0x2000;
9D000070  AE30609C   sw          s0,24732(s1)
78:                          PORTCINV = 0x2000;
9D000074  AE30609C   sw          s0,24732(s1)
79:                          PORTCINV = 0x2000;
9D000078  AE30609C   sw          s0,24732(s1)
80:                          PORTCINV = 0x2000;
9D00007C  AE30609C   sw          s0,24732(s1)
81:                          PORTCINV = 0x2000;
9D000080  AE30609C   sw          s0,24732(s1)


也就是一条指令翻转一次,怎么算都不会是5Mhz的方波输出。最关键三款MCU的结果不一样。费解。

使用特权

评论回复
6
兰天白云| | 2012-6-26 08:48 | 只看该作者
4系列,6系列可能并没有跑到80M

使用特权

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

本版积分规则

0

主题

3

帖子

0

粉丝