]> rtime.felk.cvut.cz Git - pes-rpp/rpp-lib.git/commitdiff
MCU initialization tuned for RM48
authorMichal Horn <hornmich@fel.cvut.cz>
Wed, 22 Oct 2014 11:45:45 +0000 (13:45 +0200)
committerMichal Horn <hornmich@fel.cvut.cz>
Wed, 22 Oct 2014 11:45:45 +0000 (13:45 +0200)
- Registers definitions switched to little endian.
- Pinmux tuned for RM48 with GPIOA, GPIOB and EMIF enabled, NHET, DMM,
  SCI2 and EMAC disabled.
- Wrong value systemREG1->MINITGCR = 0xA fixed to 0x5 for disable
  memory HW initialization. This value has been badly generated by the old
  HALCoGen version.
- TMS570 specific memory tests for FRAY and FTU disabled.
- PLL and clock domains settings tuned:
  RM48 can run on higher frequency, which required increacing the
  PLL multiplication factor and decreasing VCLK divider.
  Also unused Clock domains (RTI, EMAC, USB) has been disabled.

Now the code is able to enter the main() function.

This commit refs: #1024

Signed-off-by: Michal Horn <hornmich@fel.cvut.cz>
rpp/include/base.h
rpp/src/sys/sys_pinmux.c
rpp/src/sys/sys_selftest.c
rpp/src/sys/sys_startup.c
rpp/src/sys/system.c

index 33a1d05b6dfaa38c64da90d16534ccb6eaaa78bd..d62fdf612b336e7cbc8b919f02aac59f4cae0b5b 100644 (file)
  */
 #define UNUSED(x) (void)(x)
 
+/**
+ * Constant used to switch endianity
+ */
+#define __LITTLE_ENDIAN__       1
+
 /**
  * General debug directive.
  */
index d9ce80d877ffced579027d471c4191e588c6b054..6741f95162b9ec12e403deba6e4c813225305ed3 100644 (file)
@@ -41,71 +41,67 @@ void muxInit(void){
 /* USER CODE BEGIN (2) */
 /* USER CODE END */
 
-    pinMuxReg->PINMUX0 = PINMUX_BALL_C3_I2C_SCL | PINMUX_BALL_B2_I2C_SDA;
+    pinMuxReg->PINMUX0 = PINMUX_BALL_W10_GIOB_3 | PINMUX_BALL_A5_GIOA_0 | PINMUX_BALL_C3_MIBSPI3NCS_3 | PINMUX_BALL_B2_MIBSPI3NCS_2;
 
-    pinMuxReg->PINMUX1 = PINMUX_BALL_E3_MIBSPI3NCS_4 | PINMUX_BALL_E5_EMIF_DATA_4 | PINMUX_BALL_F5_EMIF_DATA_5;
+    pinMuxReg->PINMUX1 = PINMUX_BALL_C2_GIOA_1 | PINMUX_BALL_E3_HET1_11 | PINMUX_BALL_E5_EMIF_DATA_4 | PINMUX_BALL_F5_EMIF_DATA_5;
 
     pinMuxReg->PINMUX2 = PINMUX_BALL_C1_GIOA_2 | PINMUX_BALL_G5_EMIF_DATA_6 | PINMUX_BALL_E1_GIOA_3 | PINMUX_BALL_B5_GIOA_5;
 
-    pinMuxReg->PINMUX3 = PINMUX_BALL_K5_EMIF_DATA_7 | PINMUX_BALL_H3_GIOA_6 | PINMUX_BALL_L5_EMIF_DATA_8;
+    pinMuxReg->PINMUX3 = PINMUX_BALL_K5_EMIF_DATA_7 | PINMUX_BALL_B3_HET1_22 | PINMUX_BALL_H3_GIOA_6 | PINMUX_BALL_L5_EMIF_DATA_8;
 
-    pinMuxReg->PINMUX4 = PINMUX_BALL_M1_GIOA_7 | PINMUX_BALL_M5_EMIF_DATA_9 | PINMUX_BALL_V2_HET1_01 | PINMUX_BALL_U1_SPI4NCS_0;
+    pinMuxReg->PINMUX4 = PINMUX_BALL_M1_GIOA_7 | PINMUX_BALL_M5_EMIF_DATA_9 | PINMUX_BALL_V2_HET1_01 | PINMUX_BALL_U1_HET1_03;
 
-    pinMuxReg->PINMUX5 = PINMUX_BALL_K18_SPI4CLK | PINMUX_BALL_W5_SPI4SIMO | PINMUX_BALL_V6_SPI4SOMI | PINMUX_BALL_N5_EMIF_DATA_10;
+    pinMuxReg->PINMUX5 = PINMUX_BALL_K18_HET1_0 | PINMUX_BALL_W5_HET1_02 | PINMUX_BALL_V6_HET1_05 | PINMUX_BALL_N5_EMIF_DATA_10;
 
     pinMuxReg->PINMUX6 = PINMUX_BALL_T1_HET1_07 | PINMUX_BALL_P5_EMIF_DATA_11 | PINMUX_BALL_V7_HET1_09 | PINMUX_BALL_R5_EMIF_DATA_12;
 
-    pinMuxReg->PINMUX7 = PINMUX_BALL_R6_EMIF_DATA_13 | PINMUX_BALL_V5_MDCLK | PINMUX_BALL_W3_SCIRX | PINMUX_BALL_R7_EMIF_DATA_14;
+    pinMuxReg->PINMUX7 = PINMUX_BALL_R6_EMIF_DATA_13 | PINMUX_BALL_V5_MIBSPI3NCS_1 | PINMUX_BALL_W3_SCIRX | PINMUX_BALL_R7_EMIF_DATA_14;
 
-    pinMuxReg->PINMUX8 = PINMUX_BALL_N2_SCITX | PINMUX_BALL_G3_MDIO | PINMUX_BALL_N1_MIBSPI1NCS_4 | PINMUX_BALL_R8_EMIF_DATA_15;
+    pinMuxReg->PINMUX8 = PINMUX_BALL_N2_SCITX | PINMUX_BALL_G3_MIBSPI1NCS_2 | PINMUX_BALL_N1_HET1_15 | PINMUX_BALL_R8_EMIF_DATA_15;
 
-    pinMuxReg->PINMUX9 = PINMUX_BALL_R9_ETMTRACECLKIN | PINMUX_BALL_W9_MIBSPI3NCS_5 | PINMUX_BALL_V10_MIBSPI3NCS_0 | PINMUX_BALL_J3_MIBSPI1NCS_3;
+    pinMuxReg->PINMUX9 = ((~(pinMuxReg->PINMUX9 >> 18U) & 0x00000001U ) << 18U) | PINMUX_BALL_R9_ETMTRACECLKIN | PINMUX_BALL_W9_MIBSPI3NENA | PINMUX_BALL_V10_GIOB_2 | PINMUX_BALL_J3_MIBSPI1NCS_3;
 
-    pinMuxReg->PINMUX10 = PINMUX_BALL_N19_MII_RX_ER | PINMUX_BALL_N15_EMIF_DATA_3 | PINMUX_BALL_N17_EMIF_nCS_0 | PINMUX_BALL_M15_EMIF_DATA_2;
+    pinMuxReg->PINMUX10 = PINMUX_BALL_N19_AD1EVT | PINMUX_BALL_N15_EMIF_DATA_3 | PINMUX_BALL_N17_EMIF_nCS_0 | PINMUX_BALL_M15_EMIF_DATA_2;
 
-    pinMuxReg->PINMUX11 = PINMUX_BALL_K17_EMIF_nCS_3 | PINMUX_BALL_M17_EMIF_nCS_4 | PINMUX_BALL_L15_EMIF_DATA_1 | PINMUX_BALL_P1_MII_RXD_0;
+    pinMuxReg->PINMUX11 = PINMUX_BALL_K17_EMIF_nCS_3 | PINMUX_BALL_M17_EMIF_nCS_4 | PINMUX_BALL_L15_EMIF_DATA_1 | PINMUX_BALL_P1_HET1_24;
 
-    pinMuxReg->PINMUX12 = PINMUX_BALL_A14_MII_RXD_1 | PINMUX_BALL_K15_EMIF_DATA_0 | PINMUX_BALL_G19_MII_RXD_2 | PINMUX_BALL_H18_MII_RXD_3;
+    pinMuxReg->PINMUX12 = PINMUX_BALL_A14_HET1_26 | PINMUX_BALL_K15_EMIF_DATA_0 | PINMUX_BALL_G19_MIBSPI1NENA | PINMUX_BALL_H18_MIBSPI5NENA;
 
-    pinMuxReg->PINMUX13 = PINMUX_BALL_J18_MII_TXD_0 | PINMUX_BALL_J19_MII_TXD_1 | PINMUX_BALL_H19_MII_TXEN | PINMUX_BALL_R2_MII_TXD_2;
+    pinMuxReg->PINMUX13 = PINMUX_BALL_J18_MIBSPI5SOMI_0 | PINMUX_BALL_J19_MIBSPI5SIMO_0 | PINMUX_BALL_H19_MIBSPI5CLK | PINMUX_BALL_R2_MIBSPI1NCS_0;
 
-    pinMuxReg->PINMUX14 = PINMUX_BALL_E18_MII_TXD_3 | PINMUX_BALL_K19_MII_RXCLK | PINMUX_BALL_D17_EMIF_nWE | PINMUX_BALL_D16_EMIF_BA_1;
+    pinMuxReg->PINMUX14 = PINMUX_BALL_E18_HET1_08 | PINMUX_BALL_K19_HET1_28 | PINMUX_BALL_D17_EMIF_nWE | PINMUX_BALL_D16_EMIF_BA_1;
 
     pinMuxReg->PINMUX15 = PINMUX_BALL_C17_EMIF_ADDR_21 | PINMUX_BALL_C16_EMIF_ADDR_20 | PINMUX_BALL_C15_EMIF_ADDR_19 | PINMUX_BALL_D15_EMIF_ADDR_18;
 
     pinMuxReg->PINMUX16 = PINMUX_BALL_E13_EMIF_BA_0 | PINMUX_BALL_C14_EMIF_ADDR_17 | PINMUX_BALL_D14_EMIF_ADDR_16 | PINMUX_BALL_E12_EMIF_nOE;
 
-    pinMuxReg->PINMUX17 = PINMUX_BALL_D19_MII_TX_CLK | PINMUX_BALL_E11_EMIF_nDQM_1 | PINMUX_BALL_B4_MII_CRS | PINMUX_BALL_E9_EMIF_ADDR_5;
+    pinMuxReg->PINMUX17 = PINMUX_BALL_D19_HET1_10 | PINMUX_BALL_E11_EMIF_nDQM_1 | PINMUX_BALL_B4_HET1_12 | PINMUX_BALL_E9_EMIF_ADDR_5;
 
-    pinMuxReg->PINMUX18 = PINMUX_BALL_C13_EMIF_ADDR_15 | PINMUX_BALL_C12_EMIF_ADDR_14 | PINMUX_BALL_M2_GIOB_0;
+    pinMuxReg->PINMUX18 = PINMUX_BALL_C13_EMIF_ADDR_15 | PINMUX_BALL_A11_HET1_14 | PINMUX_BALL_C12_EMIF_ADDR_14 | PINMUX_BALL_M2_GIOB_0;
 
-    pinMuxReg->PINMUX19 = PINMUX_BALL_E8_EMIF_ADDR_4 | PINMUX_BALL_B11_MII_RX_DV | PINMUX_BALL_E10_EMIF_nDQM_0 | PINMUX_BALL_E7_EMIF_ADDR_3;
+    pinMuxReg->PINMUX19 = PINMUX_BALL_E8_EMIF_ADDR_4| PINMUX_BALL_B11_HET1_30 | PINMUX_BALL_E10_EMIF_nDQM_0 | PINMUX_BALL_E7_EMIF_ADDR_3;
 
-    pinMuxReg->PINMUX20 = PINMUX_BALL_C11_EMIF_ADDR_13 | PINMUX_BALL_C10_EMIF_ADDR_12 | PINMUX_BALL_F3_MII_COL | PINMUX_BALL_C9_EMIF_ADDR_11;
+    pinMuxReg->PINMUX20 = PINMUX_BALL_C11_EMIF_ADDR_13 | PINMUX_BALL_C10_EMIF_ADDR_12 | PINMUX_BALL_F3_MIBSPI1NCS_1 | PINMUX_BALL_C9_EMIF_ADDR_11;
 
-    pinMuxReg->PINMUX21 = PINMUX_BALL_D5_EMIF_ADDR_1 | PINMUX_BALL_C8_EMIF_ADDR_10 | PINMUX_BALL_C7_EMIF_ADDR_9;
+    pinMuxReg->PINMUX21 = PINMUX_BALL_D5_EMIF_ADDR_1 | PINMUX_BALL_K2_GIOB_1 | PINMUX_BALL_C8_EMIF_ADDR_10 | PINMUX_BALL_C7_EMIF_ADDR_9;
 
     pinMuxReg->PINMUX22 = PINMUX_BALL_D4_EMIF_ADDR_0 | PINMUX_BALL_C5_EMIF_ADDR_7 | PINMUX_BALL_C4_EMIF_ADDR_6 | PINMUX_BALL_E6_EMIF_ADDR_2;
 
-    pinMuxReg->PINMUX23 =  0x00010100|  /* SPI4SOMI is on ball W6 */
-                               PINMUX_BALL_C6_EMIF_ADDR_8;
+    pinMuxReg->PINMUX23 = ((~(pinMuxReg->PINMUX5 >> 1U) & 0x00000001U ) << 8U) | ((~(pinMuxReg->PINMUX5 >> 9U) & 0x00000001U ) << 16U) | ((~(pinMuxReg->PINMUX5 >> 17U) & 0x00000001U ) << 24U) | PINMUX_BALL_C6_EMIF_ADDR_8;
 
-    pinMuxReg->PINMUX24 = 0x01010101;
+    pinMuxReg->PINMUX24 = ((~(pinMuxReg->PINMUX4 >> 17U) & 0x00000001U ) << 0U) | ((~(pinMuxReg->PINMUX4 >> 25U) & 0x00000001U ) << 8U) | ((~(pinMuxReg->PINMUX20 >> 17U) & 0x00000001U ) << 16U) | ((~(pinMuxReg->PINMUX8 >> 9U) & 0x00000001U ) << 24U);
 
-    pinMuxReg->PINMUX25 = 0x01010101;
+    pinMuxReg->PINMUX25 = ((~(pinMuxReg->PINMUX12 >> 17U) & 0x00000001U ) << 8U) | ((~(pinMuxReg->PINMUX7 >> 9U) & 0x00000001U ) << 16U) | ((~(pinMuxReg->PINMUX0 >> 26U) & 0x00000001U ) << 24U);
 
-    /* Halcogen fix enabling N2HET1[29], N2HET1[31] */
-    pinMuxReg->PINMUX26 = 0x0101 | PINMUX_BALL_W6_DMM_DATA_2 | PINMUX_BALL_T12_DMM_DATA_3;
-
-    pinMuxReg->PINMUX27 = PINMUX_BALL_E19_DMM_DATA_5 | PINMUX_BALL_B6_DMM_DATA_6 | PINMUX_BALL_E16_DMM_DATA_9 | PINMUX_BALL_H17_DMM_DATA_10;
-
-    pinMuxReg->PINMUX28 = PINMUX_BALL_G17_DMM_DATA_11 | PINMUX_BALL_E17_DMM_DATA_13 | PINMUX_BALL_H16_DMM_DATA_14 | PINMUX_BALL_G16_DMM_DATA_15;
-
-    pinMuxReg->PINMUX29 = PINMUX_BALL_D3_SPI2NCS_1;
+    pinMuxReg->PINMUX26 = ((~(pinMuxReg->PINMUX0 >> 18U) & 0x00000001U ) << 0U) | ((~(pinMuxReg->PINMUX9 >> 10U) & 0x00000001U ) << 8U) | PINMUX_BALL_W6_MIBSPI5NCS_2 | PINMUX_BALL_T12_MIBSPI5NCS_3;
 
+    pinMuxReg->PINMUX27 = PINMUX_BALL_E19_MIBSPI5NCS_0 | PINMUX_BALL_B6_MIBSPI5NCS_1 | PINMUX_BALL_E16_MIBSPI5SIMO_1 | PINMUX_BALL_H17_MIBSPI5SIMO_2;
 
+    pinMuxReg->PINMUX28 = PINMUX_BALL_G17_MIBSPI5SIMO_3 | PINMUX_BALL_E17_MIBSPI5SOMI_1 | PINMUX_BALL_H16_MIBSPI5SOMI_2 | PINMUX_BALL_G16_MIBSPI5SOMI_3;
 
+    pinMuxReg->PINMUX29 = PINMUX_BALL_D3_SPI2NENA | PINMUX_BALL_V10_GIOB_2 ;
 
+    PINMUX_GATE_EMIF_CLK_ENABLE;
     PINMUX_ALT_ADC_TRIGGER_SELECT(1);
     PINMUX_ETHERNET_SELECT(MII);
 
index d9e0ff54e05e7b7b4896e5c68a644a1d4fbf5a02..bb2a4dbf6f35bfafd4d21aacef8ebf79a4e88d5e 100644 (file)
@@ -143,7 +143,7 @@ void _memoryInit_(unsigned int ram)
     while( systemREG1->MSTCGSTAT & 0x00000100 != 1);
 
     /* Disable Memory Hardware Initialization */
-    systemREG1->MINITGCR = 0xA;
+    systemREG1->MINITGCR = 0x5;
 }
 
 /** @fn void stcSelfCheck(void)
index 948aab2031b29d5a67280bab0ed67a17351c4a38..8d0eeb2a3baf08b5795b1618b40b9b1944d21bf3 100644 (file)
@@ -483,8 +483,6 @@ void _c_int00()
              | 0x00002000    /*   HTU1 Dual Port PBIST  */
              | 0x00080000    /*   HTU2 Dual Port PBIST  */
              | 0x00004000    /*   RTP Dual Port PBIST  */
-             | 0x00000000    /*   FTU Dual Port PBIST for TMS570x / Reserved for RMx */
-             | 0x00008000    /*   FRAY Dual Port PBIST for TMS570x / Reserved for RMx */
              , PBIST_March13N_DP);
 
 /* USER CODE BEGIN (33) */
index 13aeac73e38675a09770cb2a79a11a2291046a83..631699e9259c3c33f36e12dbc000587861d6b7cf 100644 (file)
@@ -39,6 +39,16 @@ void setupPLL(void)
 
 /* USER CODE BEGIN (3) */
 /* USER CODE END */
+       /* Disable PLL1 and PLL2 */
+       systemREG1->CSDISSET = 0x00000002U | 0x00000040U;
+       /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Hardware status bit read check" */
+       while((systemREG1->CSDIS & 0x42U) != 0x42U)
+       {
+       /* Wait */
+       }
+
+       /* Clear Global Status Register */
+       systemREG1->GBLSTAT = 0x301U;
 
     /** - Configure PLL control registers */
     /** @b Initialize @b Pll1: */
@@ -56,7 +66,7 @@ void setupPLL(void)
                         | ((0x1F)<< 24U)
                         |  0x00000000U
                         | ((6U - 1U)<< 16U)
-                        | ((120U - 1U)<< 8U);
+                        | ((165U - 1U)<< 8U);
 
     /**   - Setup pll control register 2
     *     - Enable/Disable frequency modulation
@@ -82,7 +92,7 @@ void setupPLL(void)
     systemREG2->PLLCTL3 = ((2U - 1U) << 29U)
                         | ((0x1F)<< 24U)
                         | ((6U - 1U)<< 16U)
-                        | ((120U - 1U) << 8U);
+                        | ((165U - 1U) << 8U);
 
     /** - Enable PLL(s) to start up or Lock */
     systemREG1->CSDIS = 0x00000000U
@@ -188,11 +198,16 @@ void mapClocks(void)
 
     /** @b Initialize @b Clock @b Tree: */
     /** - Diable / Enable clock domain */
-    systemREG1->CDDIS= (FALSE << 4 ) /* AVCLK 1 OFF */
-                      |(FALSE << 5 ) /* AVCLK 2 OFF */
-                      |(FALSE << 8 ) /* VCLK3 OFF */
-                      |(FALSE << 10) /* AVCLK 3 OFF */
-                      |(FALSE << 11); /* AVCLK 4 OFF */
+    systemREG1->CDDIS = (FALSE << 0 ) |        /* GCLK ON - CortexR4F Core clock domain */
+                        (FALSE << 1 ) |        /* HCLK ON - System clock domain */
+                        (FALSE << 2 ) |        /* VCLK1 ON - Periph clock domain for SPI1-5, LIN, SCI, I2C, ADC1,2 */
+                        (FALSE << 3 ) |        /* VCLK2 ON - Periph clock domain for HET1, HET2, HTU1, HTU2 */
+                        (FALSE << 4 ) |        /* VCLKA1 ON - Periph clock domain for CAN1-3 */
+                        (FALSE << 5 ) |        /* VCLKA2 ON - Periph clock domain for CAN1-3 */
+                        (TRUE  << 6 ) |        /* RTICLK1 OFF - Real Time Interrupt clock domain */
+                        (FALSE << 8 ) |        /* VCLK3 ON - Periph clock domain for EMIF, EMAC, USB */
+                        (TRUE  << 10) |        /* VCLKA3 OFF - Periph clock domain for EMAC */
+                        (TRUE  << 11) ;        /* VCLKA4 OFF - Periph clock domain for USB */
 
     /** - Wait for until clocks are locked */
     while ((systemREG1->CSVSTAT & ((systemREG1->CSDIS ^ 0xFF) & 0xFF)) != ((systemREG1->CSDIS ^ 0xFF) & 0xFF))
@@ -206,14 +221,16 @@ void mapClocks(void)
     /* The R-divider was programmed to be 0xF. Now this divider is changed to programmed value */
     systemREG1->PLLCTL1 = (systemREG1->PLLCTL1 & 0xE0FFFFFF)|((1U - 1U)<< 24U);
     systemREG2->PLLCTL3 = (systemREG2->PLLCTL3 & 0xE0FFFFFF)|((1U - 1U)<< 24U);
+    /* Enable/Disable Frequency modulation */
+       systemREG1->PLLCTL2 |= 0x00000000U;
 
     /** - Map device clock domains to desired sources and configure top-level dividers */
     /** - All clock domains are working off the default clock sources until now */
     /** - The below assignments can be easily modified using the HALCoGen GUI */
 
     /** - Setup GCLK, HCLK and VCLK clock source for normal operation, power down mode and after wakeup */
-    systemREG1->GHVSRC = (SYS_PLL1 << 24U)
-                       | (SYS_PLL1 << 16U)
+    systemREG1->GHVSRC = (SYS_OSC << 24U)
+                       | (SYS_OSC << 16U)
                        |  SYS_PLL1;
 
     /** - Setup synchronous peripheral clock dividers for VCLK1, VCLK2, VCLK3 */
@@ -234,11 +251,11 @@ void mapClocks(void)
     systemREG1->VCLKASRC = (SYS_VCLK << 8U)
                           |  SYS_VCLK;
 
-    systemREG2->VCLKACON1 = (1U << 24)
-                           | 1 << 20U
+    systemREG2->VCLKACON1 = (0U << 24)
+                           | 0 << 20U
                            | (SYS_VCLK << 16)
-                           | (1U << 8)
-                           | 1 << 4U
+                           | (0U << 8)
+                           | 0 << 4U
                            | SYS_VCLK;
 
 /* USER CODE BEGIN (13) */