Перейти к содержанию
    

Привет народ, попалась мне в руки демо плата с новым 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;   // включить мультивекторный режим

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно по тому, что не настроили камень. В коде не вижу конфигурации, типа такой:

/* 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

 

Изменено пользователем dj_miles

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...