I got PIC32 starter kit today. Here are some impressions: - Comes with eval version of C32 C-compiler with 64KB code size limit. C32 is actually called C32-gcc, so it's a gcc derivative. The source is on the website, but who knows if it's recent or complete. - Hardware debugging (breakpoints, goto cursor) works in MPLAB on this little board, but I found that sometimes it gets into a mode where it thinks that breakpoints are not supported: "breakpoint limit for hardware is 0" in the breakpoint dialogue. This is fixed if you restart MPLAB. Anyway, you can view both assembly and C source during single-stepping. It's pretty nice. - You can DBPRINTF over JTAG (and also DBGETS). It's very slow. It was not documented that you had to add a define to make this work for new projects (-DPIC32_START_KIT- add the define in Project->Build Options->Project->C-compiler->Macros). The debug I/O library is not part of the main library- it was just a db_utils.a file (no source) in the StartKitTutorial directory (the "hello world" program). I had to copy it to the timer interrupt demo program that I wanted to try to get it working. I then had to replace all the UART I/O calls to debug I/O calls. There is no UART interface on the starter board, so they must be designing these demos for some other board (actually they are labs for a course- maybe FAE or early customer training?) One annoying thing about this form of JTAG I/O (which is not unique to PIC)- it's not a real serial port. When you call DBGETS, a window pops up in MPLAB for you to type a string. This is a modal window, so you can not actually halt the debugger when it is up. So don't put DBGETS in a loop! There is no way to poll for keyboard input. When the DBGETS is waiting for input, the CPU is basically break-point halted, so interrupts stop running. - This is how you make interrupt handlers: void __ISR(TIMER_1_VECTOR, ipl2) my_handler(void) { mPORTDToggleBits(BIT_0); // Blink a led mT1ClearIntFlag(); } And that's about it (set up the timer and EnableIntT1). You do not have to explicity write the my_handler address to a vector, the compiler just does it. - The IDE needs a little work. There were some screen update glitches when I closed various windows. It core dumped when switching projects. The manual for the C-libraries (particularly the peripherals) is missing. - On the other hand, things did generally work. You basically hit F10 to compile and F9 to run. It prompts you for downloading the code to the board. - There are compiler settings for making compressed MIPS 16-bit code (like the ARM thumb code). Both worked. Last time I used MIPS, there was no 16-bit option. Some notes about the PIC32 CPU: - Someone complained that the chip has only 16-bit timers: this is not exactly true: timers can be paired up to form single 32-bit timers. - There is a RTC clock generator (and an RTCC block) on the chip with pins for a 32 KHz crystal. - There is support for some kind of external trace buffer on the CPU. You must have to buy some special ICE to make use of it. - The code examples include HTML server on a TCP/IP stack, but they need a board with Microchip's ethernet to SPI interface chip. -- /* jhallen@world.std.com AB1GO */ /* Joseph H. Allen */ int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0) +r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2 ]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
PIC32 starter kit impressions
Started by ●November 12, 2007
Reply by ●December 21, 20072007-12-21
can you comment on the power consumption of these devices? All I saw on the family datasheet was TBD for all current ratings.
Reply by ●December 22, 20072007-12-22
Hi, sorry about the multiple sends - unfamiliarity with this setup is my excuse! Nice post. I've ordered a PIC32 starter kit and look forward to having a play with it in the next week or two. I'll feed back any points additional to those already posted if and when I find them. I'm new to MIPS32 code so it should be fun. Regards, Joe Brown.>I got PIC32 starter kit today. Here are some impressions: > >- Comes with eval version of C32 C-compiler with 64KB code size limit.C32> is actually called C32-gcc, so it's a gcc derivative. The source ison> the website, but who knows if it's recent or complete. > >- Hardware debugging (breakpoints, goto cursor) works in MPLAB on this > little board, but I found that sometimes it gets into a mode where it > thinks that breakpoints are not supported: "breakpoint limit forhardware> is 0" in the breakpoint dialogue. This is fixed if you restart MPLAB.> Anyway, you can view both assembly and C source during single-stepping.> It's pretty nice. > >- You can DBPRINTF over JTAG (and also DBGETS). It's very slow. It wasnot> documented that you had to add a define to make this work for newprojects> (-DPIC32_START_KIT- add the define in Project->Build > Options->Project->C-compiler->Macros). The debug I/O library is notpart> of the main library- it was just a db_utils.a file (no source) in the > StartKitTutorial directory (the "hello world" program). > > I had to copy it to the timer interrupt demo program that I wanted totry> to get it working. I then had to replace all the UART I/O calls todebug> I/O calls. There is no UART interface on the starter board, so theymust> be designing these demos for some other board (actually they are labsfor> a course- maybe FAE or early customer training?) > > One annoying thing about this form of JTAG I/O (which is not unique to > PIC)- it's not a real serial port. When you call DBGETS, a window popsup> in MPLAB for you to type a string. This is a modal window, so you cannot> actually halt the debugger when it is up. So don't put DBGETS in aloop!> There is no way to poll for keyboard input. When the DBGETS iswaiting> for input, the CPU is basically break-point halted, so interrupts stop > running. > >- This is how you make interrupt handlers: > > void __ISR(TIMER_1_VECTOR, ipl2) my_handler(void) > { > mPORTDToggleBits(BIT_0); // Blink a led > mT1ClearIntFlag(); > } > > And that's about it (set up the timer and EnableIntT1). You do nothave to> explicity write the my_handler address to a vector, the compiler justdoes> it. > >- The IDE needs a little work. There were some screen update glitcheswhen> I closed various windows. It core dumped when switching projects.The> manual for the C-libraries (particularly the peripherals) is missing. > >- On the other hand, things did generally work. You basically hit F10to> compile and F9 to run. It prompts you for downloading the code to the > board. > >- There are compiler settings for making compressed MIPS 16-bit code(like> the ARM thumb code). Both worked. Last time I used MIPS, there wasno> 16-bit option. > >Some notes about the PIC32 CPU: > >- Someone complained that the chip has only 16-bit timers: this is not > exactly true: timers can be paired up to form single 32-bit timers. > >- There is a RTC clock generator (and an RTCC block) on the chip withpins> for a 32 KHz crystal. > >- There is support for some kind of external trace buffer on the CPU.You> must have to buy some special ICE to make use of it. > >- The code examples include HTML server on a TCP/IP stack, but they needa> board with Microchip's ethernet to SPI interface chip. > >-- >/* jhallen@world.std.com AB1GO */ /* Joseph H.Allen */>inta[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0)>+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2 >]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n","#"[!a[q-1]]);}>