我耐心找出如何使外设总线工作在与同一项目(16MHz外设总线)中PIC24F所用相同的频率。我还找出了可以执行的相同指令数,而执行频率仅为PIC24F所要求系统频率的一半,这是因为PIC32内核每个时钟周期上可以执行一个指令。
JTAG默认值设置为on
在解决了时钟问题之后,我快速地浏览了一下时钟模块。有5个时钟模块。看上去绝对与PIC24F完全一样,进一步回溯PIC MCU的历史,一直回溯到PIC16C74(大约1994)都是兼容的。我继续验证I/O端口:同样的结构,同样的引脚数,同样反映“历史”的寄存器名称,发现一个兼容型的轨迹也许可以一直延伸到最初的PIC16C54(大约1991年)。
最后我对A/D转换模块进行了一次快速检查,对于绝大多数PIC MCU初学者来说这是一个最难理解的外设。其输入连接到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位代码完全可以照用,几乎不需要任何的改变。