From 4398827512c7ac58e962ca2495b0b96bf30dbabe Mon Sep 17 00:00:00 2001 From: patacongo Date: Sun, 22 May 2011 17:56:57 +0000 Subject: Fix for clean PIC32 compile with DEBUG on git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3639 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/arch/mips/src/mips32/up_swint0.c | 49 ++++----- nuttx/arch/mips/src/pic32mx/pic32mx-config.h | 13 +++ nuttx/arch/mips/src/pic32mx/pic32mx-dobev.c | 3 + nuttx/configs/pcblogic-pic32mx/README.txt | 151 ++++++++++++++++++++++++++- nuttx/lib/stdio/lib_fputs.c | 2 +- 5 files changed, 191 insertions(+), 27 deletions(-) diff --git a/nuttx/arch/mips/src/mips32/up_swint0.c b/nuttx/arch/mips/src/mips32/up_swint0.c index 220822f91..a23adce67 100644 --- a/nuttx/arch/mips/src/mips32/up_swint0.c +++ b/nuttx/arch/mips/src/mips32/up_swint0.c @@ -137,7 +137,7 @@ static void up_registerdump(uint32_t *regs) #ifdef CONFIG_NUTTX_KERNEL static inline void dispatch_syscall(uint32_t *regs) { - uint32_t cmd = regs[REG_R0]; + uint32_t cmd = regs[REG_A0]; FAR _TCB *rtcb = sched_self(); uintptr_t ret = (uintptr_t)ERROR; @@ -182,43 +182,43 @@ static inline void dispatch_syscall(uint32_t *regs) /* Number of parameters: 1 */ case 1: - ret = g_stublookup[index].stub1(regs[REG_R5]); + ret = g_stublookup[index].stub1(regs[REG_A1]); break; /* Number of parameters: 2 */ case 2: - ret = g_stublookup[index].stub2(regs[REG_R5], regs[REG_R6]); + ret = g_stublookup[index].stub2(regs[REG_A1], regs[REG_A2]); break; /* Number of parameters: 3 */ case 3: - ret = g_stublookup[index].stub3(regs[REG_R5], regs[REG_R6], - regs[REG_R7]); + ret = g_stublookup[index].stub3(regs[REG_A1], regs[REG_A2], + regs[REG_A3]); break; /* Number of parameters: 4 */ case 4: - ret = g_stublookup[index].stub4(regs[REG_R5], regs[REG_R6], - regs[REG_R7], regs[REG_R8]); + ret = g_stublookup[index].stub4(regs[REG_A1], regs[REG_A2], + regs[REG_A3], regs[REG_T0]); break; /* Number of parameters: 5 */ case 5: - ret = g_stublookup[index].stub5(regs[REG_R5], regs[REG_R6], - regs[REG_R7], regs[REG_R8], - regs[REG_R9]); + ret = g_stublookup[index].stub5(regs[REG_A1], regs[REG_A2], + regs[REG_A3], regs[REG_T0], + regs[REG_T1]); break; /* Number of parameters: 6 */ case 6: - ret = g_stublookup[index].stub6(regs[REG_R5], regs[REG_R6], - regs[REG_R7], regs[REG_R8], - regs[REG_R9], regs[REG_R10]); + ret = g_stublookup[index].stub6(regs[REG_A1], regs[REG_A2], + regs[REG_A3], regs[REG_T0], + regs[REG_T1], regs[REG_T2]); break; /* Unsupported number of paramters. Report error and return ERROR */ @@ -245,10 +245,10 @@ static inline void dispatch_syscall(uint32_t *regs) regs = rtcb->xcp.regs; } - /* Then return the result in R0 */ + /* Then return the result in v0 */ swidbg("Return value regs: %p value: %d\n", regs, ret); - regs[REG_R0] = (uint32_t)ret; + regs[REG_v0] = (uint32_t)ret; } #endif @@ -271,8 +271,9 @@ int up_swint0(int irq, FAR void *context) DEBUGASSERT(regs && regs == current_regs); - /* Software interrupt 0 is invoked with REG_R4 = system call command and - * REG_R5..R10 = variable number of arguments depending on the system call. + /* Software interrupt 0 is invoked with REG_A0 (REG_R4) = system call + * command and REG_A1-3 and REG_T0-2 (REG_R5-10) = variable number of + * arguments depending on the system call. */ #ifdef DEBUG_SWINT0 @@ -301,8 +302,8 @@ int up_swint0(int irq, FAR void *context) case SYS_restore_context: { - DEBUGASSERT(regs[REG_R5] != 0); - current_regs = (uint32_t*)regs[REG_R5]; + DEBUGASSERT(regs[REG_A1] != 0); + current_regs = (uint32_t*)regs[REG_A1]; } break; @@ -324,9 +325,9 @@ int up_swint0(int irq, FAR void *context) case SYS_switch_context: { - DEBUGASSERT(regs[REG_R5] != 0 && regs[REG_R6] != 0); - memcpy((uint32_t*)regs[REG_R5], regs, XCPTCONTEXT_SIZE); - current_regs = (uint32_t*)regs[REG_R6]; + DEBUGASSERT(regs[REG_A1] != 0 && regs[REG_A2] != 0); + memcpy((uint32_t*)regs[REG_A1], regs, XCPTCONTEXT_SIZE); + current_regs = (uint32_t*)regs[REG_A2]; } break; @@ -339,7 +340,7 @@ int up_swint0(int irq, FAR void *context) #ifdef CONFIG_NUTTX_KERNEL dispatch_syscall(regs); #else - slldbg("ERROR: Bad SYS call: %d\n", regs[REG_R0]); + slldbg("ERROR: Bad SYS call: %d\n", regs[REG_A0]); #endif break; } @@ -354,7 +355,7 @@ int up_swint0(int irq, FAR void *context) } else { - swidbg("SWInt Return: %d\n", regs[REG_R2]); + swidbg("SWInt Return: %d\n", regs[REG_V0]); } #endif diff --git a/nuttx/arch/mips/src/pic32mx/pic32mx-config.h b/nuttx/arch/mips/src/pic32mx/pic32mx-config.h index 279ff1a46..03ac6fa63 100755 --- a/nuttx/arch/mips/src/pic32mx/pic32mx-config.h +++ b/nuttx/arch/mips/src/pic32mx/pic32mx-config.h @@ -484,6 +484,19 @@ # error "CONFIG_PIC32MX_USBPRIO is too large" #endif +/* SYS calls ************************************************************************/ +/* SYS call 0 and 1 are defined for internal use by the PIC32MX port (see + * arch/mips/include/mips32/syscall.h + */ + +#ifdef CONFIG_NUTTX_KERNEL +# if !defined(CONFIG_SYS_RESERVED) || CONFIG_SYS_RESERVED < 2 +# error "CONFIG_SYS_RESERVED must be defined to be 2 for a kernel build" +# elif CONFIG_SYS_RESERVED > 2 +# warning "CONFIG_SYS_RESERVED should be defined to be 2 for a kernel build" +# endif +#endif + /* UARTs ****************************************************************************/ /* Don't enable UARTs not supported by the chip. */ diff --git a/nuttx/arch/mips/src/pic32mx/pic32mx-dobev.c b/nuttx/arch/mips/src/pic32mx/pic32mx-dobev.c index cd12cf40a..5107a0962 100644 --- a/nuttx/arch/mips/src/pic32mx/pic32mx-dobev.c +++ b/nuttx/arch/mips/src/pic32mx/pic32mx-dobev.c @@ -41,10 +41,13 @@ #include #include +#include #include #include + #include +#include #include "up_arch.h" #include "os_internal.h" diff --git a/nuttx/configs/pcblogic-pic32mx/README.txt b/nuttx/configs/pcblogic-pic32mx/README.txt index d24c8395c..b6a4d54da 100644 --- a/nuttx/configs/pcblogic-pic32mx/README.txt +++ b/nuttx/configs/pcblogic-pic32mx/README.txt @@ -9,10 +9,157 @@ MCU plus voltage regulation, debug interface, and an OTG connector. Contents ======== + PIC32MX460F512L Pin Out + MAX3232 Connection Toolchains PIC32MX Configuration Options Configurations +PIC32MX460F512L Pin Out +======================= + + PIC32MX460F512L 100-Pin TQFP (USB) Pin Out. The mapping to the pins on + the PCL Logic board are very simple, each pin is brought out to a connector + label with the PIC32MX460F512L pin number. + + On board logic only manages power, crystal, and USB signals. + + LEFT SIDE, TOP-TO-BOTTOM (if pin 1 is in upper left) + PIN NAME + ---- ---------------------------- + 1 RG15 + 2 Vdd + 3 PMD5/RE5 + 4 PMD6/RE6 + 5 PMD7/RE7 + 6 T2CK/RC1 + 7 T3CK/RC2 + 8 T4CK/RC3 + 9 T5CK/SDI1/RC4 + 10 SCK2/PMA5/CN8/RG6 + 11 SDI2/PMA4/CN9/RG7 + 12 SDO2/PMA3/CN10/RG8 + 13 MCLR + 14 SS2/PMA2/CN11/RG9 + 15 Vss + 16 Vdd + 17 TMS/RA0 + 18 INT1/RE8 + 19 INT2/RE9 + 20 AN5/C1IN+/VBUSON/CN7/RB5 + 21 AN4/C1IN-/CN6/RB4 + 22 AN3/C2IN+/CN5/RB3 + 23 AN2/C2IN-/CN4/RB2 + 24 PGEC1/AN1/CN3/RB1 + 25 PGED1/AN0/CN2/RB0 + + BOTTOM SIDE, LEFT-TO-RIGHT (if pin 1 is in upper left) + PIN NAME + ---- ---------------------------- + 26 PGEC2/AN6/OCFA/RB6 + 27 PGED2/AN7/RB7 + 28 VREF-/CVREF-/PMA7/RA9 + 29 VREF+/CVREF+/PMA6/RA10 + 30 AVdd + 31 AVss + 32 AN8/C1OUT/RB8 + 33 AN9/C2OUT/RB9 + 34 AN10/CVREFOUT/PMA13/RB10 + 35 AN11/PMA12/RB11 + 36 Vss + 37 Vdd + 38 TCK/RA1 + 39 U2RTS/RF13 + 40 U2CTS/RF12 + 41 AN12/PMA11/RB12 + 42 AN13/PMA10/RB13 + 43 AN14/PMALH/PMA1/RB14 + 44 AN15/OCFB/PMALL/PMA0/CN12/RB15 + 45 Vss + 46 Vdd + 47 U1CTS/CN20/RD14 + 48 U1RTS/CN21/RD15 + 49 U2RX/PMA9/CN17/RF4 + 50 U2TX/PMA8/CN18/RF5 + + RIGHT SIDE, TOP-TO-BOTTOM (if pin 1 is in upper left) + PIN NAME + ---- ---------------------------- + 75 Vss + 74 SOSCO/T1CK/CN0/RC14 + 73 SOSCI/CN1/RC13 + 72 SDO1/OC1/INT0/RD0 + 71 IC4/PMCS1/PMA14/RD11 + 70 SCK1/IC3/PMCS2/PMA15/RD10 + 69 SS1/IC2/RD9 + 68 RTCC/IC1/RD8 + 67 SDA1/INT4/RA15 + 66 SCL1/INT3/RA14 + 65 Vss + 64 OSC2/CLKO/RC15 + 63 OSC1/CLKI/RC12 + 62 Vdd + 61 TDO/RA5 + 60 TDI/RA4 + 59 SDA2/RA3 + 58 SCL2/RA2 + 57 D+/RG2 + 56 D-/RG3 + 55 VUSB + 54 VBUS + 53 U1TX/RF8 + 52 U1RX/RF2 + 51 USBID/RF3 + + TOP SIDE, LEFT-TO-RIGHT (if pin 1 is in upper left) + PIN NAME + ---- ---------------------------- + 100 PMD4/RE4 + 99 PMD3/RE3 + 98 PMD2/RE2 + 97 TRD0/RG13 + 96 TRD1/RG12 + 95 TRD2/RG14 + 94 PMD1/RE1 + 93 PMD0/RE0 + 92 TRD3/RA7 + 91 TRCLK/RA6 + 90 PMD8/RG0 + 89 PMD9/RG1 + 88 PMD10/RF1 + 87 PMD11/RF0 + 86 ENVREG + 85 Vcap/Vddcore + 84 PMD15/CN16/RD7 + 83 PMD14/CN15/RD6 + 82 PMRD/CN14/RD5 + 81 OC5/PMWR/CN13/RD4 + 80 PMD13/CN19/RD13 + 79 IC5/PMD12/RD12 + 78 OC4/RD3 + 77 OC3/RD2 + 76 OC2/RD1 + + Additional Signals available from the board: + + PROGRAM CONNECTOR: Vpp Vdd GND PGED1 PGEC1 NC PGED2 PGEC2 + POWER POINTS: +5Vin +3.3V AVdd AGND Vdd GND USB+5V + +MAX3232 Connection +================== + + I use a tiny, MAX3232 board that I got from the eBay made by NKC + Electronics (http://www.nkcelectronics.com/). As of this writing, it + is also available here: http://www.nkcelectronics.com/rs232-to-ttl-3v--55v-convert232356.html + + CTS -- Not connected + RTS -- Not connected + TX -- Pin 53: U1TX/RF8 + RX -- Pin 52: U1RX/RF2 + GND -- POWER POINT: GND + Vcc -- POWER POINT: Vdd (3.3V) -- Or P32_VBUS (+5V) + -- Or +5V from a USB PC port. + Toolchains ========== @@ -66,7 +213,7 @@ Toolchains building on C:), then you may need to modify tools/mkdeps.sh PIC32MX Configuration Options -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +============================= General Architecture Settings: @@ -246,7 +393,7 @@ PIC32MX Configuration Options PIC32MXx USB Host Configuration (the PIC32MX does not support USB Host) Configurations -^^^^^^^^^^^^^^ +============== Each PIC32MX configuration is maintained in a sudirectory and can be selected as follow: diff --git a/nuttx/lib/stdio/lib_fputs.c b/nuttx/lib/stdio/lib_fputs.c index 39d52493d..a2b132f2f 100644 --- a/nuttx/lib/stdio/lib_fputs.c +++ b/nuttx/lib/stdio/lib_fputs.c @@ -166,4 +166,4 @@ int fputs(FAR const char *s, FAR FILE *stream) } return nput; } -#endif \ No newline at end of file +#endif -- cgit v1.2.3