那是始于2009年7月所发生的一个我和PIC32的故事。就在我的有关怎么对16位PIC24微操控器进行编程一书刚刚出书不久,我传闻Microchip公司一款新的32位PIC32微操控器现已出炉。该产品运用的是MIPS内核,一起还宣称与16位的引脚以及PIC24系列产品外围兼容。对我来说这简直是太重要了!我当即动身去要到一个样片并改写根据GNU的MPLAB C32 C编译器的beta复制。
我仅仅有必要看一下这款新产品像什么。它依然像是PIC MCU?它能不能在相同的演示版上作业?究竟,我现已用C言语为PIC24写完了15章颇有价值的16位代码和例程。长话短说,在随后的不到一个月的时间里,我不只完成了代码移植,并且现已开端使用所把握的PIC32的经历书写一本新书了!
下面就是对一个月里所发生的作业的扼要叙说。我喜爱从我恪守最好的规划原则并从阅览数据页开端叙述,假如说我自始至终全面阅览了数据页,那是说谎!实践上我所做的与你做的彻底相同。翻开装有曾经PIC24项意图MPLAB集成开发环境,点击F10键当即创立。
二进制数字
一长串的过错列表呈现在输出窗口中。令我惊讶的是,所报导的一切过错都显着地只与我的二进制注释(0b00000000),即C言语的一个非规范扩展有关。我企图编译我关于16位操控器一书前三章中的第一个代码例程。这是一段十分简略的代码,用C来阐明I/O,准确守时以及流操控(用于循环)指令。我立刻决议将一切二进制文字转化成规范十六进制的注释(0x00)并观看成果,瞧!编译器和链接器立刻解分出代码没有任何过错。
感觉很走运,我决议持续“行进”,并在一些实践的硬件——即Explorer 16演示板上运转代码。我获取了一个PIC32插件式模块(PIM),并替代我的16位器材一书中遍及所用的PIC24 PIM。加电后我抱着十分置疑的情绪调查了几秒钟,居然没有“冒烟”!然后我取了一块MPLAB Real ICE调试器和编程器连接到板子上。MPLAB IDE居然很快识别出该东西并陈述已发现PIC32连接到板子上。
在快速和主动的固件晋级后,我便当即按下编程键,随后就是运转指令…。但却不作业!
我意识到板子上显着有什么问题,但一点也不像我所希望的那样。这儿需求解释一下。在我的16位器材一书的前三章中,我使用C言语向读者供给了怎么生成 “Hello World”这类比如。其间,我讲到传统的完成办法是,向终端发送一个字符串,但这在嵌入式操控使用中是不现实或许不合适的。而是选用一个“风趣的”计划,即制造一排8个LED,当把板子拿在手上并挥动时,灯将有节奏地闪耀。它将显示出有用的信息,这要归功于眼睛的天然成像持久性。实践上对此进行编码要比描绘更简略。
不一起钟
事实上是,PIC32得到的I/O引脚和守时全部都是过错的。
关于这一点,一般我只需求噼里啪啦地翻开数据页并按我自己的作业方法来查找问题的本源。呈现的问题是,PIC32时钟发生模块比16位器材一书中所用的 PIC24F要愈加杂乱一些。实践上,PIC32模块更像16位MCU系列中最新的PIC24F上的振荡器模块。相同,在PIC32结构中,绝大多数外设模块被连接到作业频率不同的互相别离的外设总线上,这些频率低于体系时钟,这有助于功率办理,当然也有助于处理EMI问题。
我耐性找出怎么使外设总线作业在与同一项目(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位代码彻底能够照用,简直不需求任何的改动。