Microchip PIC32MM

chrome_2017-08-13_22-29-39.png
Why does the “Documentation” section of the PIC32MM family product page contain a bunch of PDFs for completely different microcontrollers? Where’s the links to the reference manual(s)?

Documentation

The PIC32MM has the worst documentation I’ve seen in this review. First, let’s download the datasheet. Visit the landing page for the PIC32MM architecture. On the left-hand page under “Resources” is a link to “Data Sheets” — don’t click on this, as that will take you to the entire datasheet repository for Microchip. Instead, scroll down to the tabs at the bottom, and click on “Documentation” — now, all you’ll have to do is sort through the documentation for all the 32-bit microcontrollers Microchip makes. Buried in there somewhere is the “PIC32MM0064GPL036 Family Datasheet” which sounds close enough.

You can download this datasheet, which looks like it should have what you need — there’s individual chapters for each peripheral, after all. But you’ll quickly realize that there’s a lot of important information missing from these datasheets — and only a selection of registers is described. There’s a note at the beginning of each section that reads:

This data sheet summarizes the features of the PIC32MM0064GPL036 family of devices. It is not intended to be a comprehensive reference source. To complement the information in this data sheet, refer to […] the “PIC32 Family Reference Manual”, which is available from the Microchip web site (www.microchip.com/PIC32). The information in this data sheet supersedes the information in the FRM.

Hmm, alright. This is common for ARM microcontrollers — but why isn’t this a listed download on the product page? Why do I have to sift through a bunch of Atmel SAM datasheets to download a PIC32MM datasheet on a page that doesn’t even have the corresponding reference manual?

Fine, let’s go to the web site they mentioned. It redirects to this page, which I scrolled down and clicked on the “Documentation” tab. There is no “Reference Manual” section — only “Data Sheets” — and, sure enough, it’s the same dumb list of PIC32 and Atmel SAM microcontroller datasheets that was on the PIC32MM page.

At this point, I give up and do a Google search of “PIC32 Family Reference Manual” — oddly, there’s no hits. There’s individual chapters from something with that title, but I want the entire PDF. There’s an entire “PIC32MX Family Reference Manual” but this is for the wrong microcontroller.

chrome_2017-08-13_22-42-02.png
Are you fucking kidding me? I have to download 

After much digging, I discovered a Reference Manuals section on Microchip’s web site under “Other Resources” — and the only way to find the appropriate reference manual is to search for “PIC32MM.” When you do this, you’ll get not one, but 435 PDFs. I’m not kidding. The entire manual is split up into a separate PDF for each section. This is absolutely atrocious, but it gets worse: there is absolutely no organized list of sections (so you could go through and download them all at once), and you can’t even search for the section you’re looking for! I tried desperately trying to find “Section 30” which contains information about the CCP timer module (since MCC is absolutely useless when it comes to timer configurations — see above). I tried search terms like “PIC32 Section 30,” “PIC32MM Section 30,” “PIC32 Capture,” “PIC32 MCCP,” and many — all with zero hits. If I get rid of the “PIC32” term, I end up with hundreds of results for PIC24s, dsPICs, and all sorts of other parts.

chrome_2017-08-13_22-52-42.png

The only way to track down reference manual information is by using Google to search Microchip’s web site.

Performance

In terms of biquad filter performance, the PIC32 delivered the worst results of any 32-bit processor in the review, managing only 829.88 ksps processing speed @ 7.65 mA, which puts it at 30.42 nJ/sample — three times more than most of the Cortex-M0 processors (only the Nuvoton M051 had worse power measurements among 32-bit MCUs).

With -O3:

0x9D0005AA: BC1F 0x9D0088F5
0x9D0005AC: LDC1 F8, -16512(AT)
0x9D0005B0: SW S1, -1981(GP)
0x9D0005B4: B 0x9D0005B1
0x9D0005B6: NOP

Blah blah