本帖最后由 皮球 于 2023-6-19 22:43 编辑
1、开箱:
以下是AC7802开发板的开箱图,包装上挺大气,也能很好地保护开发板免受挤压损坏。盒子背面也很简洁介绍了这几代车规级MCU产品,值得一提的是,这些介绍都是用中文的,几分钟内就能掌握了这几代MCU的资源以及之间的区别,很方便;比起个别的国产芯片,虽然主要市场也在国内,但是开发板盒子上的介绍,却都是英文的,不好看懂,虽然我英语基础还行,但是也懒得费时间去看相关信息。
然后我们再看一看板子,这个AC7802芯片真的好小一个,有32个引脚,适合那种控制板空间小的产品。
两边的排针应该是已经把所有的IO口都引出来了,这也是开发板常规的做法。
供电方面,我看开发板上已经做了一个Type-C的供电口,可以说是紧跟社会发展了。再也不用翻箱倒柜,去找mini-USB连接线了。
开发板上还有一些特别的地方,就是多了JUMP1跟JUMP2这两个GND,然后查了一下原理图,发现还有JP12跟JP13这两个电源输出。这个设计上还是很人性化的,对于调试或者外拓其他器件,都提供了便利。
2、学习相关使用手册:
相关的开发板入门指南、芯片手册以及硬件原理图是必须要看的,一方面是为了更快上手,另外一方面也是怕出现误操作引起不必要的麻烦。
在看外部晶振相关介绍的时候,发现了一些不一致的描述。硬件原理图上面写的,外接晶振是8M的,但是开发板入门指南上却写着16M,感觉有点奇奇怪怪。建议相关的文档能更正一下,后面我也再核对一下例程里面的配置,确认下是用了多大频率的晶振。
3、例程的使用
首先从最简单的GPIO例程开始用起来。
刚开始我是没有看GPIO模块应用笔记的,直接就去看GPIO例程了。因为我个人觉得应该可以通过代码直接看懂的,而且代码里也有相关的注释。
但是意外的是,看了好一会,虽然大概知道可以通过key按键可以调节LED的闪烁频率,但是具体的实现逻辑,看起来并不是很清晰。
然后我又回头去看了应用笔记,再结合debug中对相关变量的观测,就搞懂了代码逻辑了。此处我提一下例程的优缺点,优点在于有应用笔记这种指导性文档,可以帮忙开发着快速入门;缺点是GPIO例程,作为一个最基础的例程,不宜写的复杂,建议是更加简化代码,比如只是用KEY按键来控制LED亮灭,这样也不用引入TIMER模块,代码更加简洁干练。
4、评测思考
最近太忙,中间有一两个星期没什么时间学习这个开发板,回到论坛上一看,好多人都已经写好帖子上传了,还好没过评测时间,我也得加紧才行。
论坛上已经有好多评测贴了,各式各样,居然还有用Linux哈哈哈。
好像没什么人写SPI的,那我就写一个SPI的吧,SPI的使用还是很广泛的,对于一些非主控芯片,很多都是用SPI通信来实现主控芯片跟非主控芯片的通信。常见的比如一些存储类芯片,电源管理芯片,驱动芯片,CAN收发器这些;都是用SPI来跟主控芯片通信。
从例程来看,有polling跟interrupt两种方式的
然后我就打开了第一个代码,Master_Polling的,然后发现发送数据跟接受数据,都是用polling的方式,而polling的方式,用的都是等待
那也就意味着,收发这个数据的过程中,程序必须死等这个传输结束。虽然程序实现上很简单,但如果要设计一个高效运行的软件,显然是不行的。
接着,我又打开了第三个代码,Master_Interrupt的,发送跟接受都是用的中断方式,感觉很奇怪,发送作为一种主动行为,却是使用发送中断,应该不是常规的使用方式。
比较合理的设计,应该是发送使用polling,接受使用Interrupt。
当我在查看数据手册的时候,也看到一个寄存器解释比较难以理解的地方。
就这个TXUF寄存器,“下溢”好难理解,我觉得这种数据发送的标志,要么就是发送触发,要么就是发送中,要么就是发送完成,应该就是三种中的一种吧,建议还是用通俗一点的解释。
5、评测方向确定
基于上面所说的polling发送,interrupt接受,我就想着基于例程来动手改一个。
从polling发送开始,原本打算直接用库函数替换
然而发现,polling发送仍然是需要等待标志位,还是比较占用资源。
无奈只能尝试改库函数了。
6、SPI提高收发效率
首先将SPI驱动库的文件复制出来,放到本地文件夹里,并添加到工程里,方便后续修改库函数,涉及的文件如下图:
经过反复的调试后,终于搞定。先展示一下最终的效果图:
代码的主要实现部分如下:
发送部分的实现
接受部分的实现
因为还涉及到一些驱动库函数的修改,所以我还是贴上源码,供各位有需要的取用。
SPI_Master_PollingTx_InterruptRx.rar
(870.81 KB)
7、其他
断断续续搞了一段时间,刚刚发帖才发现第2段写的要确认晶振的实际频率,查看了代码,应该是用的16M。
详细可见system_ac7802x.h中的定义
#define USE_XTAL XTAL_16M /*!< Select the actual crystal frequency */
本还想着写点啥,看看时间已经快11点了。算了算了,赶紧洗澡去,明天还要早起上班呢,打工不易,且行且珍惜。
|