查看: 946|回复: 0

兆易创新GD32 Colibri-F207ZE评估板体验纪实 (七、回眸)

[复制链接]
  • TA的每日心情
    无聊
    2018-1-4 09:36
  • 签到天数: 58 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2016-2-23 09:13:06 | 显示全部楼层 |阅读模式
    分享到:

    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (七、回眸)                    25_okwh@https://www.eeboard.com/gd32f2mcu
       2016.02.18
    关于DMA和中断:
         DMA方式对于字节流通讯(如果文件读写等)有突出的优点,对于本项目这样需要混合交替使用多个SPI的情况,每次通讯数据量少的情况,DMA不怎么需要。
         本项目使用了三个DA,一个AD。DA操作一般不需要中断,他们是事先计划化好的以指定时间间隔进行处理,所以使用计数器中断进行处理即可。AD操作可以查询等待AD转换完成进行SPI读数,也可用AD转换完成信号做管脚中断,在中断中读数。对于本项目SPI发送TX/接收RX中断等基本不需要。 有关例子可参考GD32-Colibri-F207ZE-DEMO\Colibri_GD32F207\firmware\GD32F20x_Firmware_Library\Example\SPI\SPI_Simplex_Interrupt
    但GD32的中断功能令人印象深刻,包括NVIC和一个支持20 个相互独立边沿检测电路的外部中断/事件控制器(EXTI),支持等待中断(WFI)、软件中断(SIE)、等待事件(WFE)、发送事件(SEV)、唤醒中断(WIC)。有EXTI_InitStructure和NVIC_InitStructure两种数据结构, 细节参考库中的gd32f20x.h、gd32f20x_exit.h、gd32f20x_misc.h,以及多个例子中的gd32f20x_it文件。



    SPI中断使用三步骤为:
    a)   中断配置


    • NVIC_InitPara NVIC_InitStructure;
    •    /* 1 bit for pre-emption priority, 3 bits for subpriority */
    • NVIC_PRIGroup_Enable(NVIC_PRIGROUP_1);
    •    NVIC_InitStructure.NVIC_IRQ = SPI3_IRQn;

    •    NVIC_InitStructure.NVIC_IRQPreemptPriority = 0;
    • NVIC_InitStructure.NVIC_IRQSubPriority = 1;
    •    NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
    •    NVIC_Init(&NVIC_InitStructure);
    复制代码
    b) SPI和中断关联,比如:

    • SPI_I2S_INTConfig(SPI3, SPI_I2S_INT_RBNE | SPI_I2S_INT_TBE, ENABLE);
    复制代码
    a)   在中断相应函数中处理中断

    • void SPI3_IRQHandler(void)
    • {
    • if (SPI_I2S_GetIntBitState(SPI3, SPI_I2S_INT_TBE) != RESET)
    •    写发送……
    •    if (SPI_I2S_GetIntBitState(SPI3, SPI_I2S_INT_RBNE) == SET)
    •      读……
    • }
    复制代码
    本项目使用到了SPI3-GPIOB-3/4/5(PA15),SPI1-GPIOA-5/6/7 (PA4), GPIOD-3/5/6/11/12/13。

    关于计时器/计数器:
           计数器是必然要用到的极其有用的功能,通过它控制整个系统的运行顺序步骤和关系,几乎是我们编程的核心功能。也因此有关计数器的使用都有很完全的解释说明和例子,没有多少困难和问题。GD32的定时器time数目众多、功能充分,可以说无所不能了。细节可参考说明书第9章和库文件gd32f20x_timer.h 和例子GD32-Colibri-F207ZE-DEMO\Colibri_GD32F207\firmware\GD32F20x_Firmware_Library\Example\TIMER。
            按照ARM MCU的设计初衷,几乎所有功能的步骤都是 配置、关联、操作。

    总结:
       ARMMCU某单一功能的通用步骤可看做是:a)配置-满足目标需要;b)关联-针对功能协作关系;c)读写代码实现操作。
       这个GD32是我试用的第一个ARM32板,目的是为计划的开发平台转移做探索评估。本次主要试验通过SPI通讯进行ADDA控制。可以说取得了完满成功。
         和我们原来基于51、196的比较,GD32提供了强大的功能,无可争议的扩展能力,端口管脚的可配置能力为电路设计提供了灵活性,为增加新的功能带来了成功希望,虽然需要学习的东西很多,还需要详细验证才能保证坚实可靠的设计开发出新产品。

         应该说兆易创新的GD32F207MCU可以满足我们的基本需要(如果能做浮点计算的MPU更好),它提供的EXMC、TFT、USB、PWM、ETH、CAN、CAU、UART、SPI、SDIO能满足广泛的应用需求。
         由于我们设备的模拟部分尚未完成,本次参赛主要验证SPI、IO、中断等数模接口控制部分。
    建议:
         就我个人来说,不太喜欢那些ST式(也许是我不熟悉)的资料,如果能有针对的积累提供如AD公司那样的参考硬件设计,再有针对的参考样例代码,而不是任用户在手册中和GDM3209xx-EVAL的例子中极其耗时的搜寻(也许那些已经熟悉ST片子的熟练者无需这样。我一直不喜欢手册以结构构成为基础排列内容,最好是以功能和功能协同关系设计手册,当然这需要MCU厂家更新思路服务用户),相信会更成功。
         最后,感谢版主小菜儿、感谢trochili、感谢版主糖悦之果飞、感谢论坛网友的帮助,感谢爱板网和兆易创新的支持和帮助!祝爱板网和兆易创新兴旺发达!

    本系列:
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (一、邂逅)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (二、初识)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (三、定计)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (四、筑基)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (五、曙光)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (六、揭秘)
    兆易创新GD32 Colibri-F207ZE评估板体验纪实 (七、回眸)
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-19 22:46 , Processed in 0.115425 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.