dsPid33
|
00001 /* //////////////////////////////////////////////////////////////////////////// 00002 ** It contains dsPIC settings and initializations 00003 ** 00004 ** Detailed description are on file "descrEng.txt" 00005 ** numbers between brackets, eg.: [1] , are the references to the specific 00006 ** decription into the file 00008 00009 // standard includes 00010 #include "dsPID33_common.h" 00011 00012 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 00013 /* ports and peripherals registers setting an initialization */ 00014 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 00015 00016 // DMA buffers 00017 // ADC buffer, 2 channels (AN0, AN1), 32 bytes each, 2 x 32 = 64 bytes 00018 int DmaAdc[2][64] __attribute__((space(dma),aligned(256))); 00019 00020 void Settings(void) 00021 { 00022 #ifdef CLOCK_FREQ_10 //{ 00023 // Configure Oscillator to operate the device at 40 Mhz 00024 // Fosc= Fin*M/(N1*N2), Fcy=Fosc/2 00025 // Fosc= 10M*32(2*2)=80Mhz for 10 MHz input clock 00026 PLLFBD=30; // M=32 00027 #warning ********************************************************************** 00028 #warning -- compiling for 10MHz oscillator, set MPLAB SIM to 80.0000 MHz ****** 00029 #else 00030 00031 // Configure Oscillator to operate the device at 39,6288 Mhz 00032 // Fosc= Fin*M/(N1*N2), Fcy=Fosc/2 00033 // Fosc= 7.3728M*43(2*2)=79,2576Mhz for 7,3728 MHz input clock 00034 PLLFBD=41; // M=43 00035 #warning ********************************************************************** 00036 #warning -- compiling for 7.3728MHz oscillator, set MPLAB SIM to 79.2576 MHz ** 00037 #endif //} 00038 00039 CLKDIVbits.PLLPOST=0; // N1=2 00040 CLKDIVbits.PLLPRE=0; // N2=2 00041 00042 // Disable Watch Dog Timer 00043 RCONbits.SWDTEN=0; 00044 00045 // Clock switching to incorporate PLL 00046 __builtin_write_OSCCONH(0x03); // Initiate Clock Switch to Primary 00047 // Oscillator with PLL (NOSC=0b011) 00048 __builtin_write_OSCCONL(0x01); // Start clock switching 00049 00050 #ifndef SIM // [21] 00051 while (OSCCONbits.COSC != 0b011); // Wait for Clock switch to occur 00052 00053 while(OSCCONbits.LOCK!=1) {}; // Wait for PLL to lock 00054 #endif 00055 00056 #if defined(__dsPIC33FJ64MC802__) || defined(__dsPIC33FJ128MC802__) //{ 00057 #warning -- compiling for a 28 pin DSC **************************************** 00058 00059 #ifdef PROTOTYPE //{ 00060 #warning -- compiling for prototype board ************************************* 00061 00062 // Peripheral PIN selection *********************************** 00063 // Unlock Registers 00064 //************************************************************* 00065 asm volatile ( "mov #OSCCONL, w1 \n" 00066 "mov #0x45, w2 \n" 00067 "mov #0x57, w3 \n" 00068 "mov.b w2, [w1] \n" 00069 "mov.b w3, [w1] \n" 00070 "bclr OSCCON, #6 "); 00071 //************************************************************ 00072 // Configure Input Functions 00073 //************************************************************ 00074 //*************************** 00075 // Assign IC1 To Pin RP6 00076 //*************************** 00077 RPINR7bits.IC1R = 6; 00078 00079 //*************************** 00080 // Assign IC2 To Pin RP10 00081 //*************************** 00082 RPINR7bits.IC2R = 10; 00083 00084 //*************************** 00085 // Assign QEA1 To Pin RP6 00086 //*************************** 00087 RPINR14bits.QEA1R = 6; 00088 00089 //*************************** 00090 // Assign QEB1 To Pin RP5 00091 //*************************** 00092 RPINR14bits.QEB1R = 5; 00093 00094 //*************************** 00095 // Assign QEA2 To Pin RP10 00096 //*************************** 00097 RPINR16bits.QEA2R = 10; 00098 00099 //*************************** 00100 // Assign QEB2 To Pin RP11 00101 //*************************** 00102 RPINR16bits.QEB2R = 11; 00103 00104 //*************************** 00105 // Assign U1RX To Pin RP8 00106 //*************************** 00107 RPINR18bits.U1RXR = 8; 00108 00109 //*************************** 00110 // Assign U2RX To Pin RP7 00111 //*************************** 00112 RPINR19bits.U2RXR = 7; 00113 00114 //************************************************************ 00115 // Configure Output Functions 00116 //************************************************************ 00117 00118 //*************************** 00119 // Assign U1Tx To Pin RP9 00120 //*************************** 00121 RPOR4bits.RP9R = 3; 00122 00123 //*************************** 00124 // Assign U2Tx To Pin RP4 00125 //*************************** 00126 RPOR2bits.RP4R = 5; 00127 00128 //************************************************************ 00129 // Lock Registers 00130 //************************************************************ 00131 asm volatile ( "mov #OSCCONL, w1 \n" 00132 "mov #0x45, w2 \n" 00133 "mov #0x57, w3 \n" 00134 "mov.b w2, [w1] \n" 00135 "mov.b w3, [w1] \n" 00136 "bset OSCCON, #6"); 00137 // *********************************** Peripheral PIN selection 00138 00139 /*-----------------------------------------------------------------------*/ 00140 /* Port A */ 00141 /*-----------------------------------------------------------------------*/ 00142 _TRISA4 = 0; 00143 /* 00144 RA4 12 LED1 00145 */ 00146 00147 /*-----------------------------------------------------------------------*/ 00148 /* Port B */ 00149 /*-----------------------------------------------------------------------*/ 00150 _TRISB2 = 0; 00151 _TRISB3 = 0; 00152 00153 /* 00154 RB2 6 H-bridge1 enable 00155 RB3 7 H-bridge2 enable 00156 */ 00157 #endif //} 00158 00159 #ifdef DROIDS //{ 00160 #warning -- compiling for 990.011 board ************************************** 00161 00162 // Peripheral PIN selection *********************************** 00163 // Unlock Registers 00164 //************************************************************* 00165 asm volatile ( "mov #OSCCONL, w1 \n" 00166 "mov #0x45, w2 \n" 00167 "mov #0x57, w3 \n" 00168 "mov.b w2, [w1] \n" 00169 "mov.b w3, [w1] \n" 00170 "bclr OSCCON, #6 "); 00171 //************************************************************ 00172 // Configure Input Functions 00173 //************************************************************ 00174 //*************************** 00175 // Assign IC1 To Pin RP10 00176 //*************************** 00177 RPINR7bits.IC1R = 10; 00178 00179 //*************************** 00180 // Assign IC2 To Pin RP6 00181 //*************************** 00182 RPINR7bits.IC2R = 6; 00183 00184 //*************************** 00185 // Assign QEA1 To Pin RP10 00186 //*************************** 00187 RPINR14bits.QEA1R = 10; 00188 00189 //*************************** 00190 // Assign QEB1 To Pin RP11 00191 //*************************** 00192 RPINR14bits.QEB1R = 11; 00193 00194 //*************************** 00195 // Assign QEA2 To Pin RP6 00196 //*************************** 00197 RPINR16bits.QEA2R = 6; 00198 00199 //*************************** 00200 // Assign QEB2 To Pin RP5 00201 //*************************** 00202 RPINR16bits.QEB2R = 5; 00203 00204 //*************************** 00205 // Assign U1RX To Pin RP3 00206 //*************************** 00207 RPINR18bits.U1RXR = 3; 00208 00209 //*************************** 00210 // Assign U2RX To Pin RP7 00211 //*************************** 00212 RPINR19bits.U2RXR = 7; 00213 00214 //************************************************************ 00215 // Configure Output Functions 00216 //************************************************************ 00217 00218 //*************************** 00219 // Assign U1Tx To Pin RP2 00220 //*************************** 00221 RPOR1bits.RP2R = 3; 00222 //*************************** 00223 // Assign U2Tx To Pin RP8 00224 //*************************** 00225 RPOR4bits.RP8R = 5; 00226 00227 //************************************************************ 00228 // Lock Registers 00229 //************************************************************ 00230 asm volatile ( "mov #OSCCONL, w1 \n" 00231 "mov #0x45, w2 \n" 00232 "mov #0x57, w3 \n" 00233 "mov.b w2, [w1] \n" 00234 "mov.b w3, [w1] \n" 00235 "bset OSCCON, #6"); 00236 // *********************************** Peripheral PIN selection 00237 00238 /*-----------------------------------------------------------------------*/ 00239 /* Port A */ 00240 /*-----------------------------------------------------------------------*/ 00241 _TRISA4 = 0; 00242 /* 00243 RA4 12 LED1 00244 */ 00245 00246 /*-----------------------------------------------------------------------*/ 00247 /* Port B */ 00248 /*-----------------------------------------------------------------------*/ 00249 _TRISB0 = 0; 00250 _TRISB1 = 0; 00251 _TRISB4 = 0; 00252 _TRISB9 = 0; 00253 00254 /* 00255 RB0 4 H-bridge2 enable 00256 RB1 5 H-bridge1 enable 00257 RB4 11 LED2 00258 RB9 18 DIR 485 00259 */ 00260 #endif //} 00261 //} 00262 00263 #elif defined(__dsPIC33FJ64MC804__) || defined(__dsPIC33FJ128MC804__) //{ 00264 #warning -- compiling for a 44 pin DSC *************************************** 00265 00266 00267 #ifdef DSNAVCON33 //{ 00268 #warning -- compiling for DSNAVCON33 ***************************************** 00269 // Peripheral PIN selection *********************************** 00270 // Unlock Registers 00271 //************************************************************* 00272 asm volatile ( "mov #OSCCONL, w1 \n" 00273 "mov #0x45, w2 \n" 00274 "mov #0x57, w3 \n" 00275 "mov.b w2, [w1] \n" 00276 "mov.b w3, [w1] \n" 00277 "bclr OSCCON, #6 "); 00278 //************************************************************ 00279 // Configure Input Functions 00280 //************************************************************ 00281 //*************************** 00282 // Assign IC1 To Pin RP23 00283 //*************************** 00284 RPINR7bits.IC1R = 23; 00285 00286 //*************************** 00287 // Assign IC2 To Pin RP25 00288 //*************************** 00289 RPINR7bits.IC2R = 25; 00290 00291 //*************************** 00292 // Assign QEA1 To Pin RP23 00293 //*************************** 00294 RPINR14bits.QEA1R = 23; 00295 00296 //*************************** 00297 // Assign QEB1 To Pin RP22 00298 //*************************** 00299 RPINR14bits.QEB1R = 22; 00300 00301 //*************************** 00302 // Assign QEA2 To Pin RP25 00303 //*************************** 00304 RPINR16bits.QEA2R = 25; 00305 00306 //*************************** 00307 // Assign QEB2 To Pin RP24 00308 //*************************** 00309 RPINR16bits.QEB2R = 24; 00310 00311 //*************************** 00312 // Assign U1RX To Pin RP5 00313 //*************************** 00314 RPINR18bits.U1RXR = 5; 00315 00316 //*************************** 00317 // Assign U2RX To Pin RP20 00318 //*************************** 00319 RPINR19bits.U2RXR = 20; 00320 00321 //************************************************************ 00322 // Configure Output Functions 00323 //************************************************************ 00324 00325 //*************************** 00326 // Assign U1Tx To Pin RP6 00327 //*************************** 00328 RPOR3bits.RP6R = 3; 00329 00330 //*************************** 00331 // Assign U2Tx To Pin RP21 00332 //*************************** 00333 RPOR10bits.RP21R = 5; 00334 00335 //************************************************************ 00336 // Lock Registers 00337 //************************************************************ 00338 asm volatile ( "mov #OSCCONL, w1 \n" 00339 "mov #0x45, w2 \n" 00340 "mov #0x57, w3 \n" 00341 "mov.b w2, [w1] \n" 00342 "mov.b w3, [w1] \n" 00343 "bset OSCCON, #6"); 00344 // *********************************** Peripheral PIN selection 00345 00346 /*-----------------------------------------------------------------------*/ 00347 /* Port A */ 00348 /*-----------------------------------------------------------------------*/ 00349 _TRISA8 = 0; 00350 /* 00351 RA8 32 LED1 00352 */ 00353 00354 /*-----------------------------------------------------------------------*/ 00355 /* Port B */ 00356 /*-----------------------------------------------------------------------*/ 00357 _TRISA7 = 0; 00358 _TRISA10 = 0; 00359 00360 /* 00361 RA7 13 H-bridge1 enable 00362 RA10 12 H-bridge2 enable 00363 */ 00364 #endif //} 00365 00366 #ifdef ROBOCONTROLLER //{ 00367 #warning -- compiling for ROBOCONTROLLER ************************************* 00368 // Peripheral PIN selection *********************************** 00369 // Unlock Registers 00370 //************************************************************* 00371 asm volatile ( "mov #OSCCONL, w1 \n" 00372 "mov #0x45, w2 \n" 00373 "mov #0x57, w3 \n" 00374 "mov.b w2, [w1] \n" 00375 "mov.b w3, [w1] \n" 00376 "bclr OSCCON, #6 "); 00377 //************************************************************ 00378 // Configure Input Functions 00379 //************************************************************ 00380 //*************************** 00381 // Assign IC1 To Pin RP22 00382 //*************************** 00383 RPINR7bits.IC1R = 22; // (Input Capture 1) QEA_1 su RoboController 00384 00385 //*************************** 00386 // Assign IC2 To Pin RP24 00387 //*************************** 00388 RPINR7bits.IC2R = 24; // (Input Capture 2) QEA_2 su RoboController 00389 00390 //*************************** 00391 // Assign QEA1 To Pin RP22 00392 //*************************** 00393 RPINR14bits.QEA1R = 22; // QEA_1 su RoboController 00394 00395 //*************************** 00396 // Assign QEB1 To Pin RP23 00397 //*************************** 00398 RPINR14bits.QEB1R = 23; // QEB_1 su RoboController 00399 00400 //*************************** 00401 // Assign QEA2 To Pin RP24 00402 //*************************** 00403 RPINR16bits.QEA2R = 24; // QEA_2 su RoboController 00404 00405 //*************************** 00406 // Assign QEB2 To Pin RP25 00407 //*************************** 00408 RPINR16bits.QEB2R = 25; // QEB_2 su RoboController 00409 00410 //*************************** 00411 // Assign U1RX To Pin RP8 00412 //*************************** 00413 RPINR18bits.U1RXR = 20; // (UART1 Receive) su RoboController 00414 00415 //*************************** 00416 // Assign U2RX To Pin RP20 00417 //*************************** 00418 RPINR19bits.U2RXR = 8; // (UART2 Receive) su RoboController 00419 00420 //************************************************************ 00421 // Configure Output Functions 00422 //************************************************************ 00423 00424 //*************************** 00425 // Assign U1Tx 00426 //*************************** 00427 RPOR10bits.RP21R = 3; 00428 00429 //*************************** 00430 // Assign U2Tx 00431 //*************************** 00432 RPOR4bits.RP8R = 5; 00433 00434 //************************************************************ 00435 // Lock Registers 00436 //************************************************************ 00437 asm volatile ( "mov #OSCCONL, w1 \n" 00438 "mov #0x45, w2 \n" 00439 "mov #0x57, w3 \n" 00440 "mov.b w2, [w1] \n" 00441 "mov.b w3, [w1] \n" 00442 "bset OSCCON, #6"); 00443 // *********************************** Peripheral PIN selection 00444 00445 /*---------------------------------------------------------------------------*/ 00446 /* Port A */ 00447 /*---------------------------------------------------------------------------*/ 00448 _TRISA0 = 0; // MOTOR_EN1 00449 _TRISA1 = 0; // MOTOR_EN2 00450 _TRISA8 = 0; // LED1 00451 _TRISA9 = 0; // LED2 00452 _TRISA7 = 0; // AUX1 00453 _TRISA10 = 0; // AUX2 00454 00455 /*---------------------------------------------------------------------------*/ 00456 /* Port B */ 00457 /*---------------------------------------------------------------------------*/ 00458 //_TRISB2 = 0; 00459 //_TRISB3 = 0; 00460 00461 00462 /*---------------------------------------------------------------------------*/ 00463 /* Port C */ 00464 /*---------------------------------------------------------------------------*/ 00465 _TRISC3 = 0; // DIR RS485 00466 _TRISC5 = 0; // TX UART1 00467 00468 #endif //} 00469 00470 #else 00471 00472 #error -- dsPIC33FJ not recognized. Accepted only 64/128MC802 or 64/128MC804 00473 00474 #endif //} 00475 #warning ********************************************************************* 00476 00477 /*---------------------------------------------------------------------------*/ 00478 /* A/D converter [2] */ 00479 /*---------------------------------------------------------------------------*/ 00480 AD1CON1bits.ADSIDL = 1; // stop in idle 00481 AD1CON1bits.ADDMABM = 0;// scatter/gather mode 00482 AD1CON1bits.AD12B = 0; // 10 bits ADC 00483 AD1CON1bits.FORM = 0; // integer format 00484 AD1CON1bits.SSRC = 0b111;// auto-convert 00485 AD1CON1bits.SIMSAM = 1; // CH0 CH1 sampled simultaneously 00486 AD1CON1bits.ASAM = 1; // auto sampling 00487 00488 AD1CON2bits.CSCNA = 0; // do not scan inputs 00489 AD1CON2bits.CHPS = 0b01;// convert CH0 and CH1 00490 AD1CON2bits.SMPI = 0b0001;// number of DMA buffers -1 00491 AD1CON2bits.BUFM = 0; // filling buffer from start address 00492 AD1CON2bits.ALTS = 0; // sample A 00493 00494 AD1CON3bits.ADRC = 0; // system clock 00495 AD1CON3bits.SAMC=0b11111;// 31 Tad auto sample time 00496 AD1CON3bits.ADCS = 63; // Tad = 64 * Tcy 00497 00498 AD1CON4bits.DMABL=0b110;// 64 word DMA buffer for each analog input 00499 00500 AD1CHS123bits.CH123NB=0;// don't care -> sample B 00501 AD1CHS123bits.CH123SB=0;// don't care -> sample B 00502 AD1CHS123bits.CH123NA=0;// CH1,2,3 negative input = Vrefl 00503 AD1CHS123bits.CH123SA=0;// CH1 = AN0, CH2=AN1, CH3=AN2 00504 00505 AD1CHS0bits.CH0NB = 0; // don't care -> sample B 00506 AD1CHS0bits.CH0SB = 0; // don't care -> sample B 00507 AD1CHS0bits.CH0NA = 0; // CH0 neg -> Vrefl 00508 AD1CHS0bits.CH0SA = 1; // CH0 pos -> AN1 00509 00510 AD1PCFGL = 0xFFFF; // set all Analog ports as digital 00511 AD1PCFGLbits.PCFG0 = 0; // AN0 00512 AD1PCFGLbits.PCFG1 = 0; // AN1 00513 00514 IFS0bits.AD1IF = 0; // Clear the A/D interrupt flag bit 00515 IEC0bits.AD1IE = 0; // Do Not Enable A/D interrupt 00516 AD1CON1bits.ADON = 1; // module on 00517 00518 /*.........................................................DMA A/D converter */ 00519 00520 // ADC connected to DMA 7 00521 DMA7CONbits.AMODE = 2; // Peripheral Indirect Addressing mode 00522 DMA7CONbits.MODE = 0; // Continuous, 00523 DMA7PAD = (volatile unsigned int)&ADC1BUF0;// Point DMA to ADC1BUF0 00524 DMA7CNT = 127; // 64 DMA request 00525 DMA7REQ = 13; // Select ADC1 as DMA Request source 00526 DMA7STA = __builtin_dmaoffset(DmaAdc); 00527 _DMA7IF = 0; //Clear the DMA interrupt flag bit 00528 _DMA7IE = 1; //Set the DMA interrupt enable bit 00529 DMA7CONbits.CHEN=1; // Enable DMA 00530 00531 /*.............................................................A/D converter */ 00532 00533 /*---------------------------------------------------------------------------*/ 00534 /* PWM [11] */ 00535 /*---------------------------------------------------------------------------*/ 00536 // Holds the value to be loaded into dutycycle register 00537 unsigned int period; 00538 // Holds the value to be loaded into special event compare register 00539 unsigned int sptime; 00540 // Holds PWM configuration value 00541 unsigned int config1; 00542 // Holds the value be loaded into PWMCON1 register 00543 unsigned int config2; 00544 // Holds the value to config the special event trigger postscale and dutycycle 00545 unsigned int config3; 00546 00547 // Config PWM 00548 period = 2048; 00549 // PWM F=19,340Hz counting UP 12bit resolution @ Fcy=39.628 MHz (osc 7.3728MHz) 00550 // PWM F=19,522Hz counting UP 12bit resolution @ Fcy=39.628 MHz (osc 10MHz) 00551 sptime = 0x0; 00552 // 1:1 postscaler, 1:1 prescale, free running mode 00553 // PWM time base ON, count up 00554 config1 = PWM1_EN & PWM1_IDLE_CON & PWM1_OP_SCALE1 & PWM1_IPCLK_SCALE1 & 00555 PWM1_MOD_FREE; 00556 00557 // PWM1H e PWM1L enabled in complementar mode 00558 // dsPICs with 3 pairs of PWM pins have one timer only (A) 00559 config2 = PWM1_MOD1_COMP & PWM1_PEN1L & PWM1_PEN1H & 00560 PWM1_MOD2_COMP & PWM1_PEN2L & PWM1_PEN2H & 00561 PWM1_PDIS3H & PWM1_PDIS3L; 00562 00563 config3 = PWM1_SEVOPS1 & PWM1_OSYNC_PWM & PWM1_UEN; 00564 OpenMCPWM1(period, sptime, config1, config2, config3); 00565 00566 // Dead Time Unit A assigned to both 1 & 2 PWM pairs 00567 /* SetMCPWM1DeadTimeAssignment(PWM1_DTS1A_UA & PWM1_DTS1I_UA & 00568 PWM1_DTS2A_UA & PWM1_DTS2I_UA); 00569 */ 00570 P1DTCON2bits.DTS1A = 0; 00571 P1DTCON2bits.DTS1I = 0; 00572 P1DTCON2bits.DTS2A = 0; 00573 P1DTCON2bits.DTS2I = 0; 00574 00575 // Dead time 100ns = 0.2% of PWM period 00576 SetMCPWM1DeadTimeGeneration(PWM1_DTA4 & PWM1_DTAPS1); 00577 00578 // dutycyclereg=1, dutycycle=50% (motore fermo in LAP mode , updatedisable=0 00579 SetDCMCPWM1(1, 2048, 0); 00580 SetDCMCPWM1(2, 2048, 0); 00581 00582 // configure PWM2 pins as a generic I/O 00583 PWM2CON1bits.PEN1L = 0; 00584 PWM2CON1bits.PEN1H = 0; 00585 /*.......................................................................PWM */ 00586 00587 00588 /*---------------------------------------------------------------------------*/ 00589 /* QEI1 [4] */ 00590 /*---------------------------------------------------------------------------*/ 00591 /* 00592 OpenQEI(QEI_MODE_x4_MATCH & QEI_INPUTS_NOSWAP & QEI_IDLE_STOP 00593 & QEI_NORMAL_IO & QEI_INDEX_RESET_DISABLE, 00594 QEI_QE_CLK_DIVIDE_1_128 & QEI_QE_OUT_ENABLE & POS_CNT_ERR_INT_DISABLE); 00595 */ 00596 00597 QEI1CONbits.QEIM = 7; // QEI_MODE_x4_MATCH 00598 QEI1CONbits.SWPAB = 0; // QEI_INPUTS_SWAP 00599 QEI1CONbits.QEISIDL = 1; // QEI_IDLE_STOP 00600 QEI1CONbits.POSRES = 0; // QEI_INDEX_RESET_DISABLE 00601 QEI1CONbits.PCDOUT = 0; // QEI_NORMAL_IO 00602 QEI1CONbits.POSRES = 0; // POS_CNT_ERR_INT_DISABLE 00603 00604 DFLT1CONbits.QECK = 6; // QEI_QE_CLK_DIVIDE_1_128 00605 DFLT1CONbits.QEOUT = 1; // QEI_QE_OUT_ENABLE 00606 00607 MAX1CNT = 0xFFFF; 00608 POS1CNT = 0; 00609 /*.......................................................................QEI */ 00610 00611 /*---------------------------------------------------------------------------*/ 00612 /* QEI2 [4] */ 00613 /*---------------------------------------------------------------------------*/ 00614 /* 00615 OpenQEI(QEI_MODE_x4_MATCH & QEI_INPUTS_NOSWAP & QEI_IDLE_STOP 00616 & QEI_NORMAL_IO & QEI_INDEX_RESET_DISABLE, 00617 QEI_QE_CLK_DIVIDE_1_128 & QEI_QE_OUT_ENABLE & POS_CNT_ERR_INT_DISABLE); 00618 */ 00619 00620 QEI2CONbits.QEIM = 7; // QEI_MODE_x4_MATCH 00621 QEI2CONbits.SWPAB = 0; // QEI_INPUTS_SWAP 00622 QEI2CONbits.QEISIDL = 1; // QEI_IDLE_STOP 00623 QEI2CONbits.POSRES = 0; // QEI_INDEX_RESET_DISABLE 00624 QEI2CONbits.PCDOUT = 0; // QEI_NORMAL_IO 00625 QEI2CONbits.POSRES = 0; // POS_CNT_ERR_INT_DISABLE 00626 00627 DFLT2CONbits.QECK = 6; // QEI_QE_CLK_DIVIDE_1_128 00628 DFLT2CONbits.QEOUT = 1; // QEI_QE_OUT_ENABLE 00629 00630 MAX2CNT = 0xFFFF; 00631 POS2CNT = 0; 00632 /*.......................................................................QEI */ 00633 00634 /*---------------------------------------------------------------------------*/ 00635 /* Input Capture 1 [7] */ 00636 /*---------------------------------------------------------------------------*/ 00637 IC1CONbits.ICSIDL = 1; // Stop in idle 00638 IC1CONbits.ICTMR = 1; // Timer 2 00639 IC1CONbits.ICI = 0; // Interrupt on every capture event 00640 IC1CONbits.ICM = 3; // Capture mode every rising edge 00641 /*.............................................................Input Capture */ 00642 00643 /*---------------------------------------------------------------------------*/ 00644 /* Input Capture 2 [7] */ 00645 /*---------------------------------------------------------------------------*/ 00646 // IC_EVERY_EDGE & IC_INT_1CAPTURE & IC_IDLE_STOP & IC_TIMER2_SRC) 00647 IC2CONbits.ICSIDL = 1; // Stop in idle 00648 IC2CONbits.ICTMR = 1; // Timer 2 00649 IC2CONbits.ICI = 0; // Interrupt on every capture event 00650 IC2CONbits.ICM = 3; // Capture mode every rising edge 00651 /*.............................................................Input Capture */ 00652 00653 00654 00655 #ifndef TIMER_OFF 00656 /*---------------------------------------------------------------------------*/ 00657 /* Timer 2 [12] */ 00658 /*---------------------------------------------------------------------------*/ 00659 #define TMR2_VALUE 0xFFFF 00660 /*OpenTimer2( T2_ON & 00661 T2_GATE_OFF & 00662 T2_PS_1_1 & 00663 T1_SYNC_EXT_OFF & 00664 T2_SOURCE_INT, 00665 TMR2_VALUE); 00666 */ 00667 T2CONbits.TON = 0; // Disable Timer 00668 T2CONbits.TCS = 0; // Select internal instruction cycle clock 00669 T2CONbits.TGATE = 0; // Disable Gated Timer mode 00670 T2CONbits.TCKPS = 0b00; // Select 1:1 Prescaler 00671 TMR2 = 0x00; // Clear timer register 00672 PR2 = TMR2_VALUE; // Load the period value 00673 /*...................................................................Timer 2 */ 00674 00675 00676 /*---------------------------------------------------------------------------*/ 00677 /* Timer 1 1ms [13] */ 00678 /*---------------------------------------------------------------------------*/ 00679 #ifdef CLOCK_FREQ_10 00680 #define TMR1_VALUE 40000 00681 #else 00682 #define TMR1_VALUE 39628 00683 #endif 00684 00685 OpenTimer1( T1_ON & 00686 T1_GATE_OFF & 00687 T1_PS_1_1 & 00688 T1_SYNC_EXT_OFF & 00689 T1_SOURCE_INT, 00690 TMR1_VALUE); 00691 #endif 00692 /*................................................................ ..Timer 1 */ 00693 } 00694 00695 00696 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 00697 /* Interrupts setting */ 00698 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 00699 void ISR_Settings(void) 00700 { 00701 //-------PWM [11] 00702 ConfigIntMCPWM1(PWM1_INT_DIS); 00703 00704 //-------Input Capture 1 [7] 00705 // ConfigIntCapture1(IC_INT_ON & IC_INT_PRIOR_4); 00706 IEC0bits.IC1IE=1; 00707 IPC0bits.IC1IP=4; 00708 00709 //-------Input Capture 2 [7] 00710 // ConfigIntCapture2(IC_INT_ON & IC_INT_PRIOR_5); 00711 IEC0bits.IC2IE=1; 00712 IPC1bits.IC2IP=4; 00713 00714 00715 #ifndef TIMER_OFF 00716 //-------Timer 2 [12] 00717 // ConfigIntTimer2(T2_INT_PRIOR_4 & T2_INT_ON); 00718 IPC1bits.T2IP = 0x04; // Set Timer 2 Interrupt Priority Level 00719 _T2IF = 0; // interrupt flag reset 00720 IEC0bits.T2IE = 1; // Enable Timer2 interrupt 00721 T2CONbits.TON = 1; // Start Timer 00722 00723 //-------Timer 1 [13] 00724 ConfigIntTimer1(T1_INT_PRIOR_4 & T1_INT_ON); 00725 PR1 = TMR1_VALUE; 00726 #endif 00727 } 00728