?login_element?

Subversion Repositories NedoOS

Rev

Rev 8 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. #ifndef __CONFIG_C
  3. #define __CONFIG_C
  4.  
  5. #include "config.h"
  6. #include "opora.h"
  7.  
  8. //--- Clock configuration ---
  9. void ClkConfig()
  10. {
  11.         uint32_t temp;
  12.         RST_CLK->PER_CLOCK |= (1 << 27);                                //BKP Clock enable
  13.         temp = BKP->REG_0E;
  14.         temp &= 0xFFFFFFC0;
  15.         BKP->REG_0E = temp | (7 << 3) | 7;                              // SelectRI = 0x7, LOW = 0x7; (for core frequency more then 80 MHz);
  16. #ifdef REVISION_2
  17.  
  18. #ifdef HSE2_OSCILLATOR
  19.         RST_CLK->HS_CONTROL=0x00000005;                                 //HSE On, Oscillator mode; HSE2 On, Oscillator mode
  20. #else
  21.         RST_CLK->HS_CONTROL=0x0000000D;                                 //HSE On, Oscillator mode; HSE2 On, Generator mode
  22. #endif  //HSE2_OSCILLATOR
  23.  
  24.         while((RST_CLK->CLOCK_STATUS&0x0C)!=0x0C);              //Wait until HSE and HSE2 not ready
  25.         RST_CLK->CPU_CLOCK=0x00000002;                                  //HSE=8 MHz
  26.         RST_CLK->PLL_CONTROL=(15/*11*/<<8)|(1<<2);                    //PLL CPU On, PLL_MULL=15. PLLCPUo = PLLCPUi x (PLLCPUMUL+1), Є.х. x16
  27.         while((RST_CLK->CLOCK_STATUS&0x02)!=0x02);              //wait until PLL CPU not ready
  28.         RST_CLK->PER_CLOCK|=0x08;                                               //EEPROM_CNTRL Clock enable
  29.         EEPROM->CMD=3<<3;                                                               //Delay=4
  30.         RST_CLK->PER_CLOCK&=(~0x08);                                    //EEPROM_CNTRL Clock enable
  31.         RST_CLK->CPU_CLOCK|=0x00000106; //HCLK=CPU_C3=CPU_C2, CPU_C2=PLLCPUo, CPU_C1=HSE //CPU Clock = 16*8MHz = 128 MHz
  32.         RST_CLK->ETH_CLOCK=(1<<24)|(3<<28)|(1<<27);             //PHY_CLK_SEL = HSE2, ETH_CLK_EN=1, PHY_CLK_EN=1, ETH_CLK = 25MHz
  33. #else //~REVISION_2
  34.         RST_CLK->HS_CONTROL=0x00000003;                                 //HSE - On; Gen mode On
  35.         while((RST_CLK->CLOCK_STATUS&0x04)!=0x04);              //Wait until HSE not ready
  36.         RST_CLK->CPU_CLOCK=0x00000003;                                  //HSE/2 = 12.5 MHz
  37.         RST_CLK->PLL_CONTROL=(7<<8)|(1<<2);                             //PLL CPU On;
  38.         while((RST_CLK->CLOCK_STATUS&0x02)!=0x02);              //wait until PLL CPU not ready
  39.         RST_CLK->PER_CLOCK|=0x08;                                               //EEPROM Clock enable
  40.         EEPROM->CMD=4<<3;                                                               //Delay = 4
  41.         RST_CLK->CPU_CLOCK|=0x00000107;                                 //CPU Clock = 8*12.5MHz = 100 MHz
  42.         RST_CLK->ETH_CLOCK=(1<<24)|(1<<28)|(1<<27);             //PHY_CLK_SEL = HSE, ETH_CLK_EN=1, PHY_CLK_EN=1, ETH_CLK = 25MHz
  43. #endif //~REVISION_2
  44.  
  45.         RST_CLK->PER_CLOCK|=(1<<24)|(1<<22);                    //Enable clock for PORTD and PORTB
  46. /*
  47.  
  48. //        RST_CLK->HS_CONTROL = 0x00000001;                       //HSE - On; Osc mode On (чрс√ыш яЁю HSE2)
  49.         while((RST_CLK->CLOCK_STATUS&RST_CLK_CLOCK_STATUS_HSE_RDY)==0); //Wait until HSE not ready
  50.         RST_CLK->PER_CLOCK|=0x08;                                       //EEPROM_CTRL Clock enable
  51.         EEPROM->CMD=0;
  52.         RST_CLK->PER_CLOCK&=(~0x08);                            //EEPROM_CTRL Clock disable
  53.         RST_CLK->CPU_CLOCK=0x00000002;                          //CPU_C1=HSE (8MHz)
  54. //        RST_CLK->PLL_CONTROL=RST_CLK_PLL_CONTROL_PLL_CPU_MUL_2|RST_CLK_PLL_CONTROL_PLL_CPU_ON;  //PLL_CPU_MULL=2, PLL_CPU On
  55.         while((RST_CLK->CLOCK_STATUS&RST_CLK_CLOCK_STATUS_PLL_CPU_RDY)==0);     //Wait until CPU PLL not ready
  56. //        RST_CLK->CPU_CLOCK=0x106; //тшёэхЄ //HCLK=CPU_C3=CPU_C2, CPU_C2=PLLCPUo, CPU_C1=HSE   //CPU clock=CPUPLL (16MHz)
  57.         RST_CLK->CPU_CLOCK=0x00000107;       //HCLK=CPU_C3=CPU_C2, CPU_C2=PLLCPUo, CPU_C1=HSE/2 //CPU Clock = 8*12.5MHz = 100 MHz
  58. */
  59. }
  60.  
  61.  
  62. /*
  63. //--- Clock configuration ---
  64. void ClkConfig()
  65. {
  66.         uint32_t temp;
  67.         RST_CLK->PER_CLOCK |= (1 << 27);                                //BKP Clock enable
  68.         temp = BKP->REG_0E;
  69.         temp &= 0xFFFFFFC0;
  70.         BKP->REG_0E = temp | (7 << 3) | 7;                              // SelectRI = 0x7, LOW = 0x7; (for core frequency more then 80 MHz);
  71.  
  72. #ifdef REVISION_2
  73.  
  74. #ifdef  HSE2_OSCILLATOR
  75.         RST_CLK->HS_CONTROL=0x00000005;                                 //HSE - On, Oscillator mode; HSE2 - On, Oscillator mode
  76. #else
  77.         RST_CLK->HS_CONTROL=0x0000000D;                                 //HSE - On, Oscillator mode; HSE2 - On, Generator mode
  78. #endif  //HSE2_OSCILLATOR
  79.         while((RST_CLK->CLOCK_STATUS&0x0C)!=0x0C);              //Wait until HSE and HSE2 not ready
  80.         RST_CLK->CPU_CLOCK=0x00000002;                                  //CPU_C1 = HSE = 8 MHz
  81.         RST_CLK->PLL_CONTROL=(11<<8)|(1<<2);                    //PLL CPU On, PLL_MULL = 11
  82. #else
  83.         RST_CLK->HS_CONTROL=0x00000003;                                 //HSE - On; Gen mode On
  84.         while((RST_CLK->CLOCK_STATUS&0x04)!=0x04);              //Wait until HSE not ready
  85.         RST_CLK->CPU_CLOCK=0x00000003;                                  //HSE/2 = 12.5 MHz;
  86.         RST_CLK->PLL_CONTROL=(7<<8)|(1<<2);                             //PLL CPU On;
  87. #endif  //REVISION_2
  88.  
  89.         while((RST_CLK->CLOCK_STATUS&0x02)!=0x02);              //wait until PLL CPU not ready
  90.         RST_CLK->PER_CLOCK|=0x08;                                               //EEPROM_CTRL Clock enable
  91.         EEPROM->CMD=4<<3;                                                               //Delay = 4
  92.         RST_CLK->PER_CLOCK&=(~0x08);                                    //EEPROM_CTRL Clock disable
  93.  
  94. #ifdef REVISION_2
  95.         RST_CLK->CPU_CLOCK|=0x00000106;                                 //CPU Clock = 12*8 MHz = 96 MHz
  96.         RST_CLK->ETH_CLOCK=(1<<24)|(1<<27)|(3<<28);             //PHY_CLK_SEL = HSE2, ETH_CLK_EN=1, PHY_CLK_EN=1
  97. #else
  98.         RST_CLK->CPU_CLOCK|=0x00000107;                                 //CPU Clock = 8*12.5MHz = 100 MHz
  99.         RST_CLK->ETH_CLOCK=(1<<24)|(1<<28)|(1<<27);             //PHY_CLK_SEL = HSE, ETH_CLK_EN=1, PHY_CLK_EN=1
  100. #endif  //REVISION_2
  101.  
  102.         RST_CLK->PER_CLOCK|=(1<<24)|(1<<22);                    //Enable clock for PORTD and PORTB
  103. }
  104. */
  105. //--- Ports configuration ---
  106. void PortConfig()
  107. {
  108. /*        PORTD->FUNC = 0x00000000;
  109.         PORTD->ANALOG=0xFFFF;
  110.         PORTD->RXTX=0;
  111.         PORTD->OE|=0x7F80;
  112.         PORTD->PWR|=0x3FFFC000;
  113.  
  114.         PORTB->FUNC = 0x00;
  115.         PORTB->ANALOG=0x3<<14;
  116.         PORTB->RXTX=0;
  117.         PORTB->OE|=0x3<<14;
  118.         PORTB->PWR|=0xF<<28;
  119. */
  120.         RST_CLK->PER_CLOCK|=(0x1F<<21)|(1<<29); //Enable clock of PORTA, PORTB, PORTC, PORTD, PORTE, PORTF
  121.  
  122.         //Config Data Bus
  123.         PORTA->FUNC=0x55555555;                 //PORTA - DATA bus
  124.         PORTA->ANALOG=0xFFFF;                   //PORTA - digital
  125.         PORTA->PWR=0xFFFFFFFF;                  //PORTA - fast speed
  126.  
  127.         PORTB->FUNC=0x55555555;                 //PORTB - DATA bus
  128.         PORTB->ANALOG=0xFFFF;                   //PORTB - digital
  129.         PORTB->PWR=0xFFFFFFFF;                  //PORTB - fast speed
  130.  
  131.         //Config ~OE, ~WE, BE3, BE2, BE1, BE0 (шэтхЁёэ√х???)
  132.         PORTC->FUNC=0x02A80005;                 //PORTC[12..9] - BE3, BE2, BE1, BE0 (шэтхЁёэ√х???); PORTC[1..0] - ~RD(~OE), ~WR(~WE)
  133.         PORTC->ANALOG=0x1E03;                   //PORTC[12..9], PORTC[1..0] - digital
  134.         PORTC->PWR=0x03FC000F;                  //PORTC - fast speed
  135.  
  136.         //Config Address Bus and CS
  137.         PORTF->FUNC=0xAAAAA800;                 //PORTF[15..5] - ADDRESS bus
  138.         PORTF->ANALOG=0xFFE0;                   //PORTF[15..5] - digital
  139.         PORTF->PWR=0xFFFFFC00;                  //PORTF - fast speed
  140.  
  141.         PORTD->FUNC=0x80000000;                 //PORTD_15 - ADDRESS[13]
  142.         PORTD->ANALOG=0x8000;                   //PORTD_15 - digital
  143.         PORTD->PWR=0xC0000000;                  //PORTD - fast speed
  144.  
  145.         PORTE->FUNC=0x00000AAA;                 //PORTE[5..0] - ADDRESS[19..14], PORTE_7 - ADDRESS[21] (шыш /CS1???),
  146.         PORTE->RXTX=0x0040;                             //PORTE_6=1 (~CS1=1) (шыш CS0???)
  147.         PORTE->OE=0x00C0;                               //PORTE_6 - Output (ш PORTE_7???)
  148.         PORTE->ANALOG=0x00FF;                   //PORTE[7..0] - digital
  149.         PORTE->PWR=0x0000FFFF;                  //PORTE - fast speed
  150.  
  151.         PORTE->CLRTX=0x40;
  152.         PORTE->SETTX=0x80;
  153.  
  154.         //Config LEDS
  155.         PORTD->RXTX=0;
  156.         PORTD->OE|=0x7F80;
  157.         PORTD->ANALOG|=0x7F80;                  //PORTD[14..7] - digital
  158.         PORTD->PWR|=0x3FFFC000;                 //PORTD - fast speed
  159.  
  160. //ExternalBusConfig
  161.         RST_CLK->PER_CLOCK|=1<<30;              //Enable clock of External Bus
  162.         EXT_BUS_CNTRL->EXT_BUS_CONTROL=(0x0002)|(/*15*/8<<12);        //RAM enable, speed 8
  163. //╤ яЁютюфрьш яЁш CPU_CLK = 96 ╠├Ў (эрёЄЁющър шч яЁшьхЁр) яюыєўшыё  фхышЄхы№ WAIT_STATE ьшэшьєь "7" (2+4+2), Є.х. 12 ╠├Ў (>83 эё). ─рцх яЁш "4" (2+2+1) ЁрсюЄрхЄ Єюы№ъю яюыютшэр ЄхёЄр ярь Єш (ё яЁютюфрьш).
  164. //╧Ёш CPU_CLK = 128 ╠├Ў (ъръ яюыєўшЄ№ 144 ╠├Ў шч 8 ╠├Ў? эрфю фЁєующ юёЎшыы ЄюЁ HSE?) фхышЄхы№ WAIT_STATE ьшэшьєь "8" (3+4+2), Є.х. 14.2 ╠├Ў (>70 эё) - тшфшью, яЁш "6" (2+3+2) ш "7" (2+4+2) эхєфрўэ√х ЁрёЄръЄютъш.
  165. //╤рьр ьшъЁюёїхьр ярь Єш шьххЄ "┬Ёхь  т√сюЁъш яю рфЁхёє ш ёшуэрыє n╤┼1 ш CE2 эх сюыхх 30 эё", "┬Ёхь  Ўшъыр ёўшЄ√трэш  шэЇюЁьрЎшш ьшэ 30 эё", "┬Ёхь  Ўшъыр чряшёш шэЇюЁьрЎшш ьшэ 30 эё".
  166. //╧ю фюъх эр ьшъЁюёїхьє ╬╟╙ ш яЁш ўЄхэшш, ш яЁш чряшёш эх эєцэр чрфхЁцър рфЁхёр яюёых ёэ Єш  єяЁрты ■∙шї ёшуэрыют.
  167. //╧юяЁюсєхь ёфхырЄ№ ЁрёЄръЄютъє 3+4+0 (ЁрсюЄрхЄ):
  168.         //EXT_BUS_CNTRL->RAM_CYCLES3 = (0<<11)+(3<<8)+(4<<1)+1; //WS_HOLD=0, WS_SETUP=3, WS_ACTIVE=4, ENABLE_TUNE=1
  169. //╧юяЁюсєхь ёфхырЄ№ ЁрёЄръЄютъє 1+4+0 (эх ЁрсюЄрхЄ):
  170.         //EXT_BUS_CNTRL->RAM_CYCLES3 = (0<<11)+(1<<8)+(4<<1)+1; //WS_HOLD=0, WS_SETUP=1, WS_ACTIVE=4, ENABLE_TUNE=1
  171. //╧юяЁюсєхь ёфхырЄ№ ЁрёЄръЄютъє 2+4+0 (ЁрсюЄрхЄ):
  172.         EXT_BUS_CNTRL->RAM_CYCLES3 = (0<<11)+(2<<8)+(4<<1)+1; //WS_HOLD=0, WS_SETUP=2, WS_ACTIVE=4, ENABLE_TUNE=1
  173.  
  174. }
  175.  
  176. #endif  //__CONFIG_C
  177.  
  178.