从8/16位向32位图形MCU升级的技巧
对于这一点,通常我只需要噼里啪啦地翻开数据页并按我自己的工作方式来查找问题的根源。出现的问题是,PIC32时钟产生模块比16位器件一书中所用的PIC24F要更加复杂一些。实际上,PIC32模块更像16位MCU系列中最新的PIC24F上的振荡器模块。同样,在PIC32结构中,绝大多数外设模块被连接到工作频率不同的彼此分离的外设总线上,这些频率低于系统时钟,这有助于功率管理,当然也有助于解决EMI问题。本文引用地址://m.amcfsurvey.com/article/173681.htm
我耐心找出如何使外设总线工作在与同一项目(16MHz外设总线)中PIC24F所用相同的频率。我还找出了可以执行的相同指令数,而执行频率仅为PIC24F所要求系统频率的一半,这是因为PIC32内核每个时钟周期上可以执行一个指令。
JTAG默认值设置为on
在解决了时钟问题之后,我快速地浏览了一下时钟模块。有5个时钟模块。看上去绝对与PIC24F完全一样,进一步回溯PICMCU的历史,一直回溯到PIC16C74(大约1994)都是兼容的。我继续验证I/O端口:同样的结构,同样的引脚数,同样反映“历史”的寄存器名称,发现一个兼容型的轨迹也许可以一直延伸到最初的PIC16C54(大约1991年)。
最后我对A/D转换模块进行了一次快速检查,对于绝大多数PICMCU初学者来说这是一个最难理解的外设。其输入连接到I/O口的上端(绝大多数16位PIC器件的PORTB),并且先加电,故除非你的配置正确,否则它不会使你的数字输入工作。显然它与PIC24兼容,因此我仍然无法解释LED行为异常的原因。
更靠近看,我发现有4个LED,要么从来不亮,要么就恒亮。于是,我又再一次翻开数据页来检查引脚图,最后终于发现了“元凶”:JTAG端口。
四线(E)JTAG接口被称为在线串行编程接口,是一个非正式的行业标准,它不仅允许边界扫描,而且还支持器件完全编程和调试控制。当然,这在引脚数很多的32位芯片中是所期望的,PIC32在加电时通过默认的方式将这两个接口都激活了。如果为了利用一些PORTA I/O而不需要这些JTAG接口,则依赖应用程序来将其关闭。
自从我注意了JTAG接口后,我的第一个PIC32项目开始按期望工作,并发送出它的首个“Hello”,如图1所示。
图1:用PIC32产生字符串。
至此所学到的简单经验(振荡器配置和JTAG接口)迅速地证明了它们与我16位器件一书中前面各章节中绝大多数项目兼容性的关键,在随后几天的开发中移植都比较顺利。我利用UART与PC通信,用SPI接口与串行EEPROM通信,而利用Parallel Master Port与LCD模块通信。我利用A/D先读取电位器,然后读取温度传感器,演示了PIC32如何与模拟应用接口。除了模块的一些扩展功能以外,所有这些模块的工作都与我所预期的完全一致。我发现我的16位代码完全可以照用,几乎不需要任何的改变。
评论