File indexing completed on 2025-05-11 08:23:39
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 #include <bsp/tms570.h>
0048 #include <bsp/tms570_hwinit.h>
0049 #include <bsp/tms570-pinmux.h>
0050
0051 typedef enum Tms570ClockDisableSources {
0052 TMS570_CLKDIS_SRC_OSC = 0x01,
0053 TMS570_CLKDIS_SRC_PLL1 = 0x02,
0054 TMS570_CLKDIS_SRC_RESERVED = 0x04,
0055 TMS570_CLKDIS_SRC_EXT_CLK1 = 0x08,
0056 TMS570_CLKDIS_SRC_LOW_FREQ_LPO = 0x10,
0057 TMS570_CLKDIS_SRC_HIGH_FREQ_LPO = 0x20,
0058 TMS570_CLKDIS_SRC_PLL2 = 0x40,
0059 TMS570_CLKDIS_SRC_EXT_CLK2 = 0x80,
0060 } Tms570ClockDisableSources;
0061
0062
0063 typedef enum Tms570GhvClockSources {
0064 TMS570_SYS_CLK_SRC_OSC = 0U,
0065 TMS570_SYS_CLK_SRC_PLL1 = 1U,
0066 TMS570_SYS_CLK_SRC_EXTERNAL1 = 3U,
0067 TMS570_SYS_CLK_SRC_LPO_LOW = 4U,
0068 TMS570_SYS_CLK_SRC_LPO_HIGH = 5U,
0069 TMS570_SYS_CLK_SRC_PLL2 = 6U,
0070 TMS570_SYS_CLK_SRC_EXTERNAL2 = 7U,
0071 TMS570_SYS_CLK_SRC_VCLK = 9U
0072 } Tms570GhvClockSources;
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082 static const uint32_t tms570_pinmmr_init_data[] = {
0083 TMS570_PINMMR_REG_VAL( 0, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0084 TMS570_PINMMR_REG_VAL( 1, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0085 TMS570_PINMMR_REG_VAL( 2, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0086 TMS570_PINMMR_REG_VAL( 3, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0087 TMS570_PINMMR_REG_VAL( 4, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0088 TMS570_PINMMR_REG_VAL( 5, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0089 TMS570_PINMMR_REG_VAL( 6, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0090 TMS570_PINMMR_REG_VAL( 7, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0091 TMS570_PINMMR_REG_VAL( 8, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0092 TMS570_PINMMR_REG_VAL( 9, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0093 TMS570_PINMMR_REG_VAL( 10, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0094 TMS570_PINMMR_REG_VAL( 11, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0095 TMS570_PINMMR_REG_VAL( 12, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0096 TMS570_PINMMR_REG_VAL( 13, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0097 TMS570_PINMMR_REG_VAL( 14, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0098 TMS570_PINMMR_REG_VAL( 15, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0099 TMS570_PINMMR_REG_VAL( 16, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0100 TMS570_PINMMR_REG_VAL( 17, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0101 TMS570_PINMMR_REG_VAL( 18, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0102 TMS570_PINMMR_REG_VAL( 19, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0103 TMS570_PINMMR_REG_VAL( 20, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0104 TMS570_PINMMR_REG_VAL( 21, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0105 TMS570_PINMMR_REG_VAL( 22, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0106 TMS570_PINMMR_REG_VAL( 23, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0107 TMS570_PINMMR_REG_VAL( 24, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0108 TMS570_PINMMR_REG_VAL( 25, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0109 TMS570_PINMMR_REG_VAL( 26, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0110 TMS570_PINMMR_REG_VAL( 27, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0111 TMS570_PINMMR_REG_VAL( 28, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0112 TMS570_PINMMR_REG_VAL( 29, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0113 TMS570_PINMMR_REG_VAL( 30, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0114 TMS570_PINMMR_REG_VAL( 31, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0115 TMS570_PINMMR_REG_VAL( 32, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0116 TMS570_PINMMR_REG_VAL( 33, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0117 TMS570_PINMMR_REG_VAL( 34, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0118 TMS570_PINMMR_REG_VAL( 35, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0119 TMS570_PINMMR_REG_VAL( 36, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0120 TMS570_PINMMR_REG_VAL( 37, TMS570LC4357_PINMMR_DEFAULT_INIT_LIST ),
0121 };
0122
0123 void tms570_pinmux_init( void )
0124 {
0125 tms570_bsp_pinmmr_config(tms570_pinmmr_init_data, 0, RTEMS_ARRAY_SIZE(tms570_pinmmr_init_data));
0126
0127 tms570_pin_config_prepare();
0128 TMS570_PINMUX[174] = (TMS570_PINMUX[174] & ~(UINT32_C(0x3) << 8)) | (UINT32_C(0x2) << 8);
0129 tms570_pin_config_complete();
0130
0131
0132 TMS570_SYS1.SYSPC1 = 0;
0133 TMS570_SYS1.SYSPC2 = 0;
0134 }
0135
0136 void tms570_emif_sdram_init( void )
0137 {
0138 uint32_t dummy;
0139
0140
0141 if ( tms570_running_from_sdram() )
0142 return;
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152 TMS570_EMIF.SDTIMR = (uint32_t)1U << 27U|
0153 (uint32_t)0U << 24U|
0154 (uint32_t)0U << 20U|
0155 (uint32_t)0U << 19U|
0156 (uint32_t)1U << 16U|
0157 (uint32_t)1U << 12U|
0158 (uint32_t)1U << 8U|
0159 (uint32_t)0U << 4U;
0160
0161
0162
0163 TMS570_EMIF.SDSRETR = 2;
0164
0165
0166
0167
0168
0169 TMS570_EMIF.SDRCR = 1600;
0170
0171 TMS570_EMIF.SDCR = ((uint32_t)0U << 31U)|
0172 ((uint32_t)1U << 14U)|
0173 ((uint32_t)2U << 9U)|
0174 ((uint32_t)1U << 8U)|
0175 ((uint32_t)2U << 4U)|
0176 ((uint32_t)0);
0177
0178
0179 dummy = *(volatile uint32_t*)TMS570_MEMORY_SDRAM_ORIGIN;
0180 (void) dummy;
0181
0182
0183
0184
0185 TMS570_EMIF.SDRCR = 1251;
0186
0187
0188
0189
0190
0191 *((volatile unsigned char *)(&TMS570_EMIF.SDCR) + 0x0U) = 0x80;
0192 }
0193
0194
0195
0196
0197
0198 void tms570_pll_init( void )
0199 {
0200
0201 uint32_t pll12_dis = TMS570_CLKDIS_SRC_PLL1 | TMS570_CLKDIS_SRC_PLL2;
0202
0203
0204 TMS570_SYS1.CSDISSET = pll12_dis;
0205
0206
0207 while ( ( TMS570_SYS1.CSDIS & pll12_dis ) != pll12_dis ) {
0208
0209 }
0210
0211
0212 TMS570_SYS1.GLBSTAT = 0x301U;
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227 TMS570_SYS1.PLLCTL1 = (TMS570_SYS1_PLLCTL1_ROS * 0)
0228 | (uint32_t)0x40000000U
0229 | TMS570_SYS1_PLLCTL1_PLLDIV(0x1F)
0230 | (TMS570_SYS1_PLLCTL1_ROF * 0)
0231 | TMS570_SYS1_PLLCTL1_REFCLKDIV(4U - 1U)
0232 | TMS570_SYS1_PLLCTL1_PLLMUL((75U - 1U) << 8);
0233
0234
0235
0236
0237
0238
0239
0240 TMS570_SYS1.PLLCTL2 = ((uint32_t)255U << 22U)
0241 | ((uint32_t)7U << 12U)
0242 | ((uint32_t)(1U - 1U) << 9U)
0243 | 61U;
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253 TMS570_SYS2.PLLCTL3 = TMS570_SYS2_PLLCTL3_ODPLL2(1U - 1U)
0254 | TMS570_SYS2_PLLCTL3_PLLDIV2(0x1FU)
0255 | TMS570_SYS2_PLLCTL3_REFCLKDIV2(8U - 1U)
0256 | TMS570_SYS2_PLLCTL3_PLLMUL2(( 150U - 1U) << 8 );
0257
0258
0259
0260 TMS570_SYS1.CSDIS = (TMS570_CLKDIS_SRC_EXT_CLK2 | TMS570_CLKDIS_SRC_EXT_CLK1 | TMS570_CLKDIS_SRC_RESERVED);
0261 }
0262
0263 void tms570_map_clock_init(void)
0264 {
0265
0266 uint32_t sys_csvstat, sys_csdis;
0267
0268 TMS570_SYS2.HCLKCNTL = 1U;
0269
0270
0271
0272 TMS570_SYS1.CDDIS = ( 0U << 4U ) |
0273 ( 1U << 5U ) |
0274 ( 0U << 8U ) |
0275 ( 0U << 9U ) |
0276 ( 0U << 10U ) |
0277 ( 0U << 11U );
0278
0279
0280
0281
0282 sys_csvstat = TMS570_SYS1.CSVSTAT;
0283 sys_csdis = TMS570_SYS1.CSDIS;
0284
0285 while ( ( sys_csvstat & ( ( sys_csdis ^ 0xFFU ) & 0xFFU ) ) !=
0286 ( ( sys_csdis ^ 0xFFU ) & 0xFFU ) ) {
0287 sys_csvstat = TMS570_SYS1.CSVSTAT;
0288 sys_csdis = TMS570_SYS1.CSDIS;
0289 }
0290
0291 TMS570_SYS1.GHVSRC = TMS570_SYS1_GHVSRC_GHVWAKE(TMS570_SYS_CLK_SRC_PLL1)
0292 | TMS570_SYS1_GHVSRC_HVLPM(TMS570_SYS_CLK_SRC_PLL1)
0293 | TMS570_SYS1_GHVSRC_GHVSRC(TMS570_SYS_CLK_SRC_PLL1);
0294
0295
0296 TMS570_SYS1.RCLKSRC = ((uint32_t)1U << 24U)
0297 | ((uint32_t)TMS570_SYS_CLK_SRC_VCLK << 16U)
0298 | ((uint32_t)1U << 8U)
0299 | ((uint32_t)TMS570_SYS_CLK_SRC_VCLK << 0U);
0300
0301
0302 TMS570_SYS1.VCLKASRC = TMS570_SYS1_VCLKASRC_VCLKA2S(TMS570_SYS_CLK_SRC_VCLK)
0303 | TMS570_SYS1_VCLKASRC_VCLKA1S(TMS570_SYS_CLK_SRC_VCLK);
0304
0305
0306
0307
0308 TMS570_SYS1.CLKCNTL = (TMS570_SYS1.CLKCNTL & ~TMS570_SYS1_CLKCNTL_VCLK2R(0xF))
0309 | TMS570_SYS1_CLKCNTL_VCLK2R(0x1);
0310
0311 TMS570_SYS1.CLKCNTL = (TMS570_SYS1.CLKCNTL & ~TMS570_SYS1_CLKCNTL_VCLKR(0xF))
0312 | TMS570_SYS1_CLKCNTL_VCLKR(0x1);
0313
0314
0315 TMS570_SYS2.CLK2CNTRL = (TMS570_SYS2.CLK2CNTRL & ~TMS570_SYS2_CLK2CNTRL_VCLK3R(0xF))
0316 | TMS570_SYS2_CLK2CNTRL_VCLK3R(0x2);
0317
0318 TMS570_SYS2.VCLKACON1 = TMS570_SYS2_VCLKACON1_VCLKA4R(1U - 1U)
0319 | (TMS570_SYS2_VCLKACON1_VCLKA4_DIV_CDDIS * 0)
0320 | TMS570_SYS2_VCLKACON1_VCLKA4S(TMS570_SYS_CLK_SRC_VCLK)
0321 | TMS570_SYS2_VCLKACON1_VCLKA3R(1U - 1U)
0322 | (TMS570_SYS2_VCLKACON1_VCLKA3_DIV_CDDIS * 0)
0323 | TMS570_SYS2_VCLKACON1_VCLKA3S(TMS570_SYS_CLK_SRC_VCLK);
0324
0325
0326
0327 TMS570_SYS1.PLLCTL1 = (TMS570_SYS1.PLLCTL1 & 0xE0FFFFFFU) | (uint32_t)((uint32_t)(1U - 1U) << 24U);
0328
0329 TMS570_SYS2.PLLCTL3 = (TMS570_SYS2.PLLCTL3 & 0xE0FFFFFFU) | (uint32_t)((uint32_t)(1U - 1U) << 24U);
0330
0331
0332 TMS570_SYS1.PLLCTL2 |= 0x00000000U;
0333 }