前言
大家好,非常感谢电子发烧友与中科昊芯提供的DSC280025C开发板,这是一款DSP的开发板,基于RISC-V指令架构。
在开发DSP的芯片的时候,要分代码运行在RAM模式和FlASH模式。代码运行在RAM下,主要用于开发调试模式,优点是下载速度快,运行的也快,缺点是断电程序就丢失了。
若代码在FLASH下开发,下载稍微要耗时一点,当然断电代码也不会丢失,同样仿真器也是正常硬件仿真,但是断点只支持2个。程序运行稍慢一些,但是可以通用修饰语句,让某些函数加载到RAM里面,已达到运行提速的目的。
所以,通常开发DSP的时候,大家是先在RAM模式下开发运行,调试仿真,代码OK没有问题的时候,在把工程切换为FLASH,并下载。
RAM与FLASH工程对比
DSP的这种RAM和FLASH开发方式,在代码上有什么区别?这是我比较关心的问题。所以,不如直接建立两个工程,然后进行代码对比,找出差异。
其实写代码和做项目,我反而不着急,我主要想弄清楚底层运行逻辑,所以愿意花费一些时间在这上面,这与每个人的性格和习惯不一样,分别建立RAM和FLASH工程如下。

两个工程我都编译了,都是0 errors, 0 warnings。也没有写什么业务逻辑,全是编译器自己生成的工程和代码。
这里需要多说一句:

编译器自己就已经把这个芯片的外设库文件添加到工程里面了,用户只需要添加自己的代码就行。
通过与原厂咨询,IDE自动生成的外设库文件是最新版本的。建议用户直接使用,反而他们提供的参考例程代码里面的库文件是早期的版本。
所以,大家大胆的用起来吧,就用最新版本。
下面我开始对比两个工程之间的差异。

其实我以为是的是两个工程在源代码之间对比,肯定有一点差异的,也是或多或少的问题,但是万万没有想到,居然是一点都没有,仅仅是工程文件有一定的差异。

最主要的差异还是在.cproject文件中。倘若,我将Flash工程配置,改为RAM,连这点差异就消失了。
所以,通过这件事情,我觉的这款DSP的开发方式真的很简单,很方便。
学习方式推荐
其实,首次使用这颗芯片,最主要的还是IDE不太熟悉。开发工具使用不太顺手导致,所以,建议还是多看一下IDE的使用手册。

另外控制器迁移指南也需要读一下。
之前我就忽略了这个文档,当时我想的是,我是从零开始学习,所以不存在什么迁移、移植之类的。但是,经过和厂家技术支持的提点,我再重新看了下这个文档,有收获!所以这个文档很重要。
一些其他的知识
关于main函数运行之前,程序运行的机制.
在main函数之前,通过浏览代码,其执行了一个_init()的函数。

这里里面应该是将代码进行拷贝(在FLASH模式下)
关于主函数中的 Device_init ( ) 函数的内容。
这个函数主要是对FLASH初始化,系统时钟初始化,外设开启等,这些都是厂家编写好了的,我们直接使用即可。
那么问题来了,我们代码中,系统主频时是多少?用的是外部晶振来源?我也看了下我们的DSCF280025CPMS开发板,上面贴了一个20MHZ的无源晶振,所以是它?
非也!

从上述代码可以看出, 工程中的系统时钟确实是160MHZ,但是时钟来源确是内部振荡器,主频10MHZ,经过16倍频,达到外部系统的160MHZ。
所以,外部晶振是没有用上,也就是仅仅贴在板上。如果我们需要把外部晶振启用,所以还需要调整工程。
!
将原来的USE_PLL_SRC_INTOSC 注释掉,启用USE_PLL_SRC_XTAL
这样就可以正常启用外部晶振。

从程序中也能看到定义的外部晶振的主频时20MHZ,和实物也是能对应上的。
关于外设初始化
从代码中也是能看到,厂家的代码是将这款DSP的所有外设资源全部都开启了的。但是,我们在实际工程项目使用的时候,可以把我们没有用到的外设给关闭,比如I2S,LIN等等.
这样的好处是有利于减少主控芯片的功耗与发热。

从厂家提供的手册中也能窥探一二,减少电流如下,所以这事还是值得做。
