8655|7

19

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

GPIO挂载到AHB总线上的疑问 [复制链接]

各位坛友大家好,我三天前拿到TM4C 123G H6PM这个板子,因为要做一个无线传图的东西,其中要驱动摄像头,需要较快的IO变换速度。现在遇到一些疑问,希望大神能够提供帮助。
主要问题,就是IO口的翻转速度太慢。我对培训视频的理解是,如果将IO口外设挂载到高速总线上,则IO的翻转和CPU内核是同步的,即使挂载到低速总线上,翻转速度至少也是主频的一半。
当我把时钟配置到80M,主函数大循环只做一件事,就是翻转IO口电平,代码如下:
SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);


SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_1 );

while(1)
{
    GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_1,2);
    GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_1,0);

}
在示波器上观察IO口输出的波形,发现频率仅仅只有2.3Mhz。即使考虑到库函数的一些效率损失,则最少也应该有20M以上的翻转速度啊。
有知道的大神吗?求给一个建议。

最新回复

使能函数这么用对吗?头文件中是这样定义SysCtlGPIOAHBEnable的[attach]248655[/attach]   详情 回复 发表于 2016-7-15 16:34
 
点赞 关注

回复
举报

164

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
首先,你得明白M4内核1条指令周期等于3条机器周期,所以一条指令周期是80M/3=26.6M,然后,你没挂在AHB总线上,所以26.6M/2=13.3M,然后,你一高一低两条指令,所以13.3/2=6.66M。剩下的问题应该在库函数上了,你调用一条库函数,库函数里不一定只有1条指令。我试了GPIO的翻转速度是3.8M。。
你可以用PWM模块驱动的呀。。我试了10M,20M都可以,就是高频时候波形有明显失真。
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
Linchpin 发表于 2014-8-30 22:08
首先,你得明白M4内核1条指令周期等于3条机器周期,所以一条指令周期是80M/3=26.6M,然后,你没挂在AHB总线 ...

谢谢指点! 那把它挂在到AHB总线上应该怎么修改?即使这样,翻转速度也只有7.2M左右是嘛?有什么办法能让IO口反转速度达到20M以上呢?
 
 
 

回复

164

帖子

0

TA的资源

一粒金砂(中级)

4
 
calom1992 发表于 2014-8-30 22:15
谢谢指点! 那把它挂在到AHB总线上应该怎么修改?即使这样,翻转速度也只有7.2M左右是嘛?有什么办法能让 ...

SysCtlGPIOAHBEnable(GPIO_PORTC_BASE);//挂在AHB高性能总线上

方法我上面已经说了吧。用PWM驱动,别用IO口
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

5
 
Linchpin 发表于 2014-8-30 22:37
SysCtlGPIOAHBEnable(GPIO_PORTC_BASE);//挂在AHB高性能总线上

方法我上面已经说了吧。用PWM驱动,别 ...

谢谢!用pwm驱动不是智能输出pwm波嘛?我要自己控制高低电平,不是pwm波哦。
 
 
 

回复

110

帖子

0

TA的资源

一粒金砂(中级)

6
 
Linchpin 发表于 2014-8-30 22:37
SysCtlGPIOAHBEnable(GPIO_PORTC_BASE);//挂在AHB高性能总线上

方法我上面已经说了吧。用PWM驱动,别 ...

刚好看到这个帖子,试了一下,IO口的反转速度没什么改善啊,还是2.2多M
下面是测试程序:
void main(void) {
        SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
        SysCtlGPIOAHBEnable(SYSCTL_PERIPH_GPIOB);

        GPIOPinTypeGPIOOutput(GPIO_PORTB_AHB_BASE, GPIO_PIN_1);
        while(1)
        {
                GPIOPinWrite(GPIO_PORTB_AHB_BASE,GPIO_PIN_1,2);
                GPIOPinWrite(GPIO_PORTB_AHB_BASE,GPIO_PIN_1,0);
        }
}
不知道哪里写错了,还请指点一下~

 
 
 

回复

110

帖子

0

TA的资源

一粒金砂(中级)

7
 
calom1992 发表于 2014-8-30 23:05
谢谢!用pwm驱动不是智能输出pwm波嘛?我要自己控制高低电平,不是pwm波哦。

液晶屏一般用驱动芯片刷吧…还是说想要不会闪屏?
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(中级)

8
 
Linchpin 发表于 2014-8-30 22:37
SysCtlGPIOAHBEnable(GPIO_PORTC_BASE);//挂在AHB高性能总线上

方法我上面已经说了吧。用PWM驱动,别 ...

使能函数这么用对吗?头文件中是这样定义SysCtlGPIOAHBEnable的
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表