搜索
bottom↓
回复: 62

[测试][共享][2008-7-21 Updated]AVR32 端口控制扩展支持库——支持Local Bus

[复制链接]

出0入296汤圆

发表于 2008-7-18 23:36:02 | 显示全部楼层 |阅读模式

>>扩展支持库说明

    AVR32官方通过Software Framework为我们提供了一套标准的硬件驱动。我们可以
不必像AVR那样事必躬亲的从每一个寄存器开始配置硬件资源。ATMEL希望我们通过他们
提供的硬件API函数,将用户的注意力集中到开发上来。然而,函数的封装一方面实现
了用户工程与地层硬件的关联,一方面降低了用户对硬件操作的能力和效率。就拿通
用IO口来说,如果我们想让某一个端口输出高电平,则只需要调用函数:

/*假设我们想在PA10上输出高电平*/
gpio_enable_gpio_pin(AVR32_PIN_PA10); //告诉AVR32,我们要使用GPIO的普通IO输出功能
gpio_set_gpio_pin(AVR32_PIN_PA10);    //在PA10上输出高电平

这样的API可能和我们以前的习惯不同,也许下面的代码更符合我们的习惯
EN_PA(10) = TRUE;                     //告诉AVR32,我们要开启GPIO的普通输出功能
DDR_PA(10) = PDIR_OUT;                //设置端口为输出
_PA(10) = HIGH;                       //在PA10上输出高电平

或者
PA.PEN |= PA10;
PA.DDR |= PA10;
PA.PORT |= PA10;

这些代码看似功能相同,实则效率要更高一些。也更符合我们的习惯。为了支持这样的
操作,我编写了下面的函数库。


>>扩展支持库下载

    该压缩包包含了对官方Software Framework的支持,直接解压缩到您的工程既可。
    点击此处下载 ourdev_354431.rar(文件大小:7K) (原文件名:SOFTWARE_FRAMEWORK.rar)


>>测试工程下载

    [测试工程]  GPIO 闪烁测试
    [硬件平台]  AVR32 UC3A0512ES  EVK1100(百特版)
    [工程下载]  点击此处下载 ourdev_354432.rar(文件大小:466K) (原文件名:DebugTest.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入296汤圆

 楼主| 发表于 2008-7-18 23:36:27 | 显示全部楼层

>>使用方法


1、端口
    AVR32 UC3系列一般每个端口都是32个引脚,当然X口除外。该扩展库会自动根据
io.h中的描述,定义可以使用的端口。比如,如果存在PA口,那么使用的时候,PA口
就是端口号。我们约定用  "Px"来表示端口号。


2、端口的结构
   端口实际上一个结构体,其定义在avr32\gpio_100.h中有定义(或者是gpio_110.h)
你可以直接通过我们上面约定的端口来访问这个结构体的成员。
typedef struct avr32_gpio_port_t {
          unsigned long                  gper      ;//0x0000
          unsigned long                  gpers     ;//0x0004
          unsigned long                  gperc     ;//0x0008
          unsigned long                  gpert     ;//0x000c
          unsigned long                  pmr0      ;//0x0010
          unsigned long                  pmr0s     ;//0x0014
          unsigned long                  pmr0c     ;//0x0018
          unsigned long                  pmr0t     ;//0x001c
          unsigned long                  pmr1      ;//0x0020
          unsigned long                  pmr1s     ;//0x0024
          unsigned long                  pmr1c     ;//0x0028
          unsigned long                  pmr1t     ;//0x002c
          unsigned int                   :32       ;//0x0030
          unsigned int                   :32       ;//0x0034
          unsigned int                   :32       ;//0x0038
          unsigned int                   :32       ;//0x003c
          unsigned long                  oder      ;//0x0040
          unsigned long                  oders     ;//0x0044
          unsigned long                  oderc     ;//0x0048
          unsigned long                  odert     ;//0x004c
          unsigned long                  ovr       ;//0x0050
          unsigned long                  ovrs      ;//0x0054
          unsigned long                  ovrc      ;//0x0058
          unsigned long                  ovrt      ;//0x005c
    const unsigned long                  pvr       ;//0x0060
          unsigned int                   :32       ;//0x0064
          unsigned int                   :32       ;//0x0068
          unsigned int                   :32       ;//0x006c
          unsigned long                  puer      ;//0x0070
          unsigned long                  puers     ;//0x0074
          unsigned long                  puerc     ;//0x0078
          unsigned long                  puert     ;//0x007c
          unsigned long                  odmer     ;//0x0080
          unsigned long                  odmers    ;//0x0084
          unsigned long                  odmerc    ;//0x0088
          unsigned long                  odmert    ;//0x008c
          unsigned long                  ier       ;//0x0090
          unsigned long                  iers      ;//0x0094
          unsigned long                  ierc      ;//0x0098
          unsigned long                  iert      ;//0x009c
          unsigned long                  imr0      ;//0x00a0
          unsigned long                  imr0s     ;//0x00a4
          unsigned long                  imr0c     ;//0x00a8
          unsigned long                  imr0t     ;//0x00ac
          unsigned long                  imr1      ;//0x00b0
          unsigned long                  imr1s     ;//0x00b4
          unsigned long                  imr1c     ;//0x00b8
          unsigned long                  imr1t     ;//0x00bc
          unsigned long                  gfer      ;//0x00c0
          unsigned long                  gfers     ;//0x00c4
          unsigned long                  gferc     ;//0x00c8
          unsigned long                  gfert     ;//0x00cc
    const unsigned long                  ifr       ;//0x00d0
          unsigned int                   :32       ;//0x00d4
          unsigned long                  ifrc      ;//0x00d8
          unsigned int                   :32       ;//0x00dc
          unsigned int                   :32       ;//0x00e0
          unsigned int                   :32       ;//0x00e4
          unsigned int                   :32       ;//0x00e8
          unsigned int                   :32       ;//0x00ec
          unsigned int                   :32       ;//0x00f0
          unsigned int                   :32       ;//0x00f4
          unsigned int                   :32       ;//0x00f8
          unsigned int                   :32       ;//0x00fc
} avr32_gpio_port_t;


格式如下
Px.<Register>
例如
PA.ovr = 0x12345678;               //在PA口上同时输出0x12345678;



3、寄存器的完整访问
    寄存器:我们约定用<Register>表示结构体中定义的结构体名称,用<REG>表示扩展
库文件中所定义的大写形式的寄存器或者寄存器的别称。


格式如下
Px.<Register>
或者
Px.<REG>
例如
PA.OVR = 0x12345678;
等效于
PA.PORT = 0x12345678;              //PORT是 OVR的别称,为了向下兼容AVR用户的习惯


    AVR大部分可读写的寄存器都有SET、CLR、TGL三种模式的寄存器。在扩展库文件中,既有
直接大写后的版本,也有改写后的版本,例如 ovrs是 set寄存器,我们有OVRS和SET_OVR两个
版本,其中SET_OVR这种形式的寄存器我们用标志<SET_REG>来表示。因此就有<CLR_REG>、
<TGL_REG>、<SET_REG>三种形式。



格式如下
Px.<SET_REG>
Px.<CLR_REG>
Px.<TGL_REG>
例如:
PA.SET_OVR = BIT(23);             //将PA23单独设置为高电平
PA.CLR_OVR = BIT(23);             //将PA23单独设置为低电平
PA.TGL_OVR = BIT(23);             //反转PA23的电平



4、用位操作的方式访问寄存器


格式如下
<REG>_Px(Pn)
其中Pn是引脚编号,例如"23""00"之类
例如:
OVR_PA(00) = HIGH;               //PA00引脚输出高电平

需要补充的是,只有非s、c、t结尾的寄存器才有对应的位操作模式。同时,用于控制端口模式
和端口中断模式的寄存器pmr0、pmr1和imr0、imr1没有对应的位操作模式


5、简化
   对于针对多个端口的连续操作,有基于语义的简化:
例如:

PA.SET_OVR = PA23 | PA24 | PA00;   //同时将PA23、PA24、PA00设置为高电平。

出0入0汤圆

发表于 2008-7-18 23:39:30 | 显示全部楼层
顶上去
头像被屏蔽

出0入0汤圆

发表于 2008-7-18 23:40:29 | 显示全部楼层
Cool ! 谢谢。

出0入4汤圆

发表于 2008-7-18 23:55:08 | 显示全部楼层
支持 顶

出0入59汤圆

发表于 2008-7-19 08:35:45 | 显示全部楼层
误人子弟,把8位处理器的习惯向32位移动
头像被屏蔽

出0入0汤圆

发表于 2008-7-19 08:57:53 | 显示全部楼层
谢谢【5楼】 polarbear 枫叶的质疑。

能说得具体一点吗? 这样才更有交流价值。

出0入59汤圆

发表于 2008-7-19 09:17:22 | 显示全部楼层
1. 我没有具体搞过AVR32,但是从ATMEL 的ARM来的库习惯来看,库函数一般使用__inline 内联修饰,不存在效率的问题

2. 你们是专家组的人物,你们的一举一动影响着大家

3.不方便交流,当你使用了这个库,写了许多有价值的代码需要共享时,使用你的人就必需改动代码

4.这个方法有点像,小时候学英文,不好好学音标(因为难嘛)  在单词的旁边加上汉字注释 apple (爱泼)

出0入0汤圆

发表于 2008-7-19 11:50:56 | 显示全部楼层
楼上说的有道理,为了方便把简单的事情复杂化了!

出0入0汤圆

发表于 2008-7-19 13:31:13 | 显示全部楼层
先顶一下再说!

出0入296汤圆

 楼主| 发表于 2008-7-19 16:03:46 | 显示全部楼层
to 【7楼】 polarbear 枫叶
    很高兴听到不同的声音。我这样做有几个原因:
1、第一,实际情况中,ATMEL对AVR32的驱动库,在GPIO的接口函数上,没有使用内联方式。
2、调用函数的时候,每次都需要进行地址计算、并且操作多个相关联的寄存器。实际上,这
   些寄存器是可以统一处理,而不必有这么多的冗余。
3、官方的API库函数并没有提供对端口同时操作的便利,例如,我想在A口同时输出一个8位
   数据,就缺乏这样的函数。甚至当我们自己想直接访问这些寄存器时,也没有现成的接口。
4、我这样做是经过慎重考虑,并非单纯的以8位的思维来考虑32位系统。实际上,我本人也是
   硬件抽象、底层与应用相隔里的支持者。您可以从我的AVR工程框架中发现这一点。我之所
   以写这个库函数,是为了方便进一步把端口以接口的形式抽象出来,便于编写库函数时,能
   够使用“=”这样的操作。
   比如:

   //PA16 ~ PA23 作为数据口
   # define LCD_DATA_PORT            SET_WORD_DIV_4(PA.PORT).BYTEC

   那么,在某个库函数中,我们就可以利用
   LCD_DATA_PORT 来进行数据赋值。而这个库函数显然不用考虑,所使用的是AVR、AVR32或者
   是别的什么单片机了。
   例如
   LCD_DATA_PORT = 'A';
   
5、其实,用API来实现接口是一种习惯,用“=”来实现接口也是一种更常见的习惯。函数操作
   方式不方便使用“=”进行操作。当然,如果你硬要说把地址帮定为变量,然后用“=”号赋
   值是8位机的做法,我也没有办法。我只想说,无论哪种方法,用在什么场合,只要能够满足
   要求,简化操作,都是有效的方法。不应该带个人感情_色彩。工具就是工具。
6、AVR32 GPIO的寄存器比较多,写一个扩展库函数,适当(注意是适当)简化大家对寄存器的
   访问。也许大家对照着PDF已经知道了寄存器的存在,于是就有尝试一下的愿望。而这些寄存器
   在AVR32中,由于缺乏软件框架的支持,无法直呼其名的进行操作,而必须经过一定的地址偏移。
   为了更符合大家的一些习惯(比如寄存器名称用大写,而官方驱动寄存器名称都用小写),也
   更符合面向对象的思想(例如,操作PA口的Output Value Register,我的做法就是PA.OVR或者
   PA.PORT),我做了一些简化甚至是重新定义。但总的来说,遵循了ATMEL官方库函数的原有思想
   和结构。
7、仁者见仁,智者见智。喜欢的人_大可拿去用,不喜欢的人也大可批判一番,以此作为反面教材。
   总之,大家吵吵嚷嚷总会把问题越辩越明。傻孩子自己也不知道是否犯了大错误,不过最终,经
   过讨论,一定会有所结果。如果错了,就是错了^_^,傻孩子也会觉得,不当一辈子井底之蛙要
   更幸福一些。

出0入0汤圆

发表于 2008-7-19 16:04:29 | 显示全部楼层
这样会不会影响程序的交流呢?

出0入296汤圆

 楼主| 发表于 2008-7-19 16:13:27 | 显示全部楼层
to 【11楼】 gxlujd 彩虹
    这个库函数并没有改变原有Software Framework的结构,只是增加了一点辅助。
还有,现在是推广初期,如果大家觉得好,值得这么做,那么以后就可以作为国内
的一种约定——这也算是作为推广专家一点点的虚荣所在吧。如果不好,那么以后
如果有人仍然这样做,那么就可以告诉他,不能这么做的理由。
    不过,我想大家应该还是习惯寄存器都用大写吧?^_^
    昨天晚上太仓促,没有写详细的使用方法,造成大家误解。我现在一定补上。

出0入296汤圆

 楼主| 发表于 2008-7-19 23:42:40 | 显示全部楼层

>>GPIO最简扩展方案

    考虑到大家给出的反馈,我决定利用系统已有的宏,给出一个直接访问寄存器的
扩展方案,力保原汁原味,而不增加所谓的“傻孩子的8位系统的习惯”。该方案存在
的理由只有一个:你会发现,很多时候API并不能给与我们想要的便利。比如,仅仅依
靠官方API,你无法在开启引脚电平中断以后,关闭Glitch Filter功能。
   

>>使用方法

如果我们想访问某个GPIO的寄存器,只要你知道他的名字,就可以了,格式是:


GPIO_REG(Px,AVR32_GPIO_<REG>)。
例如我们想访问PA口的Output Driver Enbale Register(ODER):
GPIO_REG(PA,AVR32_GPIO_ODER) = 0x12345678;


你只需要将GPIO_Extend.h拷贝到工程文件夹的
src\SOFTWARE_FRAMEWORK\DRIVERS\GPIO
文件夹下,就可以使用了

点击此处下载 ourdev_352852.rar(文件大小:1K) (原文件名:GPIO_Extend.rar)

出0入296汤圆

 楼主| 发表于 2008-7-19 23:49:20 | 显示全部楼层
当我们想同时操作多个端口时,仍然支持直呼其名的用法,
例如

GPIO_REG(PA,AVR32_GPIO_OVRS) = PA23 | PA24 | PA19 | PA00;

当然,你也可以通过PA这个端口名称直接访问对应的寄存器,这种访问所用到的结构体是框架
自带的,不是我个人发挥,属于AT给与的便利,只不过大家要习惯寄存器名称用小写的问题。
还有,这种访问方式没有通过GPIO_REG()访问的效率高。

PA.ovrs = PA23 | PA24 | PA19 | PA00;


欢迎有识之士猛烈拍砖!

出0入296汤圆

 楼主| 发表于 2008-7-20 04:42:17 | 显示全部楼层
经过一晚上的努力,增加了对于40个引脚的PX口的支持,只不过做了一点小小的修改:

1、对于PX00~PX31的部分,按照正常的PX口来进行访问,和前面叙述的方法没有太大区别。
2、对于PX32~的部分,作为一个扩展PX口来处理,名叫“PX_”,除此以外,所有操作和以
   前相同。

我更新的头文件,并将GPIO_Extend.h和RD_UseAVR32PortBits.h分开来,其中
GPIO_Extend.h可以独立存在,而RD_UseAVR32PortBits.h则需要依赖GPIO_Extend.h和
RD_UseBits.h两个头文件存在。一般情况下,如果你不想系统中有过多的扩展端口操作,而
又想很方便地直接访问端口寄存器,则只需要一个GPIO_Extend.h就足够了。
头像被屏蔽

出0入0汤圆

发表于 2008-7-20 06:57:00 | 显示全部楼层
支持一下。

出0入296汤圆

 楼主| 发表于 2008-7-21 22:51:11 | 显示全部楼层
更新库函数,增加对Local Bus的支持。
什么是Local Bus?AVR32里面有一条核心的总线叫做HSB(High Speed Bus)。这条总线是
由多条总线形成的阵列,成为HSB Matrix。CPU有CPU的时钟,总线有总线的时钟,一般情况
下,我们通过HSB的设备总线桥Peripheral Bridge来访问设备,比如GPIO,速度就会有所限
制。如果把HSB Matrix看作铁路,那么Local Bus就是Z字开头的直达车。Local Bus的时钟
与CPU相同,通过Local Bus访问的寄存器就可以工作在CPU时钟下。GPIO有部分寄存器可以
通过Local Bus来访问,比如OVR(Output Value Register),当CPU工作在66M的情况下,
我们可以通过Local Bus访问OVR输出33M的方波。

点击此处下载 ourdev_354430.rar(文件大小:5K) (原文件名:GPIO.rar)


>>通过Local Bus 访问GPIO

1、通过Local Bus访问端口时,在原有端口名前加一个L,例如:

PA口,通过Local Bus访问时,增加一个L变为LPA

2、其余使用方法不变。

出0入0汤圆

发表于 2008-7-22 09:04:12 | 显示全部楼层
嗯,顶上去,Local Bus是AVR32 UC3特有的功能,可以实现全速66M的IO操作速度,在有些领域非常合适~~

出0入0汤圆

发表于 2008-7-22 10:03:54 | 显示全部楼层
顶,还不懂AVR32,多谢“Gorgon Meducer 傻孩子”提供的资料。努力学好。

出0入0汤圆

发表于 2008-7-22 13:20:35 | 显示全部楼层
支持

出0入0汤圆

发表于 2008-7-25 16:19:54 | 显示全部楼层
支持

出0入0汤圆

发表于 2008-7-27 23:55:35 | 显示全部楼层
学习,先入门

出0入0汤圆

发表于 2008-8-4 10:09:57 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2008-10-9 10:25:11 | 显示全部楼层
gpio_enable_gpio_pin(AVR32_PIN_PA10);&nbsp;//告诉AVR32,我们要使用GPIO的普通IO输出功能&nbsp;

gpio_set_gpio_pin(AVR32_PIN_PA10);&nbsp;&nbsp;&nbsp;&nbsp;//在PA10上输出高电平&nbsp;





这可能是一种新规范,别的厂家也提倡这种编法。

再者,编程中,特别需要效率的机会并不多。从“楼主”列举的例子看,不存在效率的问题,如果有,也是编译器的问题。



回观编程理念的历史,规范和清晰不断被重视和强调。

本贴被 laozhang 编辑过,最后修改时间:2008-10-09,10:32:39.

出0入296汤圆

 楼主| 发表于 2008-10-9 11:37:29 | 显示全部楼层
to&nbsp;【24楼】&nbsp;laozhang&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;最近,我在写AVR32的书,作了一段时间以后,回过头来再看这个帖子,我

都觉得好笑。的确,这中改造是违规官方的意图的,是一种非规范的表现。如果

站在一个旁观者的角度,我想我自己都会忍不住发帖子说明对这种函数扩展的质

疑。呵呵。大家就当是一个讨论代码技巧的帖子好了。

出0入0汤圆

发表于 2008-10-9 12:07:06 | 显示全部楼层
傻孩子做事情的态度很好,赞一个&nbsp;&nbsp;^_^

出0入0汤圆

发表于 2008-11-1 14:41:30 | 显示全部楼层
首先,我觉得这是仁者见仁,智者见智的问题。

对于傻大哥的做法,本人觉得,对AVR32要有一定的功底。

不适合初学者。否则,还没熟悉开发环境就想着要改,那

想改都是改不好的。回想以前写单片机程序时。初学时都

是用例程,用规范。直到一年后才会想着写自己的库。

出0入0汤圆

发表于 2008-12-8 18:01:31 | 显示全部楼层
谢谢,好东西&nbsp;

出1000入0汤圆

发表于 2008-12-8 18:34:59 | 显示全部楼层
我有一个8M的8位并行数据流,想直接DMA到单片机中,一直找不到合适的方法,AVR32能满足要求码?

出0入296汤圆

 楼主| 发表于 2008-12-8 20:36:50 | 显示全部楼层
您能把需求说的详细一些么?

出0入0汤圆

发表于 2008-12-8 20:36:50 | 显示全部楼层
您能把需求说的详细一些么?

出1000入0汤圆

发表于 2008-12-8 22:17:34 | 显示全部楼层
DVB(数字视频广播)NIM(网络接口模块)出来的TS(传输流)为8位并行数据流,和8位并行数据一同输出一路时钟,时钟频率5~8Mhz。

我希望能把TS送到单片机中,取出有用数据,广播到网络上。



&nbsp;(原文件名:ts.gif)&nbsp;

出0入296汤圆

 楼主| 发表于 2008-12-8 22:35:32 | 显示全部楼层
AVR32是可以轻松应对的——用一个外中断+一个Local&nbsp;Bus的GPIO操作,在不超频的

情况下,可以达到33M&nbsp;Byte(8位并行数据)的速度……

对AVR32来说,这个用不着DMA……

本贴被 Gorgon Meducer 编辑过,最后修改时间:2008-12-08,22:36:25.

出0入0汤圆

发表于 2008-12-8 22:35:32 | 显示全部楼层
AVR32是可以轻松应对的——用一个外中断+一个Local&nbsp;Bus的GPIO操作,在不超频的
情况下,可以达到33M&nbsp;Byte(8位并行数据)的速度……
对AVR32来说,这个用不着DMA……

本贴被 Gorgon Meducer 编辑过,最后修改时间:2008-12-08,22:36:25.

出1000入0汤圆

发表于 2008-12-9 10:01:26 | 显示全部楼层
输出33MB没问题,关键是异步输入,如果采用中断,CPU几乎干不了其它活了。

出0入296汤圆

 楼主| 发表于 2008-12-9 11:10:28 | 显示全部楼层
to&nbsp;【33楼】&nbsp;david1234&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;输入也是没有问题的阿,CPU的工作频率可以到66M,8M的数据输入不会让

CPU无法处理其它事情的阿。要想中断响应迅速,使用NMI中断就可以了阿。把

输入时钟接在NMI引脚上就可以了。

&nbsp;&nbsp;&nbsp;&nbsp;实际上,你还可以使用EBI,这是一个外部总线接口。应该可以胜任你

的需求。

本贴被 Gorgon Meducer 编辑过,最后修改时间:2008-12-09,11:11:13.

出0入0汤圆

发表于 2008-12-9 11:10:28 | 显示全部楼层
to&nbsp;【33楼】&nbsp;david1234&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;输入也是没有问题的阿,CPU的工作频率可以到66M,8M的数据输入不会让
CPU无法处理其它事情的阿。要想中断响应迅速,使用NMI中断就可以了阿。把
输入时钟接在NMI引脚上就可以了。
&nbsp;&nbsp;&nbsp;&nbsp;实际上,你还可以使用EBI,这是一个外部总线接口。应该可以胜任你
的需求。

本贴被 Gorgon Meducer 编辑过,最后修改时间:2008-12-09,11:11:13.

出1000入0汤圆

发表于 2008-12-9 11:17:52 | 显示全部楼层
呵呵,我想问的就是EBI怎么用,需要外部胶合逻辑码?

出0入296汤圆

 楼主| 发表于 2008-12-9 11:19:08 | 显示全部楼层
to&nbsp;【35楼】&nbsp;david1234

&nbsp;&nbsp;&nbsp;&nbsp;使用EBI的话,关键看时钟从芯片来发生还是设备来发生,如果是设备来发生,你可能

无法使用EBI。我刚才又仔细看了一下你描述的接口定义,貌似无法使用EBI,你可能还是

只能使用中断+端口的方法来实现了。

本贴被 Gorgon Meducer 编辑过,最后修改时间:2008-12-09,11:22:15.

出0入0汤圆

发表于 2008-12-9 11:19:08 | 显示全部楼层
to&nbsp;【35楼】&nbsp;david1234
&nbsp;&nbsp;&nbsp;&nbsp;使用EBI的话,关键看时钟从芯片来发生还是设备来发生,如果是设备来发生,你可能
无法使用EBI。我刚才又仔细看了一下你描述的接口定义,貌似无法使用EBI,你可能还是
只能使用中断+端口的方法来实现了。

本贴被 Gorgon Meducer 编辑过,最后修改时间:2008-12-09,11:22:15.

出0入0汤圆

发表于 2008-12-10 18:45:39 | 显示全部楼层
Gorgon&nbsp;Meducer兄,本想使用您的扩展库来使用Local&nbsp;Bus功能,但是下载一楼的测试程序后,编译过程中出现如下错误:



&nbsp;(原文件名:未命名0.JPG)&nbsp;





&nbsp;(原文件名:未命名.JPG)&nbsp;

想不明白为何出现这种情况,我是使用AVR32&nbsp;Studio编译的.

出0入0汤圆

发表于 2008-12-25 13:20:06 | 显示全部楼层
支持一下,效率第一,移植第二,管他个p

出0入296汤圆

 楼主| 发表于 2008-12-25 23:21:00 | 显示全部楼层
我又下载了一次,测试没有问题啊?

你是使用Import的方法打开工程的么?&nbsp;

出0入0汤圆

发表于 2009-8-4 10:57:28 | 显示全部楼层
我用了傻孩子的扩展支持库,想用Local Bus输出尽可能高频率的方波。傻孩子说可以输出33MHz的方波,我怎么做不到,最大只输出了3.7MHz左右的方波。我用的是UC3B0小红板,切换到了晶体1(16MHz),PLLMUL=3,PLLDIV=1,按理来说主频已经到了64MHz了。我用了while(1)的死循环在main函数里实现的,如下:
while(1)
{
         LPA.PORT|=PA07;
               
         LPA.PORT&=~PA07;
}

可为什么只有3.7MHz左右的频率输出呢?

出0入296汤圆

 楼主| 发表于 2009-8-4 11:23:37 | 显示全部楼层
楼上这种方法是不行的……
你可以看看汇编代码……几个指令周期了……

出0入0汤圆

发表于 2009-8-4 14:45:14 | 显示全部楼层
哦,有道理!了解了!谢谢!!!

出0入0汤圆

发表于 2009-8-4 21:06:00 | 显示全部楼层
Gorgon Meducer 傻孩子:
问题还没解决,请你告诉我,我该用什么方法输出高达33MHz的方波?难道要去啃汇编吗?

出0入296汤圆

 楼主| 发表于 2009-8-5 00:16:12 | 显示全部楼层
不要与或操作,使用翻转寄存器……不是有一个OVRT寄存器么……专门用来翻转的……

出0入0汤圆

发表于 2009-8-5 22:43:49 | 显示全部楼层
回复  Gorgon Meducer 傻孩子:
哦~~~有道理,谢谢提醒!!!

出0入0汤圆

发表于 2009-8-23 12:43:49 | 显示全部楼层
mark

出235入235汤圆

发表于 2010-3-9 19:43:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-25 21:34:23 | 显示全部楼层
向傻孩子学习了!

出0入0汤圆

发表于 2010-8-4 23:26:15 | 显示全部楼层
作者创意不错,不过。。。:

1. 提供的文件注释都是中文,希望改成英文,要不推广不了哈。
2. 源码中太多太接近而意义相同的定义,如LPB,_LPB,刚看时容易搞得一头雾水。
3. 这个最要命:由于有多个口,作者大量使用“拷贝+粘贴”,导致严重错误哈: 参见GPIO_Extend.h中第337行至343行,见到这个错误,心里好怕怕,我可当心控制错误某些端口把我的电机烧了呢。嘿嘿


RichardLC

出0入0汤圆

发表于 2011-7-27 11:55:22 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-8-12 17:01:27 | 显示全部楼层
回复【12楼】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------

你好,你所编写的关于GPIO口并行处理的宏文件,PA,PB,PC口可以进行操作,但是对于PX口则不行,因为PX口得GPIO口的排列顺序不规则,所以此时在并行输出数据时会很麻烦。呵呵,不知我说的正确否,

出0入0汤圆

发表于 2011-8-22 08:29:20 | 显示全部楼层
回复【49楼】Gorgon Meducer  傻孩子
-----------------------------------------------------------------------

你好我现在利用avr32的板子使用ds1302但是使用gpio编程方面似乎我不能够掌握,能给点建议吗?

出0入0汤圆

发表于 2011-8-22 09:34:08 | 显示全部楼层
回复【58楼】He_Simon  
-----------------------------------------------------------------------

哥们用过ds1302吗

出0入0汤圆

发表于 2012-8-10 22:56:18 | 显示全部楼层
不错,顶起

出0入0汤圆

发表于 2013-8-13 22:28:50 来自手机 | 显示全部楼层
mark……
顶一个…
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 09:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表