/* * Hardware register defines for all Microchip PIC32MX microcontrollers. * * Copyright (C) 2010 Serge Vakulenko, * Modified 2015 by Axel Isaksson - Added I2C registers * Modified 2016 by Axel Isaksson - Added More timer and SPI registers * * Permission to use, copy, modify, and distribute this software * and its documentation for any purpose and without fee is hereby * granted, provided that the above copyright notice appear in all * copies and that both that the copyright notice and this * permission notice and warranty disclaimer appear in supporting * documentation, and that the name of the author not be used in * advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * The author disclaim all warranties with regard to this * software, including all implied warranties of merchantability * and fitness. In no event shall the author be liable for any * special, indirect or consequential damages or any damages * whatsoever resulting from loss of use, data or profits, whether * in an action of contract, negligence or other tortious action, * arising out of or in connection with the use or performance of * this software. */ #ifndef _IO_PIC32MX_H #define _IO_PIC32MX_H /*-------------------------------------- * Coprocessor 0 registers. */ #define C0_HWRENA 7 /* Enable RDHWR in non-privileged mode */ #define C0_BADVADDR 8 /* Virtual address of last exception */ #define C0_COUNT 9 /* Processor cycle count */ #define C0_COMPARE 11 /* Timer interrupt control */ #define C0_STATUS 12 /* Processor status and control */ #define C0_INTCTL 12 /* Select 1: interrupt control */ #define C0_SRSCTL 12 /* Select 2: GPR shadow set control */ #define C0_SRSMAP 12 /* Select 3: vector to shadow set mapping */ #define C0_CAUSE 13 /* Cause of last exception */ #define C0_EPC 14 /* Program counter at last exception */ #define C0_PRID 15 /* Processor identification (read only) */ #define C0_EBASE 15 /* Select 1: exception base address */ #define C0_CONFIG 16 /* Configuration */ #define C0_CONFIG1 16 /* Select 1: configuration 1 */ #define C0_CONFIG2 16 /* Select 2: configuration 2 */ #define C0_CONFIG3 16 /* Select 3: configuration 3 */ #define C0_DEBUG 23 /* Debug control and status */ #define C0_DEPC 24 /* Program counter at last debug exception */ #define C0_ERROREPC 30 /* Program counter at last error */ #define C0_DESAVE 31 /* Debug handler scratchpad register */ /* * Status register. */ #define ST_CU0 0x10000000 /* Access to coprocessor 0 allowed (in user mode) */ #define ST_RP 0x08000000 /* Enable reduced power mode */ #define ST_RE 0x02000000 /* Reverse endianness (in user mode) */ #define ST_BEV 0x00400000 /* Exception vectors: bootstrap */ #define ST_SR 0x00100000 /* Soft reset */ #define ST_NMI 0x00080000 /* NMI reset */ #define ST_IPL(x) ((x) << 10) /* Current interrupt priority level */ #define ST_UM 0x00000010 /* User mode */ #define ST_ERL 0x00000004 /* Error level */ #define ST_EXL 0x00000002 /* Exception level */ #define ST_IE 0x00000001 /* Interrupt enable */ /* * Сause register. */ #define CA_BD 0x80000000 /* Exception occured in delay slot */ #define CA_TI 0x40000000 /* Timer interrupt is pending */ #define CA_CE 0x30000000 /* Coprocessor exception */ #define CA_DC 0x08000000 /* Disable COUNT register */ #define CA_IV 0x00800000 /* Use special interrupt vector 0x200 */ #define CA_RIPL(r) ((r)>>10 & 63) /* Requested interrupt priority level */ #define CA_IP1 0x00020000 /* Request software interrupt 1 */ #define CA_IP0 0x00010000 /* Request software interrupt 0 */ #define CA_EXC_CODE 0x0000007c /* Exception code */ #define CA_Int 0 /* Interrupt */ #define CA_AdEL (4 << 2) /* Address error, load or instruction fetch */ #define CA_AdES (5 << 2) /* Address error, store */ #define CA_IBE (6 << 2) /* Bus error, instruction fetch */ #define CA_DBE (7 << 2) /* Bus error, load or store */ #define CA_Sys (8 << 2) /* Syscall */ #define CA_Bp (9 << 2) /* Breakpoint */ #define CA_RI (10 << 2) /* Reserved instruction */ #define CA_CPU (11 << 2) /* Coprocessor unusable */ #define CA_Ov (12 << 2) /* Arithmetic overflow */ #define CA_Tr (13 << 2) /* Trap */ #define DB_DBD (1 << 31) /* Debug exception in a branch delay slot */ #define DB_DM (1 << 30) /* Debug mode */ #define DB_NODCR (1 << 29) /* No dseg present */ #define DB_LSNM (1 << 28) /* Load/stores in dseg go to main memory */ #define DB_DOZE (1 << 27) /* Processor was in low-power mode */ #define DB_HALT (1 << 26) /* Internal system bus clock was running */ #define DB_COUNTDM (1 << 25) /* Count register is running in Debug mode */ #define DB_IBUSEP (1 << 24) /* Instruction fetch bus error exception */ #define DB_DBUSEP (1 << 21) /* Data access bus error exception */ #define DB_IEXI (1 << 20) /* Imprecise error exception */ #define DB_VER (7 << 15) /* EJTAG version number */ #define DB_DEXCCODE (0x1f << 10) /* Cause of exception in Debug mode */ #define DB_SST (1 << 8) /* Single step exception enabled */ #define DB_DIBImpr (1 << 6) /* Imprecise debug instruction break */ #define DB_DINT (1 << 5) /* Debug interrupt exception */ #define DB_DIB (1 << 4) /* Debug instruction break exception */ #define DB_DDBS (1 << 3) /* Debug data break exception on store */ #define DB_DDBL (1 << 2) /* Debug data break exception on load */ #define DB_DBP (1 << 1) /* Debug software breakpoint exception */ #define DB_DSS (1 << 0) /* Debug single-step exception */ /*-------------------------------------- * Peripheral registers. */ #ifdef __ASSEMBLER__ #define PIC32_R(a) (0xBF800000 + (a)) #else #define PIC32_R(a) (*(volatile unsigned*)(0xBF800000 + (a))) #endif /*-------------------------------------- * UART registers. */ #define U1MODE PIC32_R (0x6000) /* Mode */ #define U1MODECLR PIC32_R (0x6004) #define U1MODESET PIC32_R (0x6008) #define U1MODEINV PIC32_R (0x600C) #define U1STA PIC32_R (0x6010) /* Status and control */ #define U1STACLR PIC32_R (0x6014) #define U1STASET PIC32_R (0x6018) #define U1STAINV PIC32_R (0x601C) #define U1TXREG PIC32_R (0x6020) /* Transmit */ #define U1RXREG PIC32_R (0x6030) /* Receive */ #define U1BRG PIC32_R (0x6040) /* Baud rate */ #define U1BRGCLR PIC32_R (0x6044) #define U1BRGSET PIC32_R (0x6048) #define U1BRGINV PIC32_R (0x604C) #ifdef PIC32MX7 #define U4MODE PIC32_R (0x6200) /* Mode */ #define U4MODECLR PIC32_R (0x6204) #define U4MODESET PIC32_R (0x6208) #define U4MODEINV PIC32_R (0x620C) #define U4STA PIC32_R (0x6210) /* Status and control */ #define U4STACLR PIC32_R (0x6214) #define U4STASET PIC32_R (0x6218) #define U4STAINV PIC32_R (0x621C) #define U4TXREG PIC32_R (0x6220) /* Transmit */ #define U4RXREG PIC32_R (0x6230) /* Receive */ #define U4BRG PIC32_R (0x6240) /* Baud rate */ #define U4BRGCLR PIC32_R (0x6244) #define U4BRGSET PIC32_R (0x6248) #define U4BRGINV PIC32_R (0x624C) #define U3MODE PIC32_R (0x6400) /* Mode */ #define U3MODECLR PIC32_R (0x6404) #define U3MODESET PIC32_R (0x6408) #define U3MODEINV PIC32_R (0x640C) #define U3STA PIC32_R (0x6410) /* Status and control */ #define U3STACLR PIC32_R (0x6414) #define U3STASET PIC32_R (0x6418) #define U3STAINV PIC32_R (0x641C) #define U3TXREG PIC32_R (0x6420) /* Transmit */ #define U3RXREG PIC32_R (0x6430) /* Receive */ #define U3BRG PIC32_R (0x6440) /* Baud rate */ #define U3BRGCLR PIC32_R (0x6444) #define U3BRGSET PIC32_R (0x6448) #define U3BRGINV PIC32_R (0x644C) #define U6MODE PIC32_R (0x6600) /* Mode */ #define U6MODECLR PIC32_R (0x6604) #define U6MODESET PIC32_R (0x6608) #define U6MODEINV PIC32_R (0x660C) #define U6STA PIC32_R (0x6610) /* Status and control */ #define U6STACLR PIC32_R (0x6614) #define U6STASET PIC32_R (0x6618) #define U6STAINV PIC32_R (0x661C) #define U6TXREG PIC32_R (0x6620) /* Transmit */ #define U6RXREG PIC32_R (0x6630) /* Receive */ #define U6BRG PIC32_R (0x6640) /* Baud rate */ #define U6BRGCLR PIC32_R (0x6644) #define U6BRGSET PIC32_R (0x6648) #define U6BRGINV PIC32_R (0x664C) #define U2MODE PIC32_R (0x6800) /* Mode */ #define U2MODECLR PIC32_R (0x6804) #define U2MODESET PIC32_R (0x6808) #define U2MODEINV PIC32_R (0x680C) #define U2STA PIC32_R (0x6810) /* Status and control */ #define U2STACLR PIC32_R (0x6814) #define U2STASET PIC32_R (0x6818) #define U2STAINV PIC32_R (0x681C) #define U2TXREG PIC32_R (0x6820) /* Transmit */ #define U2RXREG PIC32_R (0x6830) /* Receive */ #define U2BRG PIC32_R (0x6840) /* Baud rate */ #define U2BRGCLR PIC32_R (0x6844) #define U2BRGSET PIC32_R (0x6848) #define U2BRGINV PIC32_R (0x684C) #define U5MODE PIC32_R (0x6A00) /* Mode */ #define U5MODECLR PIC32_R (0x6A04) #define U5MODESET PIC32_R (0x6A08) #define U5MODEINV PIC32_R (0x6A0C) #define U5STA PIC32_R (0x6A10) /* Status and control */ #define U5STACLR PIC32_R (0x6A14) #define U5STASET PIC32_R (0x6A18) #define U5STAINV PIC32_R (0x6A1C) #define U5TXREG PIC32_R (0x6A20) /* Transmit */ #define U5RXREG PIC32_R (0x6A30) /* Receive */ #define U5BRG PIC32_R (0x6A40) /* Baud rate */ #define U5BRGCLR PIC32_R (0x6A44) #define U5BRGSET PIC32_R (0x6A48) #define U5BRGINV PIC32_R (0x6A4C) #else #define U2MODE PIC32_R (0x6200) /* Mode */ #define U2MODECLR PIC32_R (0x6204) #define U2MODESET PIC32_R (0x6208) #define U2MODEINV PIC32_R (0x620C) #define U2STA PIC32_R (0x6210) /* Status and control */ #define U2STACLR PIC32_R (0x6214) #define U2STASET PIC32_R (0x6218) #define U2STAINV PIC32_R (0x621C) #define U2TXREG PIC32_R (0x6220) /* Transmit */ #define U2RXREG PIC32_R (0x6230) /* Receive */ #define U2BRG PIC32_R (0x6240) /* Baud rate */ #define U2BRGCLR PIC32_R (0x6244) #define U2BRGSET PIC32_R (0x6248) #define U2BRGINV PIC32_R (0x624C) #endif /* * UART Mode register. */ #define PIC32_UMODE_STSEL 0x0001 /* 2 Stop bits */ #define PIC32_UMODE_PDSEL 0x0006 /* Bitmask: */ #define PIC32_UMODE_PDSEL_8NPAR 0x0000 /* 8-bit data, no parity */ #define PIC32_UMODE_PDSEL_8EVEN 0x0002 /* 8-bit data, even parity */ #define PIC32_UMODE_PDSEL_8ODD 0x0004 /* 8-bit data, odd parity */ #define PIC32_UMODE_PDSEL_9NPAR 0x0006 /* 9-bit data, no parity */ #define PIC32_UMODE_BRGH 0x0008 /* High Baud Rate Enable */ #define PIC32_UMODE_RXINV 0x0010 /* Receive Polarity Inversion */ #define PIC32_UMODE_ABAUD 0x0020 /* Auto-Baud Enable */ #define PIC32_UMODE_LPBACK 0x0040 /* UARTx Loopback Mode */ #define PIC32_UMODE_WAKE 0x0080 /* Wake-up on start bit during Sleep Mode */ #define PIC32_UMODE_UEN 0x0300 /* Bitmask: */ #define PIC32_UMODE_UEN_RTS 0x0100 /* Using UxRTS pin */ #define PIC32_UMODE_UEN_RTSCTS 0x0200 /* Using UxCTS and UxRTS pins */ #define PIC32_UMODE_UEN_BCLK 0x0300 /* Using UxBCLK pin */ #define PIC32_UMODE_RTSMD 0x0800 /* UxRTS Pin Simplex mode */ #define PIC32_UMODE_IREN 0x1000 /* IrDA Encoder and Decoder Enable bit */ #define PIC32_UMODE_SIDL 0x2000 /* Stop in Idle Mode */ #define PIC32_UMODE_FRZ 0x4000 /* Freeze in Debug Exception Mode */ #define PIC32_UMODE_ON 0x8000 /* UART Enable */ /* * UART Control and status register. */ #define PIC32_USTA_URXDA 0x00000001 /* Receive Data Available (read-only) */ #define PIC32_USTA_OERR 0x00000002 /* Receive Buffer Overrun */ #define PIC32_USTA_FERR 0x00000004 /* Framing error detected (read-only) */ #define PIC32_USTA_PERR 0x00000008 /* Parity error detected (read-only) */ #define PIC32_USTA_RIDLE 0x00000010 /* Receiver is idle (read-only) */ #define PIC32_USTA_ADDEN 0x00000020 /* Address Detect mode */ #define PIC32_USTA_URXISEL 0x000000C0 /* Bitmask: receive interrupt is set when... */ #define PIC32_USTA_URXISEL_NEMP 0x00000000 /* ...receive buffer is not empty */ #define PIC32_USTA_URXISEL_HALF 0x00000040 /* ...receive buffer becomes 1/2 full */ #define PIC32_USTA_URXISEL_3_4 0x00000080 /* ...receive buffer becomes 3/4 full */ #define PIC32_USTA_TRMT 0x00000100 /* Transmit shift register is empty (read-only) */ #define PIC32_USTA_UTXBF 0x00000200 /* Transmit buffer is full (read-only) */ #define PIC32_USTA_UTXEN 0x00000400 /* Transmit Enable */ #define PIC32_USTA_UTXBRK 0x00000800 /* Transmit Break */ #define PIC32_USTA_URXEN 0x00001000 /* Receiver Enable */ #define PIC32_USTA_UTXINV 0x00002000 /* Transmit Polarity Inversion */ #define PIC32_USTA_UTXISEL 0x0000C000 /* Bitmask: TX interrupt is generated when... */ #define PIC32_USTA_UTXISEL_1 0x00000000 /* ...the transmit buffer contains at least one empty space */ #define PIC32_USTA_UTXISEL_ALL 0x00004000 /* ...all characters have been transmitted */ #define PIC32_USTA_UTXISEL_EMP 0x00008000 /* ...the transmit buffer becomes empty */ #define PIC32_USTA_ADDR 0x00FF0000 /* Automatic Address Mask */ #define PIC32_USTA_ADM_EN 0x01000000 /* Automatic Address Detect */ /* * Compute the 16-bit baud rate divisor, given * the bus frequency and baud rate. * Round to the nearest integer. */ #define PIC32_BRG_BAUD(fr,bd) ((((fr)/8 + (bd)) / (bd) / 2) - 1) /*-------------------------------------- * Port A-G registers. */ #define TRISA PIC32_R (0x86000) /* Port A: mask of inputs */ #define TRISACLR PIC32_R (0x86004) #define TRISASET PIC32_R (0x86008) #define TRISAINV PIC32_R (0x8600C) #define PORTA PIC32_R (0x86010) /* Port A: read inputs, write outputs */ #define PORTACLR PIC32_R (0x86014) #define PORTASET PIC32_R (0x86018) #define PORTAINV PIC32_R (0x8601C) #define LATA PIC32_R (0x86020) /* Port A: read/write outputs */ #define LATACLR PIC32_R (0x86024) #define LATASET PIC32_R (0x86028) #define LATAINV PIC32_R (0x8602C) #define ODCA PIC32_R (0x86030) /* Port A: open drain configuration */ #define ODCACLR PIC32_R (0x86034) #define ODCASET PIC32_R (0x86038) #define ODCAINV PIC32_R (0x8603C) #define TRISB PIC32_R (0x86040) /* Port B: mask of inputs */ #define TRISBCLR PIC32_R (0x86044) #define TRISBSET PIC32_R (0x86048) #define TRISBINV PIC32_R (0x8604C) #define PORTB PIC32_R (0x86050) /* Port B: read inputs, write outputs */ #define PORTBCLR PIC32_R (0x86054) #define PORTBSET PIC32_R (0x86058) #define PORTBINV PIC32_R (0x8605C) #define LATB PIC32_R (0x86060) /* Port B: read/write outputs */ #define LATBCLR PIC32_R (0x86064) #define LATBSET PIC32_R (0x86068) #define LATBINV PIC32_R (0x8606C) #define ODCB PIC32_R (0x86070) /* Port B: open drain configuration */ #define ODCBCLR PIC32_R (0x86074) #define ODCBSET PIC32_R (0x86078) #define ODCBINV PIC32_R (0x8607C) #define TRISC PIC32_R (0x86080) /* Port C: mask of inputs */ #define TRISCCLR PIC32_R (0x86084) #define TRISCSET PIC32_R (0x86088) #define TRISCINV PIC32_R (0x8608C) #define PORTC PIC32_R (0x86090) /* Port C: read inputs, write outputs */ #define PORTCCLR PIC32_R (0x86094) #define PORTCSET PIC32_R (0x86098) #define PORTCINV PIC32_R (0x8609C) #define LATC PIC32_R (0x860A0) /* Port C: read/write outputs */ #define LATCCLR PIC32_R (0x860A4) #define LATCSET PIC32_R (0x860A8) #define LATCINV PIC32_R (0x860AC) #define ODCC PIC32_R (0x860B0) /* Port C: open drain configuration */ #define ODCCCLR PIC32_R (0x860B4) #define ODCCSET PIC32_R (0x860B8) #define ODCCINV PIC32_R (0x860BC) #define TRISD PIC32_R (0x860C0) /* Port D: mask of inputs */ #define TRISDCLR PIC32_R (0x860C4) #define TRISDSET PIC32_R (0x860C8) #define TRISDINV PIC32_R (0x860CC) #define PORTD PIC32_R (0x860D0) /* Port D: read inputs, write outputs */ #define PORTDCLR PIC32_R (0x860D4) #define PORTDSET PIC32_R (0x860D8) #define PORTDINV PIC32_R (0x860DC) #define LATD PIC32_R (0x860E0) /* Port D: read/write outputs */ #define LATDCLR PIC32_R (0x860E4) #define LATDSET PIC32_R (0x860E8) #define LATDINV PIC32_R (0x860EC) #define ODCD PIC32_R (0x860F0) /* Port D: open drain configuration */ #define ODCDCLR PIC32_R (0x860F4) #define ODCDSET PIC32_R (0x860F8) #define ODCDINV PIC32_R (0x860FC) #define TRISE PIC32_R (0x86100) /* Port E: mask of inputs */ #define TRISECLR PIC32_R (0x86104) #define TRISESET PIC32_R (0x86108) #define TRISEINV PIC32_R (0x8610C) #define PORTE PIC32_R (0x86110) /* Port E: read inputs, write outputs */ #define PORTECLR PIC32_R (0x86114) #define PORTESET PIC32_R (0x86118) #define PORTEINV PIC32_R (0x8611C) #define LATE PIC32_R (0x86120) /* Port E: read/write outputs */ #define LATECLR PIC32_R (0x86124) #define LATESET PIC32_R (0x86128) #define LATEINV PIC32_R (0x8612C) #define ODCE PIC32_R (0x86130) /* Port E: open drain configuration */ #define ODCECLR PIC32_R (0x86134) #define ODCESET PIC32_R (0x86138) #define ODCEINV PIC32_R (0x8613C) #define TRISF PIC32_R (0x86140) /* Port F: mask of inputs */ #define TRISFCLR PIC32_R (0x86144) #define TRISFSET PIC32_R (0x86148) #define TRISFINV PIC32_R (0x8614C) #define PORTF PIC32_R (0x86150) /* Port F: read inputs, write outputs */ #define PORTFCLR PIC32_R (0x86154) #define PORTFSET PIC32_R (0x86158) #define PORTFINV PIC32_R (0x8615C) #define LATF PIC32_R (0x86160) /* Port F: read/write outputs */ #define LATFCLR PIC32_R (0x86164) #define LATFSET PIC32_R (0x86168) #define LATFINV PIC32_R (0x8616C) #define ODCF PIC32_R (0x86170) /* Port F: open drain configuration */ #define ODCFCLR PIC32_R (0x86174) #define ODCFSET PIC32_R (0x86178) #define ODCFINV PIC32_R (0x8617C) #define TRISG PIC32_R (0x86180) /* Port G: mask of inputs */ #define TRISGCLR PIC32_R (0x86184) #define TRISGSET PIC32_R (0x86188) #define TRISGINV PIC32_R (0x8618C) #define PORTG PIC32_R (0x86190) /* Port G: read inputs, write outputs */ #define PORTGCLR PIC32_R (0x86194) #define PORTGSET PIC32_R (0x86198) #define PORTGINV PIC32_R (0x8619C) #define LATG PIC32_R (0x861A0) /* Port G: read/write outputs */ #define LATGCLR PIC32_R (0x861A4) #define LATGSET PIC32_R (0x861A8) #define LATGINV PIC32_R (0x861AC) #define ODCG PIC32_R (0x861B0) /* Port G: open drain configuration */ #define ODCGCLR PIC32_R (0x861B4) #define ODCGSET PIC32_R (0x861B8) #define ODCGINV PIC32_R (0x861BC) #define CNCON PIC32_R (0x861C0) /* Interrupt-on-change control */ #define CNCONCLR PIC32_R (0x861C4) #define CNCONSET PIC32_R (0x861C8) #define CNCONINV PIC32_R (0x861CC) #define CNEN PIC32_R (0x861D0) /* Input change interrupt enable */ #define CNENCLR PIC32_R (0x861D4) #define CNENSET PIC32_R (0x861D8) #define CNENINV PIC32_R (0x861DC) #define CNPUE PIC32_R (0x861E0) /* Input pin pull-up enable */ #define CNPUECLR PIC32_R (0x861E4) #define CNPUESET PIC32_R (0x861E8) #define CNPUEINV PIC32_R (0x861EC) /*-------------------------------------- * A/D Converter registers. */ #define AD1CON1 PIC32_R (0x9000) /* Control register 1 */ #define AD1CON1CLR PIC32_R (0x9004) #define AD1CON1SET PIC32_R (0x9008) #define AD1CON1INV PIC32_R (0x900C) #define AD1CON2 PIC32_R (0x9010) /* Control register 2 */ #define AD1CON2CLR PIC32_R (0x9014) #define AD1CON2SET PIC32_R (0x9018) #define AD1CON2INV PIC32_R (0x901C) #define AD1CON3 PIC32_R (0x9020) /* Control register 3 */ #define AD1CON3CLR PIC32_R (0x9024) #define AD1CON3SET PIC32_R (0x9028) #define AD1CON3INV PIC32_R (0x902C) #define AD1CHS PIC32_R (0x9040) /* Channel select */ #define AD1CHSCLR PIC32_R (0x9044) #define AD1CHSSET PIC32_R (0x9048) #define AD1CHSINV PIC32_R (0x904C) #define AD1CSSL PIC32_R (0x9050) /* Input scan selection */ #define AD1CSSLCLR PIC32_R (0x9054) #define AD1CSSLSET PIC32_R (0x9058) #define AD1CSSLINV PIC32_R (0x905C) #define AD1PCFG PIC32_R (0x9060) /* Port configuration */ #define AD1PCFGCLR PIC32_R (0x9064) #define AD1PCFGSET PIC32_R (0x9068) #define AD1PCFGINV PIC32_R (0x906C) #define ADC1BUF0 PIC32_R (0x9070) /* Result words */ #define ADC1BUF1 PIC32_R (0x9080) #define ADC1BUF2 PIC32_R (0x9090) #define ADC1BUF3 PIC32_R (0x90A0) #define ADC1BUF4 PIC32_R (0x90B0) #define ADC1BUF5 PIC32_R (0x90C0) #define ADC1BUF6 PIC32_R (0x90D0) #define ADC1BUF7 PIC32_R (0x90E0) #define ADC1BUF8 PIC32_R (0x90F0) #define ADC1BUF9 PIC32_R (0x9100) #define ADC1BUFA PIC32_R (0x9110) #define ADC1BUFB PIC32_R (0x9120) #define ADC1BUFC PIC32_R (0x9130) #define ADC1BUFD PIC32_R (0x9140) #define ADC1BUFE PIC32_R (0x9150) #define ADC1BUFF PIC32_R (0x9160) /*-------------------------------------- * Comparator registers. */ #define CM1CON PIC32_R (0xA000) #define CM1CONCLR PIC32_R (0xA004) #define CM1CONSET PIC32_R (0xA008) #define CM1CONINV PIC32_R (0xA00C) #define CM2CON PIC32_R (0xA010) #define CM2CONCLR PIC32_R (0xA014) #define CM2CONSET PIC32_R (0xA018) #define CM2CONINV PIC32_R (0xA01C) #define CMSTAT PIC32_R (0xA060) #define CMSTATCLR PIC32_R (0xA064) #define CMSTATSET PIC32_R (0xA068) #define CMSTATINV PIC32_R (0xA06C) #define CVRCON PIC32_R (0x9800) #define CVRCONCLR PIC32_R (0x9804) #define CVRCONSET PIC32_R (0x9808) #define CVRCONINV PIC32_R (0x980C) /*-------------------------------------- * Parallel master port registers. */ #define PMCON PIC32_R (0x7000) /* Control */ #define PMCONCLR PIC32_R (0x7004) #define PMCONSET PIC32_R (0x7008) #define PMCONINV PIC32_R (0x700C) #define PMMODE PIC32_R (0x7010) /* Mode */ #define PMMODECLR PIC32_R (0x7014) #define PMMODESET PIC32_R (0x7018) #define PMMODEINV PIC32_R (0x701C) #define PMADDR PIC32_R (0x7020) /* Address */ #define PMADDRCLR PIC32_R (0x7024) #define PMADDRSET PIC32_R (0x7028) #define PMADDRINV PIC32_R (0x702C) #define PMDOUT PIC32_R (0x7030) /* Data output */ #define PMDOUTCLR PIC32_R (0x7034) #define PMDOUTSET PIC32_R (0x7038) #define PMDOUTINV PIC32_R (0x703C) #define PMDIN PIC32_R (0x7040) /* Data input */ #define PMDINCLR PIC32_R (0x7044) #define PMDINSET PIC32_R (0x7048) #define PMDININV PIC32_R (0x704C) #define PMAEN PIC32_R (0x7050) /* Pin enable */ #define PMAENCLR PIC32_R (0x7054) #define PMAENSET PIC32_R (0x7058) #define PMAENINV PIC32_R (0x705C) #define PMSTAT PIC32_R (0x7060) /* Status (slave only) */ #define PMSTATCLR PIC32_R (0x7064) #define PMSTATSET PIC32_R (0x7068) #define PMSTATINV PIC32_R (0x706C) /* * PMP Control register. */ #define PIC32_PMCON_RDSP 0x0001 /* Read strobe polarity active-high */ #define PIC32_PMCON_WRSP 0x0002 /* Write strobe polarity active-high */ #define PIC32_PMCON_CS1P 0x0008 /* Chip select 0 polarity active-high */ #define PIC32_PMCON_CS2P 0x0010 /* Chip select 1 polarity active-high */ #define PIC32_PMCON_ALP 0x0020 /* Address latch polarity active-high */ #define PIC32_PMCON_CSF 0x00C0 /* Chip select function bitmask: */ #define PIC32_PMCON_CSF_NONE 0x0000 /* PMCS2 and PMCS1 as A[15:14] */ #define PIC32_PMCON_CSF_CS2 0x0040 /* PMCS2 as chip select */ #define PIC32_PMCON_CSF_CS21 0x0080 /* PMCS2 and PMCS1 as chip select */ #define PIC32_PMCON_PTRDEN 0x0100 /* Read/write strobe port enable */ #define PIC32_PMCON_PTWREN 0x0200 /* Write enable strobe port enable */ #define PIC32_PMCON_PMPTTL 0x0400 /* TTL input buffer select */ #define PIC32_PMCON_ADRMUX 0x1800 /* Address/data mux selection bitmask: */ #define PIC32_PMCON_ADRMUX_NONE 0x0000 /* Address and data separate */ #define PIC32_PMCON_ADRMUX_AD 0x0800 /* Lower address on PMD[7:0], high on PMA[15:8] */ #define PIC32_PMCON_ADRMUX_D8 0x1000 /* All address on PMD[7:0] */ #define PIC32_PMCON_ADRMUX_D16 0x1800 /* All address on PMD[15:0] */ #define PIC32_PMCON_SIDL 0x2000 /* Stop in idle */ #define PIC32_PMCON_FRZ 0x4000 /* Freeze in debug exception */ #define PIC32_PMCON_ON 0x8000 /* Parallel master port enable */ /* * PMP Mode register. */ #define PIC32_PMMODE_WAITE(x) ((x)<<0) /* Wait states: data hold after RW strobe */ #define PIC32_PMMODE_WAITM(x) ((x)<<2) /* Wait states: data RW strobe */ #define PIC32_PMMODE_WAITB(x) ((x)<<6) /* Wait states: data setup to RW strobe */ #define PIC32_PMMODE_MODE 0x0300 /* Mode select bitmask: */ #define PIC32_PMMODE_MODE_SLAVE 0x0000 /* Legacy slave */ #define PIC32_PMMODE_MODE_SLENH 0x0100 /* Enhanced slave */ #define PIC32_PMMODE_MODE_MAST2 0x0200 /* Master mode 2 */ #define PIC32_PMMODE_MODE_MAST1 0x0300 /* Master mode 1 */ #define PIC32_PMMODE_MODE16 0x0400 /* 16-bit mode */ #define PIC32_PMMODE_INCM 0x1800 /* Address increment mode bitmask: */ #define PIC32_PMMODE_INCM_NONE 0x0000 /* No increment/decrement */ #define PIC32_PMMODE_INCM_INC 0x0800 /* Increment address */ #define PIC32_PMMODE_INCM_DEC 0x1000 /* Decrement address */ #define PIC32_PMMODE_INCM_SLAVE 0x1800 /* Slave auto-increment */ #define PIC32_PMMODE_IRQM 0x6000 /* Interrupt request bitmask: */ #define PIC32_PMMODE_IRQM_DIS 0x0000 /* No interrupt generated */ #define PIC32_PMMODE_IRQM_END 0x2000 /* Interrupt at end of read/write cycle */ #define PIC32_PMMODE_IRQM_A3 0x4000 /* Interrupt on address 3 */ #define PIC32_PMMODE_BUSY 0x8000 /* Port is busy */ /* * PMP Address register. */ #define PIC32_PMADDR_PADDR 0x3FFF /* Destination address */ #define PIC32_PMADDR_CS1 0x4000 /* Chip select 1 is active */ #define PIC32_PMADDR_CS2 0x8000 /* Chip select 2 is active */ /* * PMP status register (slave only). */ #define PIC32_PMSTAT_OB0E 0x0001 /* Output buffer 0 empty */ #define PIC32_PMSTAT_OB1E 0x0002 /* Output buffer 1 empty */ #define PIC32_PMSTAT_OB2E 0x0004 /* Output buffer 2 empty */ #define PIC32_PMSTAT_OB3E 0x0008 /* Output buffer 3 empty */ #define PIC32_PMSTAT_OBUF 0x0040 /* Output buffer underflow */ #define PIC32_PMSTAT_OBE 0x0080 /* Output buffer empty */ #define PIC32_PMSTAT_IB0F 0x0100 /* Input buffer 0 full */ #define PIC32_PMSTAT_IB1F 0x0200 /* Input buffer 1 full */ #define PIC32_PMSTAT_IB2F 0x0400 /* Input buffer 2 full */ #define PIC32_PMSTAT_IB3F 0x0800 /* Input buffer 3 full */ #define PIC32_PMSTAT_IBOV 0x4000 /* Input buffer overflow */ #define PIC32_PMSTAT_IBF 0x8000 /* Input buffer full */ /*-------------------------------------- * USB registers. */ #define U1OTGIR PIC32_R (0x85040) /* OTG interrupt flags */ #define U1OTGIE PIC32_R (0x85050) /* OTG interrupt enable */ #define U1OTGSTAT PIC32_R (0x85060) /* Comparator and pin status */ #define U1OTGCON PIC32_R (0x85070) /* Resistor and pin control */ #define U1PWRC PIC32_R (0x85080) /* Power control */ #define U1IR PIC32_R (0x85200) /* Pending interrupt */ #define U1IE PIC32_R (0x85210) /* Interrupt enable */ #define U1EIR PIC32_R (0x85220) /* Pending error interrupt */ #define U1EIE PIC32_R (0x85230) /* Error interrupt enable */ #define U1STAT PIC32_R (0x85240) /* Status FIFO */ #define U1CON PIC32_R (0x85250) /* Control */ #define U1ADDR PIC32_R (0x85260) /* Address */ #define U1BDTP1 PIC32_R (0x85270) /* Buffer descriptor table pointer 1 */ #define U1FRML PIC32_R (0x85280) /* Frame counter low */ #define U1FRMH PIC32_R (0x85290) /* Frame counter high */ #define U1TOK PIC32_R (0x852A0) /* Host control */ #define U1SOF PIC32_R (0x852B0) /* SOF counter */ #define U1BDTP2 PIC32_R (0x852C0) /* Buffer descriptor table pointer 2 */ #define U1BDTP3 PIC32_R (0x852D0) /* Buffer descriptor table pointer 3 */ #define U1CNFG1 PIC32_R (0x852E0) /* Debug and idle */ #define U1EP(n) PIC32_R (0x85300 + (n << 4)) /* Endpoint control */ /* * USB Control register. */ #define PIC32_U1CON_USBEN 0x0001 /* USB module enable (device mode) */ #define PIC32_U1CON_SOFEN 0x0001 /* SOF sent every 1 ms (host mode) */ #define PIC32_U1CON_PPBRST 0x0002 /* Ping-pong buffers reset */ #define PIC32_U1CON_RESUME 0x0004 /* Resume signaling enable */ #define PIC32_U1CON_HOSTEN 0x0008 /* Host mode enable */ #define PIC32_U1CON_USBRST 0x0010 /* USB reset */ #define PIC32_U1CON_PKTDIS 0x0020 /* Packet transfer disable */ #define PIC32_U1CON_TOKBUSY 0x0020 /* Token busy indicator */ #define PIC32_U1CON_SE0 0x0040 /* Single ended zero detected */ #define PIC32_U1CON_JSTATE 0x0080 /* Live differential receiver JSTATE flag */ /* * USB Power control register. */ #define PIC32_U1PWRC_USBPWR 0x0001 /* USB operation enable */ #define PIC32_U1PWRC_USUSPEND 0x0002 /* USB suspend mode */ #define PIC32_U1PWRC_USLPGRD 0x0010 /* USB sleep entry guard */ #define PIC32_U1PWRC_UACTPND 0x0080 /* UAB activity pending */ /* * USB Pending interrupt register. * USB Interrupt enable register. */ #define PIC32_U1I_DETACH 0x0001 /* Detach (host mode) */ #define PIC32_U1I_URST 0x0001 /* USB reset (device mode) */ #define PIC32_U1I_UERR 0x0002 /* USB error condition */ #define PIC32_U1I_SOF 0x0004 /* SOF token */ #define PIC32_U1I_TRN 0x0008 /* Token processing complete */ #define PIC32_U1I_IDLE 0x0010 /* Idle detect */ #define PIC32_U1I_RESUME 0x0020 /* Resume */ #define PIC32_U1I_ATTACH 0x0040 /* Peripheral attach */ #define PIC32_U1I_STALL 0x0080 /* STALL handshake */ /* * USB OTG interrupt flags register. * USB OTG interrupt enable register. */ #define PIC32_U1OTGI_VBUSVD 0x0001 /* A-device Vbus change */ #define PIC32_U1OTGI_SESEND 0x0004 /* B-device Vbus change */ #define PIC32_U1OTGI_SESVD 0x0008 /* Session valid change */ #define PIC32_U1OTGI_ACTV 0x0010 /* Bus activity indicator */ #define PIC32_U1OTGI_LSTATE 0x0020 /* Line state stable */ #define PIC32_U1OTGI_T1MSEC 0x0040 /* 1 millisecond timer expired */ #define PIC32_U1OTGI_ID 0x0080 /* ID state change */ #define PIC32_U1OTGSTAT_VBUSVD 0x0001 /* */ #define PIC32_U1OTGSTAT_SESEND 0x0004 /* */ #define PIC32_U1OTGSTAT_SESVD 0x0008 /* */ #define PIC32_U1OTGSTAT_LSTATE 0x0020 /* */ #define PIC32_U1OTGSTAT_ID 0x0080 /* */ #define PIC32_U1OTGCON_VBUSDIS 0x0001 /* */ #define PIC32_U1OTGCON_VBUSCHG 0x0002 /* */ #define PIC32_U1OTGCON_OTGEN 0x0004 /* */ #define PIC32_U1OTGCON_VBUSON 0x0008 /* */ #define PIC32_U1OTGCON_DMPULDWN 0x0010 /* */ #define PIC32_U1OTGCON_DPPULDWN 0x0020 /* */ #define PIC32_U1OTGCON_DMPULUP 0x0040 /* */ #define PIC32_U1OTGCON_DPPULUP 0x0080 /* */ #define PIC32_U1EI_PID 0x0001 /* */ #define PIC32_U1EI_CRC5 0x0002 /* */ #define PIC32_U1EI_EOF 0x0002 /* */ #define PIC32_U1EI_CRC16 0x0004 /* */ #define PIC32_U1EI_DFN8 0x0008 /* */ #define PIC32_U1EI_BTO 0x0010 /* */ #define PIC32_U1EI_DMA 0x0020 /* */ #define PIC32_U1EI_BMX 0x0040 /* */ #define PIC32_U1EI_BTS 0x0080 /* */ #define PIC32_U1STAT_PPBI 0x0004 /* */ #define PIC32_U1STAT_DIR 0x0008 /* */ #define PIC32_U1STAT_ENDPT(x) (((x) >> 4) & 0xF) /* */ #define PIC32_U1ADDR_DEVADDR 0x007F /* */ #define PIC32_U1ADDR_USBADDR0 0x0001 /* */ #define PIC32_U1ADDR_DEVADDR1 0x0002 /* */ #define PIC32_U1ADDR_DEVADDR2 0x0004 /* */ #define PIC32_U1ADDR_DEVADDR3 0x0008 /* */ #define PIC32_U1ADDR_DEVADDR4 0x0010 /* */ #define PIC32_U1ADDR_DEVADDR5 0x0020 /* */ #define PIC32_U1ADDR_DEVADDR6 0x0040 /* */ #define PIC32_U1ADDR_LSPDEN 0x0080 /* */ #define PIC32_U1FRML_FRM0 0x0001 /* */ #define PIC32_U1FRML_FRM1 0x0002 /* */ #define PIC32_U1FRML_FRM2 0x0004 /* */ #define PIC32_U1FRML_FRM3 0x0008 /* */ #define PIC32_U1FRML_FRM4 0x0010 /* */ #define PIC32_U1FRML_FRM5 0x0020 /* */ #define PIC32_U1FRML_FRM6 0x0040 /* */ #define PIC32_U1FRML_FRM7 0x0080 /* */ #define PIC32_U1FRMH_FRM8 0x0001 /* */ #define PIC32_U1FRMH_FRM9 0x0002 /* */ #define PIC32_U1FRMH_FRM10 0x0004 /* */ #define PIC32_U1TOK_EP0 0x0001 /* */ #define PIC32_U1TOK_EP 0x000F /* */ #define PIC32_U1TOK_EP1 0x0002 /* */ #define PIC32_U1TOK_EP2 0x0004 /* */ #define PIC32_U1TOK_EP3 0x0008 /* */ #define PIC32_U1TOK_PID0 0x0010 /* */ #define PIC32_U1TOK_PID 0x00F0 /* */ #define PIC32_U1TOK_PID1 0x0020 /* */ #define PIC32_U1TOK_PID2 0x0040 /* */ #define PIC32_U1TOK_PID3 0x0080 /* */ #define PIC32_U1CNFG1_USBSIDL 0x0010 /* */ #define PIC32_U1CNFG1_USBFRZ 0x0020 /* */ #define PIC32_U1CNFG1_UOEMON 0x0040 /* */ #define PIC32_U1CNFG1_UTEYE 0x0080 /* */ #define PIC32_U1EP_EPHSHK 0x0001 /* */ #define PIC32_U1EP_EPSTALL 0x0002 /* */ #define PIC32_U1EP_EPTXEN 0x0004 /* */ #define PIC32_U1EP_EPRXEN 0x0008 /* */ #define PIC32_U1EP_EPCONDIS 0x0010 /* */ #define PIC32_U1EP_RETRYDIS 0x0040 /* */ #define PIC32_U1EP_LSPD 0x0080 /* */ /* DB status field values */ #define PIC32_DB_BSTALL (1 << 2) #define PIC32_DB_DTS (1 << 3) #define PIC32_DB_NINC (1 << 4) #define PIC32_DB_KEEP (1 << 5) #define PIC32_DB_DATA1 (1 << 6) #define PIC32_DB_UOWN (1 << 7) #define PIC32_DB_GET_PID(x) (((x) >> 2) & 0xF) #define PIC32_DB_SET_PID(x) (((x) & 0xF) << 2) #define PIC32_DB_GET_COUNT(x) (((x) >> 16) & 0x3FF) #define PIC32_DB_SET_COUNT(x) (((x) & 0x3FF) << 16) /*-------------------------------------- * SPI registers. */ #ifdef PIC32MX7 #define SPI3CON PIC32_R (0x5800) /* Control */ #define SPI3CONCLR PIC32_R (0x5804) #define SPI3CONSET PIC32_R (0x5808) #define SPI3CONINV PIC32_R (0x580C) #define SPI3STAT PIC32_R (0x5810) /* Status */ #define SPI3STATCLR PIC32_R (0x5814) #define SPI3STATSET PIC32_R (0x5818) #define SPI3STATINV PIC32_R (0x581C) #define SPI3BUF PIC32_R (0x5820) /* Transmit and receive buffer */ #define SPI3BRG PIC32_R (0x5830) /* Baud rate generator */ #define SPI3BRGCLR PIC32_R (0x5834) #define SPI3BRGSET PIC32_R (0x5838) #define SPI3BRGINV PIC32_R (0x583C) #define SPI4CON PIC32_R (0x5C00) /* Control */ #define SPI4CONCLR PIC32_R (0x5C04) #define SPI4CONSET PIC32_R (0x5C08) #define SPI4CONINV PIC32_R (0x5C0C) #define SPI4STAT PIC32_R (0x5C10) /* Status */ #define SPI4STATCLR PIC32_R (0x5C14) #define SPI4STATSET PIC32_R (0x5C18) #define SPI4STATINV PIC32_R (0x5C1C) #define SPI4BUF PIC32_R (0x5C20) /* Transmit and receive buffer */ #define SPI4BRG PIC32_R (0x5C30) /* Baud rate generator */ #define SPI4BRGCLR PIC32_R (0x5C34) #define SPI4BRGSET PIC32_R (0x5C38) #define SPI4BRGINV PIC32_R (0x5C3C) #define SPI1CON PIC32_R (0x5E00) /* Control */ #define SPI1CONCLR PIC32_R (0x5E04) #define SPI1CONSET PIC32_R (0x5E08) #define SPI1CONINV PIC32_R (0x5E0C) #define SPI1STAT PIC32_R (0x5E10) /* Status */ #define SPI1STATCLR PIC32_R (0x5E14) #define SPI1STATSET PIC32_R (0x5E18) #define SPI1STATINV PIC32_R (0x5E1C) #define SPI1BUF PIC32_R (0x5E20) /* Transmit and receive buffer */ #define SPI1BRG PIC32_R (0x5E30) /* Baud rate generator */ #define SPI1BRGCLR PIC32_R (0x5E34) #define SPI1BRGSET PIC32_R (0x5E38) #define SPI1BRGINV PIC32_R (0x5E3C) #else #define SPI1CON PIC32_R (0x5800) /* Control */ #define SPI1CONCLR PIC32_R (0x5804) #define SPI1CONSET PIC32_R (0x5808) #define SPI1CONINV PIC32_R (0x580C) #define SPI1STAT PIC32_R (0x5810) /* Status */ #define SPI1STATCLR PIC32_R (0x5814) #define SPI1STATSET PIC32_R (0x5818) #define SPI1STATINV PIC32_R (0x581C) #define SPI1BUF PIC32_R (0x5820) /* Transmit and receive buffer */ #define SPI1BRG PIC32_R (0x5830) /* Baud rate generator */ #define SPI1BRGCLR PIC32_R (0x5834) #define SPI1BRGSET PIC32_R (0x5838) #define SPI1BRGINV PIC32_R (0x583C) #endif #define SPI2CON PIC32_R (0x5A00) /* Control */ #define SPI2CONCLR PIC32_R (0x5A04) #define SPI2CONSET PIC32_R (0x5A08) #define SPI2CONINV PIC32_R (0x5A0C) #define SPI2STAT PIC32_R (0x5A10) /* Status */ #define SPI2STATCLR PIC32_R (0x5A14) #define SPI2STATSET PIC32_R (0x5A18) #define SPI2STATINV PIC32_R (0x5A1C) #define SPI2BUF PIC32_R (0x5A20) /* Transmit and receive buffer */ #define SPI2BRG PIC32_R (0x5A30) /* Baud rate generator */ #define SPI2BRGCLR PIC32_R (0x5A34) #define SPI2BRGSET PIC32_R (0x5A38) #define SPI2BRGINV PIC32_R (0x5A3C) /* * SPI Control register. */ #define PIC32_SPICON_MSTEN 0x00000020 /* Master mode */ #define PIC32_SPICON_CKP 0x00000040 /* Idle clock is high level */ #define PIC32_SPICON_SSEN 0x00000080 /* Slave mode: SSx pin enable */ #define PIC32_SPICON_CKE 0x00000100 /* Output data changes on * transition from active clock * state to Idle clock state */ #define PIC32_SPICON_SMP 0x00000200 /* Master mode: input data sampled * at end of data output time. */ #define PIC32_SPICON_MODE16 0x00000400 /* 16-bit data width */ #define PIC32_SPICON_MODE32 0x00000800 /* 32-bit data width */ #define PIC32_SPICON_DISSDO 0x00001000 /* SDOx pin is not used */ #define PIC32_SPICON_SIDL 0x00002000 /* Stop in Idle mode */ #define PIC32_SPICON_FRZ 0x00004000 /* Freeze in Debug mode */ #define PIC32_SPICON_ON 0x00008000 /* SPI Peripheral is enabled */ #define PIC32_SPICON_ENHBUF 0x00010000 /* Enhanced buffer enable */ #define PIC32_SPICON_SPIFE 0x00020000 /* Frame synchronization pulse * coincides with the first bit clock */ #define PIC32_SPICON_FRMPOL 0x20000000 /* Frame pulse is active-high */ #define PIC32_SPICON_FRMSYNC 0x40000000 /* Frame sync pulse input (Slave mode) */ #define PIC32_SPICON_FRMEN 0x80000000 /* Framed SPI support */ /* * SPI Status register. */ #define PIC32_SPISTAT_SPIRBF 0x00000001 /* Receive buffer is full */ #define PIC32_SPISTAT_SPITBF 0x00000002 /* Transmit buffer is full */ #define PIC32_SPISTAT_SPITBE 0x00000008 /* Transmit buffer is empty */ #define PIC32_SPISTAT_SPIRBE 0x00000020 /* Receive buffer is empty */ #define PIC32_SPISTAT_SPIROV 0x00000040 /* Receive overflow flag */ #define PIC32_SPISTAT_SPIBUSY 0x00000800 /* SPI is busy */ /*-------------------------------------- * I2C Registers. */ #define I2C1CON PIC32_R (0x5000) #define I2C1CONCLR PIC32_R (0x5004) #define I2C1CONSET PIC32_R (0x5008) #define I2C1CONINV PIC32_R (0x500c) #define I2C1STAT PIC32_R (0x5010) #define I2C1STATCLR PIC32_R (0x5014) #define I2C1STATSET PIC32_R (0x5018) #define I2C1STATINV PIC32_R (0x501c) #define I2C1ADD PIC32_R (0x5020) #define I2C1ADDCLR PIC32_R (0x5024) #define I2C1ADDSET PIC32_R (0x5028) #define I2C1ADDINV PIC32_R (0x502c) #define I2C1MSK PIC32_R (0x5030) #define I2C1MSKCLR PIC32_R (0x5034) #define I2C1MSKSET PIC32_R (0x5038) #define I2C1MSKINV PIC32_R (0x503c) #define I2C1BRG PIC32_R (0x5040) #define I2C1BRGCLR PIC32_R (0x5044) #define I2C1BRGSET PIC32_R (0x5048) #define I2C1BRGINV PIC32_R (0x504c) #define I2C1TRN PIC32_R (0x5050) #define I2C1TRNCLR PIC32_R (0x5054) #define I2C1TRNSET PIC32_R (0x5058) #define I2C1TRNINV PIC32_R (0x505c) #define I2C1RCV PIC32_R (0x5060) #define I2C2CON PIC32_R (0x5200) #define I2C2CONCLR PIC32_R (0x5204) #define I2C2CONSET PIC32_R (0x5208) #define I2C2CONINV PIC32_R (0x520c) #define I2C2STAT PIC32_R (0x5210) #define I2C2STATCLR PIC32_R (0x5214) #define I2C2STATSET PIC32_R (0x5218) #define I2C2STATINV PIC32_R (0x521c) #define I2C2ADD PIC32_R (0x5220) #define I2C2ADDCLR PIC32_R (0x5224) #define I2C2ADDSET PIC32_R (0x5228) #define I2C2ADDINV PIC32_R (0x522c) #define I2C2MSK PIC32_R (0x5230) #define I2C2MSKCLR PIC32_R (0x5234) #define I2C2MSKSET PIC32_R (0x5238) #define I2C2MSKINV PIC32_R (0x523c) #define I2C2BRG PIC32_R (0x5240) #define I2C2BRGCLR PIC32_R (0x5244) #define I2C2BRGSET PIC32_R (0x5248) #define I2C2BRGINV PIC32_R (0x524c) #define I2C2TRN PIC32_R (0x5250) #define I2C2TRNCLR PIC32_R (0x5254) #define I2C2TRNSET PIC32_R (0x5258) #define I2C2TRNINV PIC32_R (0x525c) #define I2C2RCV PIC32_R (0x5260) /* * I2C Control register */ #define PIC32_I2CCON_SEN 0x00000001 #define PIC32_I2CCON_RSEN 0x00000002 #define PIC32_I2CCON_PEN 0x00000004 #define PIC32_I2CCON_RCEN 0x00000008 #define PIC32_I2CCON_ACKEN 0x00000010 #define PIC32_I2CCON_ACKDT 0x00000020 #define PIC32_I2CCON_STREN 0x00000040 #define PIC32_I2CCON_GCEN 0x00000080 #define PIC32_I2CCON_SMEN 0x00000100 #define PIC32_I2CCON_DISSLW 0x00000200 #define PIC32_I2CCON_A10M 0x00000400 #define PIC32_I2CCON_STRICT 0x00000800 #define PIC32_I2CCON_SLCREL 0x00001000 #define PIC32_I2CCON_SIDL 0x00002000 #define PIC32_I2CCON_ON 0x00008000 /* * I2C Status register */ #define PIC32_I2CSTAT_TBF 0x00000001 #define PIC32_I2CSTAT_RBF 0x00000002 #define PIC32_I2CSTAT_RW 0x00000004 #define PIC32_I2CSTAT_S 0x00000008 #define PIC32_I2CSTAT_P 0x00000010 #define PIC32_I2CSTAT_DA 0x00000020 #define PIC32_I2CSTAT_I2COV 0x00000040 #define PIC32_I2CSTAT_IWCOL 0x00000080 #define PIC32_I2CSTAT_ADD10 0x00000100 #define PIC32_I2CSTAT_GCSTAT 0x00000200 #define PIC32_I2CSTAT_BCL 0x00000400 #define PIC32_I2CSTAT_TRSTAT 0x00004000 #define PIC32_I2CSTAT_ACKSTAT 0x00008000 /*-------------------------------------- * DMA controller registers. */ #define DMACON PIC32_R (0x83000) /* DMA Control */ #define DMACONCLR PIC32_R (0x83004) #define DMACONSET PIC32_R (0x83008) #define DMACONINV PIC32_R (0x8300C) #define DMASTAT PIC32_R (0x83010) /* DMA Status */ #define DMAADDR PIC32_R (0x83020) /* DMA Address */ // TODO: other DMA registers. /*-------------------------------------- * System controller registers. */ #define OSCCON PIC32_R (0xf000) /* Oscillator Control */ #define OSCCONCLR PIC32_R (0xf004) #define OSCCONSET PIC32_R (0xf008) #define OSCCONINV PIC32_R (0xf00C) #define OSCTUN PIC32_R (0xf010) #define DDPCON PIC32_R (0xf200) /* Debug Data Port Control */ #define DEVID PIC32_R (0xf220) #define SYSKEY PIC32_R (0xf230) #define RCON PIC32_R (0xf600) #define RCONCLR PIC32_R (0xf604) #define RCONSET PIC32_R (0xf608) #define RCONINV PIC32_R (0xf60C) #define RSWRST PIC32_R (0xf610) #define RSWRSTCLR PIC32_R (0xf614) #define RSWRSTSET PIC32_R (0xf618) #define RSWRSTINV PIC32_R (0xf61C) /* * Oscillator control register. */ #define PIC32_OSCCON_OSWEN 0x00000001 /* Oscillator switch enable */ #define PIC32_OSCCON_SOSCEN 0x00000002 /* Secondary oscillator enable */ #define PIC32_OSCCON_UFRCEN 0x00000004 /* USB FRC clock enable */ #define PIC32_OSCCON_CF 0x00000008 /* Clock fail detect */ #define PIC32_OSCCON_SLPEN 0x00000010 /* Sleep mode enable */ #define PIC32_OSCCON_LOCK 0x00000020 /* PLL lock status */ #define PIC32_OSCCON_ULOCK 0x00000040 /* USB PLL lock status */ #define PIC32_OSCCON_CLKLOCK 0x00000080 /* Clock selection lock enable */ #define PIC32_OSCCON_NOSC 0x00000700 /* New oscillator selection */ #define PIC32_OSCCON_COSC 0x00007000 /* Current oscillator selection */ #define PIC32_OSCCON_PLLMULT 0x00070000 /* PLL multiplier */ #define PIC32_OSCCON_PBDIV_MASK 0x00180000 /* Peripheral bus clock divisor */ #define PIC32_OSCCON_PBDIV_1 0x00000000 /* SYSCLK / 1 */ #define PIC32_OSCCON_PBDIV_2 0x00080000 /* SYSCLK / 2 */ #define PIC32_OSCCON_PBDIV_4 0x00100000 /* SYSCLK / 4 */ #define PIC32_OSCCON_PBDIV_8 0x00180000 /* SYSCLK / 8 */ #define PIC32_OSCCON_SOSCRDY 0x00400000 /* Secondary oscillator ready */ #define PIC32_OSCCON_FRCDIV 0x07000000 /* Fast internal RC clock divider */ #define PIC32_OSCCON_PLLODIV 0x38000000 /* Output divider for PLL */ /* * Reset control register. */ #define PIC32_RCON_POR 0x00000001 #define PIC32_RCON_BOR 0x00000002 #define PIC32_RCON_IDLE 0x00000004 #define PIC32_RCON_SLEEP 0x00000008 #define PIC32_RCON_WDTO 0x00000010 #define PIC32_RCON_SWR 0x00000040 #define PIC32_RCON_EXTR 0x00000080 #define PIC32_RCON_VREGS 0x00000100 #define PIC32_RCON_CMR 0x00000200 /*-------------------------------------- * Prefetch cache controller registers. */ #define CHECON PIC32_R (0x84000) /* Prefetch cache control */ #define CHECONCLR PIC32_R (0x84004) #define CHECONSET PIC32_R (0x84008) #define CHECONINV PIC32_R (0x8400C) // TODO: other prefetech registers /*-------------------------------------- * Bus matrix control registers. */ #define BMXCON PIC32_R (0x82000) /* Memory configuration */ #define BMXCONCLR PIC32_R (0x82004) #define BMXCONSET PIC32_R (0x82008) #define BMXCONINV PIC32_R (0x8200C) #define BMXDKPBA PIC32_R (0x82010) /* Data RAM kernel program base address */ #define BMXDUDBA PIC32_R (0x82020) /* Data RAM user data base address */ #define BMXDUPBA PIC32_R (0x82030) /* Data RAM user program base address */ #define BMXDRMSZ PIC32_R (0x82040) /* Data RAM size */ #define BMXPUPBA PIC32_R (0x82050) /* Program Flash user program base address */ #define BMXPFMSZ PIC32_R (0x82060) /* Program Flash size */ #define BMXBOOTSZ PIC32_R (0x82070) /* Boot Flash size */ /*-------------------------------------- * Non-volatile memory control registers. */ #define NVMCON PIC32_R (0x0F400) #define NVMCONCLR PIC32_R (0x0F404) #define NVMCONSET PIC32_R (0x0F408) #define NVMCONINV PIC32_R (0x0F40C) #define NVMKEY PIC32_R (0x0F410) #define NVMADDR PIC32_R (0x0F420) #define NVMADDRCLR PIC32_R (0x0F424) #define NVMADDRSET PIC32_R (0x0F428) #define NVMADDRINV PIC32_R (0x0F42C) #define NVMDATA PIC32_R (0x0F430) #define NVMSRCADDR PIC32_R (0x0F440) #define PIC32_NVMCON_NVMOP 0x0000000F #define PIC32_NVMCON_NOP 0 /* No operation */ #define PIC32_NVMCON_WORD_PGM 1 /* Word program */ #define PIC32_NVMCON_ROW_PGM 3 /* Row program */ #define PIC32_NVMCON_PAGE_ERASE 4 /* Page erase */ #define PIC32_NVMCON_LVDSTAT 0x00000800 #define PIC32_NVMCON_LVDERR 0x00001000 #define PIC32_NVMCON_WRERR 0x00002000 #define PIC32_NVMCON_WREN 0x00004000 #define PIC32_NVMCON_WR 0x00008000 /* * Timer1 registers */ #define T1CON PIC32_R (0x0600) #define T1CONCLR PIC32_R (0x0604) #define T1CONSET PIC32_R (0x0608) #define TMR1 PIC32_R (0x0610) #define PR1 PIC32_R (0x0620) /* * Timer2 registers */ #define T2CON PIC32_R (0x0800) #define T2CONCLR PIC32_R (0x0804) #define T2CONSET PIC32_R (0x0808) #define TMR2 PIC32_R (0x0810) #define PR2 PIC32_R (0x0820) /* * Timer3 registers */ #define T3CON PIC32_R (0x0a00) #define T3CONCLR PIC32_R (0x0a04) #define T3CONSET PIC32_R (0x0a08) #define TMR3 PIC32_R (0x0a10) #define PR3 PIC32_R (0x0a20) /* * Timer4 registers */ #define T4CON PIC32_R (0x0c00) #define T4CONCLR PIC32_R (0x0c04) #define T4CONSET PIC32_R (0x0c08) #define TMR4 PIC32_R (0x0c10) #define PR4 PIC32_R (0x0c20) /* * Timer5 registers */ #define T5CON PIC32_R (0x0e00) #define T5CONCLR PIC32_R (0x0e04) #define T5CONSET PIC32_R (0x0e08) #define TMR5 PIC32_R (0x0e10) #define PR5 PIC32_R (0x0e20) /* * Output compare registers */ #define OC1CON PIC32_R (0x3000) #define OC1CONCLR PIC32_R (0x3004) #define OC1CONSET PIC32_R (0x3008) #define OC1R PIC32_R (0x3010) #define OC1RS PIC32_R (0x3020) #define OC2CON PIC32_R (0x3200) #define OC2CONCLR PIC32_R (0x3204) #define OC2CONSET PIC32_R (0x3208) #define OC2R PIC32_R (0x3210) #define OC2RS PIC32_R (0x3220) #define OC3CON PIC32_R (0x3400) #define OC3CONCLR PIC32_R (0x3404) #define OC3CONSET PIC32_R (0x3408) #define OC3R PIC32_R (0x3410) #define OC3RS PIC32_R (0x3420) #define OC4CON PIC32_R (0x3600) #define OC4CONCLR PIC32_R (0x3604) #define OC4CONSET PIC32_R (0x3608) #define OC4R PIC32_R (0x3610) #define OC4RS PIC32_R (0x3620) #define OC5CON PIC32_R (0x3800) #define OC5CONCLR PIC32_R (0x3804) #define OC5CONSET PIC32_R (0x3808) #define OC5R PIC32_R (0x3810) #define OC5RS PIC32_R (0x3820) /* * Input capture registers */ #define IC1CON PIC32_R (0x2000) #define IC1CONCLR PIC32_R (0x2004) #define IC1CONSET PIC32_R (0x2008) #define IC1BUF PIC32_R (0x2010) #define IC2CON PIC32_R (0x2200) #define IC2CONCLR PIC32_R (0x2204) #define IC2CONSET PIC32_R (0x2208) #define IC2BUF PIC32_R (0x2210) #define IC3CON PIC32_R (0x2400) #define IC3CONCLR PIC32_R (0x2404) #define IC3CONSET PIC32_R (0x2408) #define IC3BUF PIC32_R (0x2410) #define IC4CON PIC32_R (0x2600) #define IC4CONCLR PIC32_R (0x2604) #define IC4CONSET PIC32_R (0x2608) #define IC4BUF PIC32_R (0x2610) #define IC5CON PIC32_R (0x2800) #define IC5CONCLR PIC32_R (0x2804) #define IC5CONSET PIC32_R (0x2808) #define IC5BUF PIC32_R (0x2810) #define BLRKEY *(volatile unsigned*)(0x80000000) /*-------------------------------------- * Configuration registers. */ #define DEVCFG0 *(volatile unsigned*)0x9fc02ffc #define DEVCFG1 *(volatile unsigned*)0x9fc02ff8 #define DEVCFG2 *(volatile unsigned*)0x9fc02ff4 #define DEVCFG3 *(volatile unsigned*)0x9fc02ff0 #define PIC32_DEVCFG(cfg0, cfg1, cfg2, cfg3) \ asm (".section .config"); \ unsigned __DEVCFG0 __attribute__ ((section (".config0"))) = (cfg0) ^ 0x7fffffff; \ unsigned __DEVCFG1 __attribute__ ((section (".config1"))) = (cfg1) | DEVCFG1_UNUSED; \ unsigned __DEVCFG2 __attribute__ ((section (".config2"))) = (cfg2) | DEVCFG2_UNUSED; \ unsigned __DEVCFG3 __attribute__ ((section (".config3"))) = (cfg3) | DEVCFG3_UNUSED /* * Config0 register at 1fc02ffc, inverted. */ #define DEVCFG0_DEBUG_MASK 0x00000003 /* Debugger enable bits */ #define DEVCFG0_DEBUG_DISABLED 0x00000000 /* Debugger disabled */ #define DEVCFG0_DEBUG_ENABLED 0x00000002 /* Debugger enabled */ #define DEVCFG0_ICESEL 0x00000008 /* Use PGC1/PGD1 (default PGC2/PGD2) */ #define DEVCFG0_PWP_MASK 0x000ff000 /* Program flash write protect */ #define DEVCFG0_BWP 0x01000000 /* Boot flash write protect */ #define DEVCFG0_CP 0x10000000 /* Code protect */ /* * Config1 register at 1fc02ff8. */ #define DEVCFG1_UNUSED 0xff600858 #define DEVCFG1_FNOSC_MASK 0x00000007 /* Oscillator selection */ #define DEVCFG1_FNOSC_FRC 0x00000000 /* Fast RC */ #define DEVCFG1_FNOSC_FRCDIVPLL 0x00000001 /* Fast RC with divide-by-N and PLL */ #define DEVCFG1_FNOSC_PRI 0x00000002 /* Primary oscillator XT, HS, EC */ #define DEVCFG1_FNOSC_PRIPLL 0x00000003 /* Primary with PLL */ #define DEVCFG1_FNOSC_SEC 0x00000004 /* Secondary oscillator */ #define DEVCFG1_FNOSC_LPRC 0x00000005 /* Low-power RC */ #define DEVCFG1_FNOSC_FRCDIV 0x00000007 /* Fast RC with divide-by-N */ #define DEVCFG1_FSOSCEN 0x00000020 /* Secondary oscillator enable */ #define DEVCFG1_IESO 0x00000080 /* Internal-external switch over */ #define DEVCFG1_POSCMOD_MASK 0x00000300 /* Primary oscillator config */ #define DEVCFG1_POSCMOD_EXT 0x00000000 /* External mode */ #define DEVCFG1_POSCMOD_XT 0x00000100 /* XT oscillator */ #define DEVCFG1_POSCMOD_HS 0x00000200 /* HS oscillator */ #define DEVCFG1_POSCMOD_DISABLE 0x00000300 /* Disabled */ #define DEVCFG1_OSCIOFNC 0x00000400 /* CLKO output active */ #define DEVCFG1_FPBDIV_MASK 0x00003000 /* Peripheral bus clock divisor */ #define DEVCFG1_FPBDIV_1 0x00000000 /* SYSCLK / 1 */ #define DEVCFG1_FPBDIV_2 0x00001000 /* SYSCLK / 2 */ #define DEVCFG1_FPBDIV_4 0x00002000 /* SYSCLK / 4 */ #define DEVCFG1_FPBDIV_8 0x00003000 /* SYSCLK / 8 */ #define DEVCFG1_FCKM_DISABLE 0x00004000 /* Fail-safe clock monitor disable */ #define DEVCFG1_FCKS_DISABLE 0x00008000 /* Clock switching disable */ #define DEVCFG1_WDTPS_MASK 0x001f0000 /* Watchdog postscale */ #define DEVCFG1_WDTPS_1 0x00000000 /* 1:1 */ #define DEVCFG1_WDTPS_2 0x00010000 /* 1:2 */ #define DEVCFG1_WDTPS_4 0x00020000 /* 1:4 */ #define DEVCFG1_WDTPS_8 0x00030000 /* 1:8 */ #define DEVCFG1_WDTPS_16 0x00040000 /* 1:16 */ #define DEVCFG1_WDTPS_32 0x00050000 /* 1:32 */ #define DEVCFG1_WDTPS_64 0x00060000 /* 1:64 */ #define DEVCFG1_WDTPS_128 0x00070000 /* 1:128 */ #define DEVCFG1_WDTPS_256 0x00080000 /* 1:256 */ #define DEVCFG1_WDTPS_512 0x00090000 /* 1:512 */ #define DEVCFG1_WDTPS_1024 0x000a0000 /* 1:1024 */ #define DEVCFG1_WDTPS_2048 0x000b0000 /* 1:2048 */ #define DEVCFG1_WDTPS_4096 0x000c0000 /* 1:4096 */ #define DEVCFG1_WDTPS_8192 0x000d0000 /* 1:8192 */ #define DEVCFG1_WDTPS_16384 0x000e0000 /* 1:16384 */ #define DEVCFG1_WDTPS_32768 0x000f0000 /* 1:32768 */ #define DEVCFG1_WDTPS_65536 0x00100000 /* 1:65536 */ #define DEVCFG1_WDTPS_131072 0x00110000 /* 1:131072 */ #define DEVCFG1_WDTPS_262144 0x00120000 /* 1:262144 */ #define DEVCFG1_WDTPS_524288 0x00130000 /* 1:524288 */ #define DEVCFG1_WDTPS_1048576 0x00140000 /* 1:1048576 */ #define DEVCFG1_FWDTEN 0x00800000 /* Watchdog enable */ #define WDTCON PIC32_R (0x0000) /* Watchdog timer control */ #define WDTCONCLR PIC32_R (0x0004) /* Watchdog timer control */ #define WDTCONSET PIC32_R (0x0008) /* Watchdog timer control */ /* * Config2 register at 1fc02ff4. */ #define DEVCFG2_UNUSED 0xfff87888 #define DEVCFG2_FPLLIDIV_MASK 0x00000007 /* PLL input divider */ #define DEVCFG2_FPLLIDIV_1 0x00000000 /* 1x */ #define DEVCFG2_FPLLIDIV_2 0x00000001 /* 2x */ #define DEVCFG2_FPLLIDIV_3 0x00000002 /* 3x */ #define DEVCFG2_FPLLIDIV_4 0x00000003 /* 4x */ #define DEVCFG2_FPLLIDIV_5 0x00000004 /* 5x */ #define DEVCFG2_FPLLIDIV_6 0x00000005 /* 6x */ #define DEVCFG2_FPLLIDIV_10 0x00000006 /* 10x */ #define DEVCFG2_FPLLIDIV_12 0x00000007 /* 12x */ #define DEVCFG2_FPLLMUL_MASK 0x00000070 /* PLL multiplier */ #define DEVCFG2_FPLLMUL_15 0x00000000 /* 15x */ #define DEVCFG2_FPLLMUL_16 0x00000010 /* 16x */ #define DEVCFG2_FPLLMUL_17 0x00000020 /* 17x */ #define DEVCFG2_FPLLMUL_18 0x00000030 /* 18x */ #define DEVCFG2_FPLLMUL_19 0x00000040 /* 19x */ #define DEVCFG2_FPLLMUL_20 0x00000050 /* 20x */ #define DEVCFG2_FPLLMUL_21 0x00000060 /* 21x */ #define DEVCFG2_FPLLMUL_24 0x00000070 /* 24x */ #define DEVCFG2_UPLLIDIV_MASK 0x00000700 /* USB PLL input divider */ #define DEVCFG2_UPLLIDIV_1 0x00000000 /* 1x */ #define DEVCFG2_UPLLIDIV_2 0x00000100 /* 2x */ #define DEVCFG2_UPLLIDIV_3 0x00000200 /* 3x */ #define DEVCFG2_UPLLIDIV_4 0x00000300 /* 4x */ #define DEVCFG2_UPLLIDIV_5 0x00000400 /* 5x */ #define DEVCFG2_UPLLIDIV_6 0x00000500 /* 6x */ #define DEVCFG2_UPLLIDIV_10 0x00000600 /* 10x */ #define DEVCFG2_UPLLIDIV_12 0x00000700 /* 12x */ #define DEVCFG2_UPLLDIS 0x00008000 /* Disable USB PLL */ #define DEVCFG2_FPLLODIV_MASK 0x00070000 /* Default postscaler for PLL */ #define DEVCFG2_FPLLODIV_1 0x00000000 /* 1x */ #define DEVCFG2_FPLLODIV_2 0x00010000 /* 2x */ #define DEVCFG2_FPLLODIV_4 0x00020000 /* 4x */ #define DEVCFG2_FPLLODIV_8 0x00030000 /* 8x */ #define DEVCFG2_FPLLODIV_16 0x00040000 /* 16x */ #define DEVCFG2_FPLLODIV_32 0x00050000 /* 32x */ #define DEVCFG2_FPLLODIV_64 0x00060000 /* 64x */ #define DEVCFG2_FPLLODIV_256 0x00070000 /* 256x */ /* * Config3 register at 1fc02ff0. */ #define DEVCFG3_UNUSED 0x38f80000 #define DEVCFG3_USERID_MASK 0x0000ffff /* User-defined ID */ #define DEVCFG3_USERID(x) ((x) & 0xffff) #define DEVCFG3_FSRSSEL_MASK 0x00070000 /* SRS select */ #define DEVCFG3_FSRSSEL_ALL 0x00000000 /* All irqs assigned to shadow set */ #define DEVCFG3_FSRSSEL_1 0x00010000 /* Assign irq priority 1 to shadow set */ #define DEVCFG3_FSRSSEL_2 0x00020000 /* Assign irq priority 2 to shadow set */ #define DEVCFG3_FSRSSEL_3 0x00030000 /* Assign irq priority 3 to shadow set */ #define DEVCFG3_FSRSSEL_4 0x00040000 /* Assign irq priority 4 to shadow set */ #define DEVCFG3_FSRSSEL_5 0x00050000 /* Assign irq priority 5 to shadow set */ #define DEVCFG3_FSRSSEL_6 0x00060000 /* Assign irq priority 6 to shadow set */ #define DEVCFG3_FSRSSEL_7 0x00070000 /* Assign irq priority 7 to shadow set */ #define DEVCFG3_FMIIEN 0x01000000 /* Ethernet MII enable */ #define DEVCFG3_FETHIO 0x02000000 /* Ethernet pins default */ #define DEVCFG3_FCANIO 0x04000000 /* CAN pins default */ #define DEVCFG3_FUSBIDIO 0x40000000 /* USBID pin: controlled by USB */ #define DEVCFG3_FVBUSONIO 0x80000000 /* VBuson pin: controlled by USB */ /*-------------------------------------- * Interrupt controller registers. */ #define INTCON PIC32_R (0x81000) /* Interrupt Control */ #define INTCONCLR PIC32_R (0x81004) #define INTCONSET PIC32_R (0x81008) #define INTCONINV PIC32_R (0x8100C) #define INTSTAT PIC32_R (0x81010) /* Interrupt Status */ #define IPTMR PIC32_R (0x81020) /* Temporal Proximity Timer */ #define IPTMRCLR PIC32_R (0x81024) #define IPTMRSET PIC32_R (0x81028) #define IPTMRINV PIC32_R (0x8102C) #define IFS(n) PIC32_R (0x81030+((n)<<4)) /* IFS(0..2) - Interrupt Flag Status */ #define IFSCLR(n) PIC32_R (0x81034+((n)<<4)) #define IFSSET(n) PIC32_R (0x81038+((n)<<4)) #define IFSINV(n) PIC32_R (0x8103C+((n)<<4)) #define IEC(n) PIC32_R (0x81060+((n)<<4)) /* IEC(0..2) - Interrupt Enable Control */ #define IECCLR(n) PIC32_R (0x81064+((n)<<4)) #define IECSET(n) PIC32_R (0x81068+((n)<<4)) #define IECINV(n) PIC32_R (0x8106C+((n)<<4)) #define IPC(n) PIC32_R (0x81090+((n)<<4)) /* IPC(0..12) - Interrupt Priority Control */ #define IPCCLR(n) PIC32_R (0x81094+((n)<<4)) #define IPCSET(n) PIC32_R (0x81098+((n)<<4)) #define IPCINV(n) PIC32_R (0x8109C+((n)<<4)) /* * Interrupt Control register. */ #define PIC32_INTCON_INT0EP 0x0001 /* External interrupt 0 polarity rising edge */ #define PIC32_INTCON_INT1EP 0x0002 /* External interrupt 1 polarity rising edge */ #define PIC32_INTCON_INT2EP 0x0004 /* External interrupt 2 polarity rising edge */ #define PIC32_INTCON_INT3EP 0x0008 /* External interrupt 3 polarity rising edge */ #define PIC32_INTCON_INT4EP 0x0010 /* External interrupt 4 polarity rising edge */ #define PIC32_INTCON_TPC(x) ((x)<<8) /* Temporal proximity group priority */ #define PIC32_INTCON_MVEC 0x1000 /* Multi-vectored mode */ #define PIC32_INTCON_FRZ 0x4000 /* Freeze in debug mode */ #define PIC32_INTCON_SS0 0x8000 /* Single vector has a shadow register set */ /* * Interrupt Status register. */ #define PIC32_INTSTAT_VEC(s) ((s) & 0xFF) /* Interrupt vector */ #define PIC32_INTSTAT_SRIPL(s) ((s) >> 8 & 7) /* Requested priority level */ #define PIC32_INTSTAT_SRIPL_MASK 0x0700 /* * Interrupt Prority Control register. */ #define PIC32_IPC_IS0(x) (x) /* Interrupt 0 subpriority */ #define PIC32_IPC_IP0(x) ((x)<<2) /* Interrupt 0 priority */ #define PIC32_IPC_IS1(x) ((x)<<8) /* Interrupt 1 subpriority */ #define PIC32_IPC_IP1(x) ((x)<<10) /* Interrupt 1 priority */ #define PIC32_IPC_IS2(x) ((x)<<16) /* Interrupt 2 subpriority */ #define PIC32_IPC_IP2(x) ((x)<<18) /* Interrupt 2 priority */ #define PIC32_IPC_IS3(x) ((x)<<24) /* Interrupt 3 subpriority */ #define PIC32_IPC_IP3(x) ((x)<<26) /* Interrupt 3 priority */ /* * IRQ numbers for PIC32MX3xx/4xx/5xx/6xx/7xx */ #define PIC32_IRQ_CT 0 /* Core Timer Interrupt */ #define PIC32_IRQ_CS0 1 /* Core Software Interrupt 0 */ #define PIC32_IRQ_CS1 2 /* Core Software Interrupt 1 */ #define PIC32_IRQ_INT0 3 /* External Interrupt 0 */ #define PIC32_IRQ_T1 4 /* Timer1 */ #define PIC32_IRQ_IC1 5 /* Input Capture 1 */ #define PIC32_IRQ_OC1 6 /* Output Compare 1 */ #define PIC32_IRQ_INT1 7 /* External Interrupt 1 */ #define PIC32_IRQ_T2 8 /* Timer2 */ #define PIC32_IRQ_IC2 9 /* Input Capture 2 */ #define PIC32_IRQ_OC2 10 /* Output Compare 2 */ #define PIC32_IRQ_INT2 11 /* External Interrupt 2 */ #define PIC32_IRQ_T3 12 /* Timer3 */ #define PIC32_IRQ_IC3 13 /* Input Capture 3 */ #define PIC32_IRQ_OC3 14 /* Output Compare 3 */ #define PIC32_IRQ_INT3 15 /* External Interrupt 3 */ #define PIC32_IRQ_T4 16 /* Timer4 */ #define PIC32_IRQ_IC4 17 /* Input Capture 4 */ #define PIC32_IRQ_OC4 18 /* Output Compare 4 */ #define PIC32_IRQ_INT4 19 /* External Interrupt 4 */ #define PIC32_IRQ_T5 20 /* Timer5 */ #define PIC32_IRQ_IC5 21 /* Input Capture 5 */ #define PIC32_IRQ_OC5 22 /* Output Compare 5 */ #define PIC32_IRQ_SPI1E 23 /* SPI1 Fault */ #define PIC32_IRQ_SPI1TX 24 /* SPI1 Transfer Done */ #define PIC32_IRQ_SPI1RX 25 /* SPI1 Receive Done */ #define PIC32_IRQ_SPI3E 26 /* SPI3 Fault */ #define PIC32_IRQ_SPI3TX 27 /* SPI3 Transfer Done */ #define PIC32_IRQ_SPI3RX 28 /* SPI3 Receive Done */ #define PIC32_IRQ_U1E 26 /* UART1 Error */ #define PIC32_IRQ_U1RX 27 /* UART1 Receiver */ #define PIC32_IRQ_U1TX 28 /* UART1 Transmitter */ #define PIC32_IRQ_I2C3B 26 /* I2C3 Bus Collision Event */ #define PIC32_IRQ_I2C3S 27 /* I2C3 Slave Event */ #define PIC32_IRQ_I2C3M 28 /* I2C3 Master Event */ #define PIC32_IRQ_I2C1B 29 /* I2C1 Bus Collision Event */ #define PIC32_IRQ_I2C1S 30 /* I2C1 Slave Event */ #define PIC32_IRQ_I2C1M 31 /* I2C1 Master Event */ #define PIC32_IRQ_CN 32 /* Input Change Interrupt */ #define PIC32_IRQ_AD1 33 /* ADC1 Convert Done */ #define PIC32_IRQ_PMP 34 /* Parallel Master Port */ #define PIC32_IRQ_CMP1 35 /* Comparator Interrupt */ #define PIC32_IRQ_CMP2 36 /* Comparator Interrupt */ #define PIC32_IRQ_SPI2E 37 /* SPI2 Fault */ #define PIC32_IRQ_SPI2TX 38 /* SPI2 Transfer Done */ #define PIC32_IRQ_SPI2RX 39 /* SPI2 Receive Done */ #define PIC32_IRQ_U3E 37 /* UART3 Error */ #define PIC32_IRQ_U3RX 38 /* UART3 Receiver */ #define PIC32_IRQ_U3TX 39 /* UART3 Transmitter */ #define PIC32_IRQ_I2C4B 37 /* I2C4 Bus Collision Event */ #define PIC32_IRQ_I2C4S 38 /* I2C4 Slave Event */ #define PIC32_IRQ_I2C4M 39 /* I2C4 Master Event */ #define PIC32_IRQ_SPI4E 40 /* SPI4 Fault */ #define PIC32_IRQ_SPI4TX 41 /* SPI4 Transfer Done */ #define PIC32_IRQ_SPI4RX 42 /* SPI4 Receive Done */ #define PIC32_IRQ_U2E 40 /* UART2 Error */ #define PIC32_IRQ_U2RX 41 /* UART2 Receiver */ #define PIC32_IRQ_U2TX 42 /* UART2 Transmitter */ #define PIC32_IRQ_I2C5B 40 /* I2C5 Bus Collision Event */ #define PIC32_IRQ_I2C5S 41 /* I2C5 Slave Event */ #define PIC32_IRQ_I2C5M 42 /* I2C5 Master Event */ #define PIC32_IRQ_I2C2B 43 /* I2C2 Bus Collision Event */ #define PIC32_IRQ_I2C2S 44 /* I2C2 Slave Event */ #define PIC32_IRQ_I2C2M 45 /* I2C2 Master Event */ #define PIC32_IRQ_FSCM 46 /* Fail-Safe Clock Monitor */ #define PIC32_IRQ_RTCC 47 /* Real-Time Clock and Calendar */ #define PIC32_IRQ_DMA0 48 /* DMA Channel 0 */ #define PIC32_IRQ_DMA1 49 /* DMA Channel 1 */ #define PIC32_IRQ_DMA2 50 /* DMA Channel 2 */ #define PIC32_IRQ_DMA3 51 /* DMA Channel 3 */ #define PIC32_IRQ_DMA4 52 /* DMA Channel 4 */ #define PIC32_IRQ_DMA5 53 /* DMA Channel 5 */ #define PIC32_IRQ_DMA6 54 /* DMA Channel 6 */ #define PIC32_IRQ_DMA7 55 /* DMA Channel 7 */ #define PIC32_IRQ_FCE 56 /* Flash Control Event */ #define PIC32_IRQ_USB 57 /* USB */ #define PIC32_IRQ_CAN1 58 /* Control Area Network 1 */ #define PIC32_IRQ_CAN2 59 /* Control Area Network 2 */ #define PIC32_IRQ_ETH 60 /* Ethernet Interrupt */ #define PIC32_IRQ_IC1E 61 /* Input Capture 1 Error */ #define PIC32_IRQ_IC2E 62 /* Input Capture 2 Error */ #define PIC32_IRQ_IC3E 63 /* Input Capture 3 Error */ #define PIC32_IRQ_IC4E 64 /* Input Capture 4 Error */ #define PIC32_IRQ_IC5E 65 /* Input Capture 5 Error */ #define PIC32_IRQ_PMPE 66 /* Parallel Master Port Error */ #define PIC32_IRQ_U4E 67 /* UART4 Error */ #define PIC32_IRQ_U4RX 68 /* UART4 Receiver */ #define PIC32_IRQ_U4TX 69 /* UART4 Transmitter */ #define PIC32_IRQ_U6E 70 /* UART6 Error */ #define PIC32_IRQ_U6RX 71 /* UART6 Receiver */ #define PIC32_IRQ_U6TX 72 /* UART6 Transmitter */ #define PIC32_IRQ_U5E 73 /* UART5 Error */ #define PIC32_IRQ_U5RX 74 /* UART5 Receiver */ #define PIC32_IRQ_U5TX 75 /* UART5 Transmitter */ /* * Interrupt vector numbers for PIC32MX3xx/4xx/5xx/6xx/7xx */ #define PIC32_VECT_CT 0 /* Core Timer Interrupt */ #define PIC32_VECT_CS0 1 /* Core Software Interrupt 0 */ #define PIC32_VECT_CS1 2 /* Core Software Interrupt 1 */ #define PIC32_VECT_INT0 3 /* External Interrupt 0 */ #define PIC32_VECT_T1 4 /* Timer1 */ #define PIC32_VECT_IC1 5 /* Input Capture 1 */ #define PIC32_VECT_OC1 6 /* Output Compare 1 */ #define PIC32_VECT_INT1 7 /* External Interrupt 1 */ #define PIC32_VECT_T2 8 /* Timer2 */ #define PIC32_VECT_IC2 9 /* Input Capture 2 */ #define PIC32_VECT_OC2 10 /* Output Compare 2 */ #define PIC32_VECT_INT2 11 /* External Interrupt 2 */ #define PIC32_VECT_T3 12 /* Timer3 */ #define PIC32_VECT_IC3 13 /* Input Capture 3 */ #define PIC32_VECT_OC3 14 /* Output Compare 3 */ #define PIC32_VECT_INT3 15 /* External Interrupt 3 */ #define PIC32_VECT_T4 16 /* Timer4 */ #define PIC32_VECT_IC4 17 /* Input Capture 4 */ #define PIC32_VECT_OC4 18 /* Output Compare 4 */ #define PIC32_VECT_INT4 19 /* External Interrupt 4 */ #define PIC32_VECT_T5 20 /* Timer5 */ #define PIC32_VECT_IC5 21 /* Input Capture 5 */ #define PIC32_VECT_OC5 22 /* Output Compare 5 */ #define PIC32_VECT_SPI1 23 /* SPI1 */ #define PIC32_VECT_SPI3 24 /* SPI3 */ #define PIC32_VECT_U1 24 /* UART1 */ #define PIC32_VECT_I2C3 24 /* I2C3 */ #define PIC32_VECT_I2C1 25 /* I2C1 */ #define PIC32_VECT_CN 26 /* Input Change Interrupt */ #define PIC32_VECT_AD1 27 /* ADC1 Convert Done */ #define PIC32_VECT_PMP 28 /* Parallel Master Port */ #define PIC32_VECT_CMP1 29 /* Comparator Interrupt */ #define PIC32_VECT_CMP2 30 /* Comparator Interrupt */ #define PIC32_VECT_SPI2 31 /* SPI2 */ #define PIC32_VECT_U3 31 /* UART3 */ #define PIC32_VECT_I2C4 31 /* I2C4 */ #define PIC32_VECT_SPI4 32 /* SPI4 */ #define PIC32_VECT_U2 32 /* UART2 */ #define PIC32_VECT_I2C5 32 /* I2C5 */ #define PIC32_VECT_I2C2 33 /* I2C2 */ #define PIC32_VECT_FSCM 34 /* Fail-Safe Clock Monitor */ #define PIC32_VECT_RTCC 35 /* Real-Time Clock and Calendar */ #define PIC32_VECT_DMA0 36 /* DMA Channel 0 */ #define PIC32_VECT_DMA1 37 /* DMA Channel 1 */ #define PIC32_VECT_DMA2 38 /* DMA Channel 2 */ #define PIC32_VECT_DMA3 39 /* DMA Channel 3 */ #define PIC32_VECT_DMA4 40 /* DMA Channel 4 */ #define PIC32_VECT_DMA5 41 /* DMA Channel 5 */ #define PIC32_VECT_DMA6 42 /* DMA Channel 6 */ #define PIC32_VECT_DMA7 43 /* DMA Channel 7 */ #define PIC32_VECT_FCE 44 /* Flash Control Event */ #define PIC32_VECT_USB 45 /* USB */ #define PIC32_VECT_CAN1 46 /* Control Area Network 1 */ #define PIC32_VECT_CAN2 47 /* Control Area Network 2 */ #define PIC32_VECT_ETH 48 /* Ethernet Interrupt */ #define PIC32_VECT_U4 49 /* UART4 */ #define PIC32_VECT_U6 50 /* UART6 */ #define PIC32_VECT_U5 51 /* UART5 */ #endif /* _IO_PIC32MX_H */