感谢21IC 从北京寄来的NV32F100 demo 板,研究了两天,把自己项目会用到的一些功能模块调好了,
不敢独享,把完整工程源代码上传上来,给大家抛砖引玉,请大家多指点。
分享一点调试模块体会:
1、上传的代码都采用了实时中断架构,程序没有delay、无阻塞,真正实用的代码,KBI 暂时没加消抖。
2、NV32 的时钟配置,相对稍微复杂,化繁为简,其实就配置RDIV和BDIV 两个关键分频点,
RDIV 是外部晶体进来的第一个分频器,RDIV 负责把外部晶体频率降低到32K-39K之间,然后进入FLL,为什么要这个频率范围呢,个人猜测应该FLL之前有一个带通滤波器的,这样可以保证频率干净、稳定,FLL 硬件固定1280倍频的,然后频率出到BDIV,BDIV分频后就是ICSOUT ,就是所谓的系统时钟了,简化一下XTAL->RDIV->FLL->BDIV->BUS_CLK_HZ,这个程序使用外部10M 晶体,10M->RDIV 256分频 10000/256 得到 39.0625K ->FLL 1280倍频得到50M->BDIV 4分频就是 50M/4得到 12.5M的系统时钟。
3、定时器,刚开始以为是用ETM 的,发现ETM 并没有官方的定时溢出例子,自己折腾了好久,其实应该用PIT,PIT 就是周期定时溢出模块,简单好用,32位的溢出值,可以定时的时间也很长。
4、UART0 调试用了中断接收,接收后马上把接收的数据从TX回去。
5、外部中断,注意了,NV32 并不是任何IO 都能配置外部中断的,只有支持KBI 中断的IO 才能配置,并且
KBI只有两个中断入口KBI0\KBI1,如果用到多个外部中断,要进入KBI 中断之后再查询确认具体是哪个IO口触发的中断,这样的外部中断机制稍弱!
6、中断入口在isr.h 中配置了。 |