andreichk 0 12 октября, 2014 Опубликовано 12 октября, 2014 · Жалоба Привет народ, попалась мне в руки демо плата с новым 200 мегагерцным PIC32MZ. Переписал старый проект под него, ПИК шьётся и даже что-то там дрыгает ножками. Но у меня такое впечатление, что половина внутренностей там просто ниразу не пашет. пробовал настраивать ремапинг - тишина. УАРТ - тоже самое, частоту переферии - ничего не меняет, прерывания тоже непонятно. Может кто из знающих подсказать, правильно ли я вообще там всё настраиваю. вот кусок кода настроек: CFGCONbits.JTAGEN=0;//1 = JTAG is enabled //0 = JTAG is disabled PRECONbits.PREFEN=3; //11 = Enable predictive prefetch for any address //10 = Enable predictive prefetch for CPU instructions and CPU data //01 = Enable predictive prefetch for CPU instructions only //00 = Disable predictive prefetch //---------------- НАСТРОЙКА ЛИНИЙ ПОРТОВ -------------------------------------- ANSELBCLR = 0b1111111111111111;// НЕ УДАЛЯТЬ !!! цифровой ПОРТ B(MZ) TRISB = 0b1111111111111111;// читаем данные с SPARTAN6 A,B на PORTB LATB = 0b1111111111111111;// защёлка чтоб не прощёлкать ANSELCCLR = 0b1111111111111111;// TRISC = 0b1111111111111101;// RC14-частотомер вход , доп. RC1 выход PORTC = 0b1111111111111101;// LATC = 0b1111111111111101;// защёлка чтоб не прощёлкать ANSELDCLR = 0b1111111111111111;// TRISD = 0b0110011111011011;// RD9-частотомер вход, RD14 CMDASK вход, выходы 2 , 5, 11, 12, доп.15вых. PORTD = 0b0110011111011011;// LATD = 0b0110011111011011;// защёлка чтоб не прощёлкать ANSELECLR = 0b1111111111; TRISE = 0b0000000000; // порт RE на выход, данные на ТФТ-ПРОВОДНИК 8 bit. RE8,9доп вых. PORTE = 0b0000000000; // LATE = 0b0000000000; // защёлка чтоб не прощёлкать ANSELFCLR = 0b1111111111111111;// TRISF = 0b1111111111001111;// вход автосинхронизации RF0 A и RF2 B, выходы RF4 и RF5 read FIFO PORTF = 0b1111111111001111;// LATF = 0b1111111111001111;// защёлка чтоб не прощёлкать ANSELGCLR = 0b1111111111111111;// TRISG = 0b1010111001111111;// порт RG 7,8 на вых. RG 12,14 LEDs PORTG = 0b1010111001111111;// LATG = 0b1010111001111111;// защёлка чтоб не прощёлкать //--------------- ПЕРЕНАПРАВЛЕНИЕ ЛИНИЙ ПОРТОВ --------------------------------- CFGCONbits.IOLOCK = 0;//Unlock Sequence CFGCONbits.PMDLOCK = 0; INT2R = 0; //to RPD9 U1RXR = 3; //to RPD10 CFGCONbits.IOLOCK = 1;//Lock Sequence CFGCONbits.PMDLOCK = 1; //CFGCON = 0b0010000000000000;//Lock Sequence //OSCCON = 0b0010000000000000; //------------------ НАСТРОЙКА ЧАСТОТЫ ПЕРИФЕРИИ ----------------------------- PB5DIVbits.ON = 1;//FLASH PB5DIVbits.PBDIV = 4;//40 MHz PB4DIVbits.ON = 1;//порты PB4DIVbits.PBDIV = 2;//50 MHz PB3DIVbits.ON = 1;//таймеры PB3DIVbits.PBDIV = 2;//50 MHz PB2DIVbits.ON = 1;//UART1 PB2DIVbits.PBDIV = 11;//Peripheral Bus Clock: 18.432 MHz //---------------------- НАСТРОЙКА UART1 --------------------------------------- uchar BaudRate = ((FPB/115200)/16) - 1;//=9 U1BRG = BaudRate; //Set Baud rate U1STA = 0; U1MODE = 0b1000000000000110;// 0x8006; //Enable UART for 9-bit data U1MODEbits.ON = 1; //UARTx is enabled U1MODEbits.PDSEL = 3; //9-bit data, no parity U1MODEbits.BRGH = 0; //BRGH: High Baud Rate Enable bit //1 = High-Speed mode – 4x baud clock enabled //0 = Standard Speed mode – 16x baud clock enabled U1STASET = 0b1010000000000;//0x1400; //Enable Transmit and Receive //настройка модуля UART и его прерываний //вкл. прерывание по приему, приоритет 1, подприоритет 3 U1MODE = 0b0001000000000110; IPC28bits.U1RXIS = 3;//подприоритет 3 IPC28bits.U1RXIP = 1;//приоритет 1, //================================================================================ ========================== //--------------------------- НАСТРОЙКА ТАЙМЕРОВ ------------------------------- //таймер считает кол-во пришедших на измерительный вход импульсов. T1CK pin74 T1CON = 0b1000000000000010;//T1_ON | T1_SOURCE_EXT | T1_PS_1_1 PR1 = 0xFFFF;//0xFFFF IPC1bits.T1IS = 0;//T1_INT_SUB_PRIOR_0 IPC1bits.T1IP = 1;//T1_INT_PRIOR_1 IEC0bits.T1IE = 1;//T1_INT_ON //время 100 мсек будет отсчитываться отдельным 32-х битным таймером T2CON = 0b1000000000001000; //T23_ON | T23_SOURCE_INT | T23_PS_1_1 | T23_32BIT_MODE_ON, PR3 = 0x007A; PR2 = 0x1200;//0x7A1200 IPC2bits.T2IS = 1;//T23_INT_SUB_PRIOR_1 IPC2bits.T2IP = 1;//T23_INT_PRIOR_1 IEC0bits.T2IE = 1;//T23_INT_ON //------------------ ИНИЦИАЛИЗАЦИЯ INPUT CAPTURE ------------------------------ //Enable the IC2 module in 32-bit mode, capturing every rise edge. //EnableIntIC2; IC2CON = 0b0000001110000000;//IC_OFF | IC_CAP_32BIT | IC_TIMER2_SRC | IC_INT_1CAPTURE | IC_EVERY_RISE_EDGE IPC2bits.IC2IS = 2;//IC_INT_SUB_PRIOR_2 IPC2bits.IC2IP = 1;//IC_INT_PRIOR_1 IEC0bits.IC2IE = 1;//IC_INT_ON //----------------------------------------------------------------------------OK INTCONbits.MVEC = 1; // включить мультивекторный режим Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dj_miles 0 19 декабря, 2014 Опубликовано 19 декабря, 2014 (изменено) · Жалоба Возможно по тому, что не настроили камень. В коде не вижу конфигурации, типа такой: /* SYSCLK = 200 MHz (8MHz Crystal / FPLLIDIV * FPLLMUL / FPLLODIV) */ #pragma config FPLLIDIV = DIV_3, FPLLMULT = MUL_40, FPLLODIV = DIV_2 #pragma config FPLLRNG = RANGE_5_10_MHZ, FPLLICLK = PLL_POSC, FNOSC = SPLL #pragma config FSOSCEN = OFF, IESO = ON, POSCMOD = EC, FCKSM = CSECMD #pragma config FDMTEN = OFF, DMTCNT = DMT31, FWDTEN = OFF, ICESEL = ICS_PGx1 #pragma config OSCIOFNC = ON//, CP = ON Конфигурация для использования внутреннего тактового генератора и настройкой PLL для тактовой частоты 200 мГц Вообще камень довольно мудреный, но если разобраться, то он очень гибкий в использовании. К стати, настройка частоты периферии лучше делать так: SYSKEY = 0x0; // Ensure OSCCON is locked SYSKEY = 0xAA996655; // Write Key1 to SYSKEY SYSKEY = 0x556699AA; // Write Key2 to SYSKEY OSCCONbits.FRCDIV = 0; while( !PB2DIVbits.PBDIV );//SPI, I2C, UART PB2DIVbits.PBDIV = 4; while( !PB2DIVbits.PBDIV ); PB2DIVbits.ON = 1; while( !PB2DIVbits.PBDIV ); while( !PB3DIVbits.PBDIV );//Timers Comp PB3DIVbits.PBDIV = 0b0000001; while( !PB3DIVbits.PBDIV ); PB3DIVbits.ON = 1; while( !PB3DIVbits.PBDIV ); while( !PB4DIVbits.PBDIV );//Ports PB4DIVbits.PBDIV = 0b0000001; while( !PB4DIVbits.PBDIV ); PB4DIVbits.ON = 1; while( !PB4DIVbits.PBDIV ); SYSKEY = 0x0; // Ensure OSCCON is locked Изменено 19 декабря, 2014 пользователем dj_miles Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться