本帖最后由 okwh 于 2017-12-12 01:24 编辑
兆易创新GD32 Colibri-F207ZE评估板体验纪实 (七、回眸) 25_okwh@https://www.cirmall.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评估板体验纪实 (七、回眸)
|