全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com)
这段时间终于开始了TC275开发板的简单软件调试,运行了一个简单的官方例程之后,尝试开启了解这个MCU的一些配置以及设置。在理顺这些代码的时候,看到了一个CPU ID获取的接口,结合这部分信息,我一起看了一下用户手册的相关内容。接下来,结合手册以及代码做一些整理以及测试。
这里给出了寄存器的一个复位默认值以及每一部分位域表示的意义,针对这个描述多少有点好奇:难道这个数值还是可以修改的?
TC275中的内核是有两大类的,其中一个是P核,关注于性能,另一个是E核,有更好的能耗参数。从这部分文档看,这两个内核相关的ID信息都是32bit的。但是,这两个内核的版本都不同的,由此倒是可以看出开发的时候芯片的开发组兴许是两部分分开开发的。
这个是内核ID的获取寄存器,从描述看这个信息可能是可以变动的,通过下面的这组用户可配置的ID寄存器。
这样,相关的文档内容基本就看完了,主要是几个寄存器的介绍。简单小结一下的话,其实是寄存器主要是分为两类,其中的一类是用来判断内核是哪一种,另一类则是用来判断内核的编号是什么。
我在每一个内核的main函数中都增加了一段这样的代码,然后,在Core0的main函数中把相应的信息打印出来。
以上是打印的信息。
上面是软件编译之后运行的输出效果,每一个Core中的代码都成功获取到了相应的内核的信息。同时,也第一次看到其实这个全局变量是可以在各个Core里面直接使用的,至少是可以直接读取。接下来,我想再增加一个测试,那就是让这个信息不断更新。看看是不是能够看到获取内核ID的效果。同时,也验证一下这个变量是不是可以在不同的内核里面直接进行修改。
首先,我把内核ID的获取全都放到了每一个内核主函数的这个位置。其实,这样也可以变相看得出来这几个内核是否真正运行到了这个循环。
Core0的主函数中的代码改成了这样子。之后,编译测试一下。如果所有的Core全都运行了,而且ID获取都成功。那么,虽然不见得每一次的打印都能够成功打印出来ID的号码,但是至少大部分应该是正确的。
这几轮打印的结果其实就很能够说明问题了。在Core0的代码中,打印之后,其实是对这个ID全都进行了修改的。那么,再次打印的时候,之说以正确其实是不同的Core里面对此进行了更新。为了能够更好的说明问题,其实,可以一次同时把涂抹数据一起打印出来。
测试的代码按照上面的形式进行修改,之后测试看看效果。
结果多少有点让我觉得意外,其实也是可以理解的。为什么呢?因为另外两个Core的运行速度还是很快的。接下来,我在里面增加一个缓冲备份让这个结果能够看得更清楚一些。
这样,主体的测试代码改成了这样子。
以上是这次软件编译烧录后的运行效果,可以看得出来,几个变量其实是修改成功了的。为什么之前会有打印失败呢?其实,这个串口的速度并不是很快,因此,面临更快的CPU的内核轮询,来不及反应的时候内容进一步被修改了。
关于CPU ID的信息,在我现在用的这个例子中没有。因此,我尝试自己去实现一下看看效果。
照葫芦画瓢,实现了一下CPU ID的获取接口。之后,在每一个Core的main函数中都调用赋值给一个全局变量。
在Core0的main函数中,增加了上面的测试代码,并且根据前面的手册判断了一下CPU的类型。
这是程序编译烧录之后运行的效果,看起来这个测试还是可以的,正确获取到了相应的信息。至于文档中提到了另一个客户定制的部分,我觉得我最终用到的可能性不大,当做趣味材料看看就这么过了吧!