Difference between revisions of "Microchip dsPIC33 PIC24"
|  (→dsPIC33EV Family) | |||
| (10 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
| = Introduction = | = Introduction = | ||
| − | + | This manual describes the porting details of the ERIKA Enterprise v3 kernel(s) for Microchip dsPIC33/PIC24 families of microcontrollers. | |
| = dsPIC33 features supported = | = dsPIC33 features supported = | ||
| Line 18: | Line 18: | ||
| == Tutorials == | == Tutorials == | ||
| − | The following tutorials are available for this  | + | The following tutorials are available for this architecture: | 
| * [[Microchip_dsPIC33/PIC24_-_dsPIC33EV-SK_application_build_on_Windows|dsPIC33/PIC24: dsPIC33EV-SK application build on Windows]] | * [[Microchip_dsPIC33/PIC24_-_dsPIC33EV-SK_application_build_on_Windows|dsPIC33/PIC24: dsPIC33EV-SK application build on Windows]] | ||
| * [[Microchip_MPLAB-X_-_Integration_on_Windows| MPLAB-X IDE - Integration on Windows]] | * [[Microchip_MPLAB-X_-_Integration_on_Windows| MPLAB-X IDE - Integration on Windows]] | ||
| − | |||
| = Configuration and Programming = | = Configuration and Programming = | ||
| − | ERIKA Enterprise is configured through [[Tutorial: RT-Druid and OIL basics | RT-Druid and an OIL file]]. | + | ERIKA Enterprise is configured through [[Tutorial: RT-Druid and OIL basics | RT-Druid and an OIL file]] and some other properties. | 
| − | The following sections describe the OIL fields customized for Microchip dsPIC33/PIC24 architecture. | + | The following sections describe the properties and OIL fields customized for Microchip dsPIC33/PIC24 architecture. | 
| == MPLAB-X IDE Path == | == MPLAB-X IDE Path == | ||
| Line 57: | Line 56: | ||
| '''CPU_DATA''' object must be set to  '''DSPIC33_PIC24'''. | '''CPU_DATA''' object must be set to  '''DSPIC33_PIC24'''. | ||
| − | '''MODEL''' attribute of ''' | + | Example of a CPU_DATA section: | 
| + | |||
| + |     CPU_DATA = DSPIC33_PIC24 { | ||
| + |       ... | ||
| + |     }; | ||
| + | |||
| + | === MODEL === | ||
| + | |||
| + | '''MODEL''' attribute of '''CPU_DATA''' supports for now the '''dsPIC33''' value only. | ||
| + | Deafult value is '''dsPIC33'''. | ||
| + | |||
| + | Example of a MODEL attribute of a CPU_DATA section: | ||
| + | |||
| + |     CPU_DATA = DSPIC33_PIC24 { | ||
| + |       MODEL = dsPIC33; | ||
| + |       ... | ||
| + |     }; | ||
| + | |||
| + | ==== SPLIM ==== | ||
| + | |||
| + | '''SPLIM''' boolean property of '''MODEL''' attribute of '''CPU_DATA''' for the '''dsPIC33''' value only enables the hardware stack pointer overflow check. | ||
| + | Deafult value is '''TRUE'''. | ||
| + | |||
| + | Example of SPLIM boolean property of MODEL attribute of CPU_DATA for the dsPIC33 value only: | ||
| + | |||
| + |     CPU_DATA = DSPIC33_PIC24 { | ||
| + |       MODEL = dsPIC33 { | ||
| + |          SPLIM = FALSE; | ||
| + |       }; | ||
| + |       ... | ||
| + |     }; | ||
| + | |||
| + | ==== DBG ==== | ||
| + | |||
| + | '''DBG''' property of '''MODEL''' attribute of '''CPU_DATA''' for the '''dsPIC33''' value only selects the hardware debugger: for now only the '''SK''' (Starter-Kit) value is supported. | ||
| + | Deafult value is '''SK'''. | ||
| + | |||
| + | Example of DBG property of MODEL attribute of CPU_DATA for the dsPIC33 value only: | ||
| − | Example of a CPU_DATA section: | + |     CPU_DATA = DSPIC33_PIC24 { | 
| + |       MODEL = dsPIC33 { | ||
| + |          DBG = SK; | ||
| + |       }; | ||
| + |       ... | ||
| + |     }; | ||
| + | |||
| + | === COMPILER === | ||
| + | |||
| + | '''COMPILER''' attribute of '''CPU_DATA''' supports for now the '''XC16''' value only. | ||
| + | Deafult value is '''XC16'''. | ||
| + | |||
| + | Example of a COMPILER attribute of CPU_DATA section: | ||
| + | |||
| + |     CPU_DATA = DSPIC33_PIC24 { | ||
| + |       MODEL = dsPIC33; | ||
| + |       COMPILER = XC16; | ||
| + |       ... | ||
| + |     }; | ||
| + | |||
| + | ==== MINIMAL_OPTS ==== | ||
| + | |||
| + | '''MINIMAL_OPTS''' boolean property of '''COMPILER''' attribute of '''CPU_DATA''' configures the build system with minimal compiling and linking options. | ||
| + | The default value is set to '''FALSE'''. | ||
| + | |||
| + | Example of a MINIMAL_OPTS property of COMPILER attribute of CPU_DATA section: | ||
|      CPU_DATA = DSPIC33_PIC24 { |      CPU_DATA = DSPIC33_PIC24 { | ||
|        MODEL = dsPIC33; |        MODEL = dsPIC33; | ||
| + |       COMPILER = XC16 { | ||
| + |            MINIMAL_OPTS = TRUE; | ||
| + |       }; | ||
|        ... |        ... | ||
|      }; |      }; | ||
| Line 69: | Line 133: | ||
| '''MCU_DATA''' object supports for now the '''dsPIC33EV''' value only. | '''MCU_DATA''' object supports for now the '''dsPIC33EV''' value only. | ||
| + | |||
| + | Example of a MCU_DATA section: | ||
| + | |||
| + |   MCU_DATA = dsPIC33EV { | ||
| + |     ... | ||
| + |   }; | ||
| + | |||
| + | === MODEL === | ||
| '''MODEL''' attribute of '''MCU_DATA''' supports for now the '''dsPIC33EV256GM106''' value only. | '''MODEL''' attribute of '''MCU_DATA''' supports for now the '''dsPIC33EV256GM106''' value only. | ||
| − | Example of  | + | Example of MODEL attribute of MCU_DATA section: | 
|    MCU_DATA = dsPIC33EV { |    MCU_DATA = dsPIC33EV { | ||
| Line 92: | Line 164: | ||
| === dsPIC33EV Family === | === dsPIC33EV Family === | ||
| − | The '''dsPIC33EV''' family of '''dsPIC33/PIC24''' microcontrollers has an interrupt vector table which is stored in the flash memory | + | The '''dsPIC33EV''' family of '''dsPIC33/PIC24''' microcontrollers has an interrupt vector table which is stored in the flash memory. The complete list of '''SOURCE''' entries is shown below. | 
| − | * <code>OSCFAIL</code>:  | + | * Traps | 
| − | * <code>ADDRERR</code>:  | + | ** <code>OSCFAIL</code>: Oscillator Fail Trap | 
| − | * <code>SGHT</code>:  | + | ** <code>ADDRERR</code>: Address Error Trap | 
| − | * <code>STKERR</code>:  | + | ** <code>SGHT</code>: Generic Hard Trap | 
| − | * <code>MATHERR</code>:  | + | ** <code>STKERR</code>: Stack Error Trap | 
| − | * <code>DMACERR</code>:  | + | ** <code>MATHERR</code>: Math Error Trap | 
| − | * <code>SGST</code>:  | + | ** <code>DMACERR</code>: DMAC Error Trap | 
| − | * <code>INT0</code>:  | + | ** <code>SGST</code>: Generic Soft Trap | 
| − | * <code>IC1</code>:  | + | |
| − | * <code>OC1</code>:  | + | * Interrupts | 
| − | * <code>T1</code>:  | + | ** <code>INT0</code>: External Interrupt 0 | 
| − | * <code>DMA0</code>:  | + | ** <code>IC1</code>: Input Capture 1 | 
| − | * <code>IC2</code>:  | + | ** <code>OC1</code>: Output Compare 1 | 
| − | * <code>OC2</code>:  | + | ** <code>T1</code>: Timer1 | 
| − | * <code>T2</code>:  | + | ** <code>DMA0</code>: DMA Channel 0 | 
| − | * <code>T3</code>:  | + | ** <code>IC2</code>: Input Capture 2 | 
| − | * <code>SPI1E</code>:  | + | ** <code>OC2</code>: Output Compare 2 | 
| − | * <code>SPI1</code>:  | + | ** <code>T2</code>: Timer2 | 
| − | * <code>U1RX</code>:  | + | ** <code>T3</code>: Timer3 | 
| − | * <code>U1TX</code>:  | + | ** <code>SPI1E</code>:SPI1 Error | 
| − | * <code>AD1</code>:  | + | ** <code>SPI1</code>: SPI1 Transfer Done | 
| − | * <code>DMA1</code>:  | + | ** <code>U1RX</code>: UART1 Receiver | 
| − | * <code>NVM</code>:  | + | ** <code>U1TX</code>: UART1 Transmitter | 
| − | * <code>SI2C1</code>:  | + | ** <code>AD1</code>: ADC1 Convert Done | 
| − | * <code>MI2C1</code>:  | + | ** <code>DMA1</code>: DMA Channel 1 | 
| − | * <code>CMP1</code>:  | + | ** <code>NVM</code>: NVM Write Complete | 
| − | * <code>CN</code>:  | + | ** <code>SI2C1</code>: I2C1 Slave Event | 
| − | * <code>INT1</code>: External Interrupt  | + | ** <code>MI2C1</code>: I2C1 Master Event | 
| − | * <code>DMA2</code>:  | + | ** <code>CMP1</code>: Comparator Combined Event | 
| − | * <code>OC3</code>:  | + | ** <code>CN</code>: Input Change Interrupt | 
| − | * <code>OC4</code>:  | + | ** <code>INT1</code>: External Interrupt 1  | 
| − | * <code>T4</code>:  | + | ** <code>DMA2</code>: DMA Channel 2 | 
| − | * <code>T5</code>:  | + | ** <code>OC3</code>: Output Compare 3 | 
| − | * <code>INT2</code>:  | + | ** <code>OC4</code>: Output Compare 4 | 
| − | * <code>U2RX</code>:  | + | ** <code>T4</code>: Timer 4 | 
| − | * <code>U2TX</code>:  | + | ** <code>T5</code>: Timer 5 | 
| − | * <code>SPI2E</code>:  | + | ** <code>INT2</code>: External Interrupt 2 | 
| − | * <code>SPI2</code>:  | + | ** <code>U2RX</code>: UART2 Receiver | 
| − | * <code>C1RX</code>:  | + | ** <code>U2TX</code>: UART2 Transmitter | 
| − | * <code>C1</code>:  | + | ** <code>SPI2E</code>: SPI2 Error | 
| − | * <code>DMA3</code>:  | + | ** <code>SPI2</code>: SPI3 Transfer Done | 
| − | * <code>IC3</code>:  | + | ** <code>C1RX</code>: CAN1 RX Data Ready | 
| − | * <code>IC4</code>:  | + | ** <code>C1</code>: CAN1 Event  | 
| − | * <code>PSEM</code>:  | + | ** <code>DMA3</code>: DMA Channel 3 | 
| − | * <code>U1E</code>:  | + | ** <code>IC3</code>: Input Capture 3 | 
| − | * <code>U2E</code>:  | + | ** <code>IC4</code>: Input Capture 4 | 
| − | * <code>C1TX</code>: USART, Tx Complete | + | ** <code>PSEM</code>: PWM Special Event Match Interrupt | 
| − | * <code>CTMU</code>:  | + | ** <code>U1E</code>: UART1 Error Interrupt | 
| − | * <code>PWM1</code>:  | + | ** <code>U2E</code>: UART2 Error Interrupt | 
| − | * <code>PWM2</code>:  | + | ** <code>C1TX</code>: USART, Tx Complete | 
| − | * <code>PWM3</code>:  | + | ** <code>CTMU</code>: UART1 Error Interrupt | 
| − | * <code>ICD</code>:  | + | ** <code>PWM1</code>: PWM Generator 1 | 
| − | * <code>I2C1</code>:  | + | ** <code>PWM2</code>: PWM Generator 2 | 
| − | * <code>SENT1ERR</code>:  | + | ** <code>PWM3</code>: PWM Generator 3 | 
| − | * <code>SENT1</code>:  | + | ** <code>ICD</code>: ICD Application | 
| − | * <code>SENT2ERR</code>:  | + | ** <code>I2C1</code>: Bus Collision | 
| − | * <code>SENT2</code>:  | + | ** <code>SENT1ERR</code>: SENT1 Error | 
| − | * <code>ECCSBE</code>:  | + | ** <code>SENT1</code>: SENT1 TX/RX | 
| + | ** <code>SENT2ERR</code>: SENT2 Error | ||
| + | ** <code>SENT2</code>: SENT2 TX/RX | ||
| + | ** <code>ECCSBE</code>: ECC Single-Bit Error | ||
| = OSEK/VDX Extensions = | = OSEK/VDX Extensions = | ||
| Line 161: | Line 236: | ||
| System Timer is microcontroller dependent so for each supported Microchip dsPIC33/PIC24 microcontroller family, the System Timer configuration of ERIKA Enterprise v3 is shown below. | System Timer is microcontroller dependent so for each supported Microchip dsPIC33/PIC24 microcontroller family, the System Timer configuration of ERIKA Enterprise v3 is shown below. | ||
| − | === dsPIC33EV Family === | + | ==== dsPIC33EV Family ==== | 
| − | |||
| − | |||
| + | For the '''dsPIC33EV''' family of '''dsPIC33/PIC24''' microcontrollers the System Timer is linked to Hardware Timers so the '''DEVICE''' attribute MUST be se to '''T1''' or'''T2''' or ... or '''T5''' as shown below. | ||
|    COUNTER SystemTimer { |    COUNTER SystemTimer { | ||
| Line 177: | Line 251: | ||
|    }; |    }; | ||
| + | === CPU_CLOCK === | ||
| + | |||
| + | System Timer need the '''CPU_CLOCK''' attribute of '''CPU_DATA'''. This value, expressed as MHz, must be set to the configured frequency of the CPU. | ||
| + | |||
| + | Example of a CPU_CLOCK attribute of CPU_DATA section: | ||
| + | |||
| + |     CPU_DATA = DSPIC33_PIC24 { | ||
| + |       MODEL = dsPIC33; | ||
| + |       CPU_CLOCK = 16.0; | ||
| + |       ... | ||
| + |     }; | ||
| [[Category:Architectures]] | [[Category:Architectures]] | ||
Latest revision as of 10:14, 4 June 2018
Contents
Introduction
This manual describes the porting details of the ERIKA Enterprise v3 kernel(s) for Microchip dsPIC33/PIC24 families of microcontrollers.
dsPIC33 features supported
The following are the main features of the currently implemented support:
-  Development tools
- Support for MPLAB-X IDE v4.05
- Support for MPLAB XC16 C Compiler v1.33
 
-  dsPIC33/PIC24 parts supported:
-  dsPIC33EV
- dsPIC33EV256GM106 specific MCU
 
 
-  dsPIC33EV
-  Evaluation boards
- dsPIC33EV 5V CAN-LIN STARTER KIT (dsPIC33EV256GM106)
 
Tutorials
The following tutorials are available for this architecture:
Configuration and Programming
ERIKA Enterprise is configured through RT-Druid and an OIL file and some other properties.
The following sections describe the properties and OIL fields customized for Microchip dsPIC33/PIC24 architecture.
MPLAB-X IDE Path
It is possible to choose the path in three different ways:
-  Specific environment variables: MPLAB_X_IDE_FILES
- E.g.: MPLAB_X_IDE_FILES=C:\Program Files (x86)\Microchip\MPLABX\v4.05
 
- RT-Druid Eclipse IDE Property.
-  RT-Druid Configuration File Entry: preference_dspic33_pic24__path_for_mplab_x_ide
- E.g.: preference_dspic33_pic24__path_for_mplab_x_ide=C:\Program Files (x86)\Microchip\MPLABX\v4.05
 
Here is an example of RT-Druid configuration file.
MPLAB XC16 C Compiler Path
It is possible to choose the path in three different ways:
-  Specific environment variables: XC16_TOOLS
- E.g.: XC16_TOOLS=C:\Program Files (x86)\Microchip\xc16\v1.33
 
- RT-Druid Eclipse IDE Property.
-  RT-Druid Configuration File Entry: preference_dspic33_pic24__path_for_xc16_compiler
- E.g.: preference_dspic33_pic24__path_for_xc16_compiler=C:\Program Files (x86)\Microchip\xc16\v1.33
 
Here is an example of RT-Druid configuration file.
CPU
CPU_DATA object must be set to DSPIC33_PIC24.
Example of a CPU_DATA section:
   CPU_DATA = DSPIC33_PIC24 {
     ...
   };
MODEL
MODEL attribute of CPU_DATA supports for now the dsPIC33 value only. Deafult value is dsPIC33.
Example of a MODEL attribute of a CPU_DATA section:
   CPU_DATA = DSPIC33_PIC24 {
     MODEL = dsPIC33;
     ...
   };
SPLIM
SPLIM boolean property of MODEL attribute of CPU_DATA for the dsPIC33 value only enables the hardware stack pointer overflow check. Deafult value is TRUE.
Example of SPLIM boolean property of MODEL attribute of CPU_DATA for the dsPIC33 value only:
   CPU_DATA = DSPIC33_PIC24 {
     MODEL = dsPIC33 {
        SPLIM = FALSE;
     };
     ...
   };
DBG
DBG property of MODEL attribute of CPU_DATA for the dsPIC33 value only selects the hardware debugger: for now only the SK (Starter-Kit) value is supported. Deafult value is SK.
Example of DBG property of MODEL attribute of CPU_DATA for the dsPIC33 value only:
   CPU_DATA = DSPIC33_PIC24 {
     MODEL = dsPIC33 {
        DBG = SK;
     };
     ...
   };
COMPILER
COMPILER attribute of CPU_DATA supports for now the XC16 value only. Deafult value is XC16.
Example of a COMPILER attribute of CPU_DATA section:
   CPU_DATA = DSPIC33_PIC24 {
     MODEL = dsPIC33;
     COMPILER = XC16;
     ...
   };
MINIMAL_OPTS
MINIMAL_OPTS boolean property of COMPILER attribute of CPU_DATA configures the build system with minimal compiling and linking options. The default value is set to FALSE.
Example of a MINIMAL_OPTS property of COMPILER attribute of CPU_DATA section:
   CPU_DATA = DSPIC33_PIC24 {
     MODEL = dsPIC33;
     COMPILER = XC16 {
          MINIMAL_OPTS = TRUE;
     };
     ...
   };
MCU
MCU_DATA object supports for now the dsPIC33EV value only.
Example of a MCU_DATA section:
 MCU_DATA = dsPIC33EV {
   ...
 };
MODEL
MODEL attribute of MCU_DATA supports for now the dsPIC33EV256GM106 value only.
Example of MODEL attribute of MCU_DATA section:
 MCU_DATA = dsPIC33EV {
   MODEL = dsPIC33EV256GM106;
 };
BOARD
BOARD_DATA object supports for now the dsPIC33EV_SK value only.
Example of a BOARD_DATA section:
BOARD_DATA = dsPIC33EV_SK;
Interrupt Handling
The Interrupt Handling support is microcontroller dependent. For each supported Microchip dsPIC33/PIC24 microcontroller family, the ISRs configuration of ERIKA3 is shown below.
dsPIC33EV Family
The dsPIC33EV family of dsPIC33/PIC24 microcontrollers has an interrupt vector table which is stored in the flash memory. The complete list of SOURCE entries is shown below.
-  Traps
-  OSCFAIL: Oscillator Fail Trap
-  ADDRERR: Address Error Trap
-  SGHT: Generic Hard Trap
-  STKERR: Stack Error Trap
-  MATHERR: Math Error Trap
-  DMACERR: DMAC Error Trap
-  SGST: Generic Soft Trap
 
-  
-  Interrupts
-  INT0: External Interrupt 0
-  IC1: Input Capture 1
-  OC1: Output Compare 1
-  T1: Timer1
-  DMA0: DMA Channel 0
-  IC2: Input Capture 2
-  OC2: Output Compare 2
-  T2: Timer2
-  T3: Timer3
-  SPI1E:SPI1 Error
-  SPI1: SPI1 Transfer Done
-  U1RX: UART1 Receiver
-  U1TX: UART1 Transmitter
-  AD1: ADC1 Convert Done
-  DMA1: DMA Channel 1
-  NVM: NVM Write Complete
-  SI2C1: I2C1 Slave Event
-  MI2C1: I2C1 Master Event
-  CMP1: Comparator Combined Event
-  CN: Input Change Interrupt
-  INT1: External Interrupt 1
-  DMA2: DMA Channel 2
-  OC3: Output Compare 3
-  OC4: Output Compare 4
-  T4: Timer 4
-  T5: Timer 5
-  INT2: External Interrupt 2
-  U2RX: UART2 Receiver
-  U2TX: UART2 Transmitter
-  SPI2E: SPI2 Error
-  SPI2: SPI3 Transfer Done
-  C1RX: CAN1 RX Data Ready
-  C1: CAN1 Event
-  DMA3: DMA Channel 3
-  IC3: Input Capture 3
-  IC4: Input Capture 4
-  PSEM: PWM Special Event Match Interrupt
-  U1E: UART1 Error Interrupt
-  U2E: UART2 Error Interrupt
-  C1TX: USART, Tx Complete
-  CTMU: UART1 Error Interrupt
-  PWM1: PWM Generator 1
-  PWM2: PWM Generator 2
-  PWM3: PWM Generator 3
-  ICD: ICD Application
-  I2C1: Bus Collision
-  SENT1ERR: SENT1 Error
-  SENT1: SENT1 TX/RX
-  SENT2ERR: SENT2 Error
-  SENT2: SENT2 TX/RX
-  ECCSBE: ECC Single-Bit Error
 
-  
OSEK/VDX Extensions
This Section contains information about the OSEK/VDX Extensions (or optional features) that have been implemented for the dsPIC33/PIC24 support.
System Timer
System Timer is microcontroller dependent so for each supported Microchip dsPIC33/PIC24 microcontroller family, the System Timer configuration of ERIKA Enterprise v3 is shown below.
dsPIC33EV Family
For the dsPIC33EV family of dsPIC33/PIC24 microcontrollers the System Timer is linked to Hardware Timers so the DEVICE attribute MUST be se to T1 orT2 or ... or T5 as shown below.
 COUNTER SystemTimer {
   MINCYCLE = 1;
   MAXALLOWEDVALUE = 65535;
   TICKSPERBASE = 1;
   TYPE = HARDWARE {
     DEVICE = "T1";
     SYSTEM_TIMER = TRUE;
   };
   SECONDSPERTICK = 0.001;
 };
CPU_CLOCK
System Timer need the CPU_CLOCK attribute of CPU_DATA. This value, expressed as MHz, must be set to the configured frequency of the CPU.
Example of a CPU_CLOCK attribute of CPU_DATA section:
   CPU_DATA = DSPIC33_PIC24 {
     MODEL = dsPIC33;
     CPU_CLOCK = 16.0;
     ...
   };
