|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
兄弟们!我在这里跪求IC42S32200(SDRAM)初始化程序!谢谢,谢谢了 |
作者:wwh3000 栏目:ARM技术 |
兄弟们!我在这里跪求IC42S32200(SDRAM)初始化程序!谢谢,谢谢了 |
2楼: | >>参与讨论 |
作者: 云雨风雷 于 2007/4/20 10:57:00 发布:
一个工程师,动不动就“跪求”,还干这行干什么? |
3楼: | >>参与讨论 |
作者: moise 于 2007/4/30 11:41:00 发布:
re 说法比较夸张,不过可以理解的。你多看点资料嘛。 俺给你发个三星的SDRAM在AT91SAM SDRAM控制器上的初始化函数,你自己琢磨吧。 void AT91F_InitSdram (void) { volatile unsigned int i; AT91PS_SDRC psdrc = AT91C_BASE_SDRC; // Init the EBI for SDRAM AT91C_BASE_EBI -> EBI_CSA = AT91C_EBI_CS1A_SDRAMC; AT91F_EBI_SDRAM_CfgPIO(); // Set CONTROL Register psdrc->SDRC_CR = AT91C_SDRC_NC_9 | // 9 bits Column Addressing: 512 (A0-A8) AT91C_SDRC_NC_9 AT91C_SDRC_NR_13 | // 13 bits Row Addressing 8K (A0-12) AT91C_SDRC_NR_13 AT91C_SDRC_CAS_2 | // Check Table 8 for 7E(133) and 75(100) need CAS 2 AT91C_SDRC_NB_4_BANKS | // 4 banks AT91C_SDRC_TWR_2 | AT91C_SDRC_TRC_4 | AT91C_SDRC_TRP_4 | AT91C_SDRC_TRCD_2 | AT91C_SDRC_TRAS_3 | AT91C_SDRC_TXSR_4 ; // Wait time for (i =0; i< 1000;i++); // SDRAM initiazlization step psdrc->SDRC_MR = AT91C_SDRC_DBW_16_BITS | AT91C_SDRC_MODE_NOP_CMD; // Set NOP *AT91C_SDRAM_BASE = 0x00000000; // Perform NOP psdrc->SDRC_MR = AT91C_SDRC_DBW_16_BITS | 0x00000002; // Set PRCHG AL *AT91C_SDRAM_BASE = 0x00000000; // Perform PRCHG // Wait time for (i =0; i< 10000;i++); psdrc->SDRC_MR = AT91C_SDRC_DBW_16_BITS |AT91C_SDRC_MODE_RFSH_CMD; // Set 1st CBR *AT91C_SDRAM_BASE = 0x00000000; // Perform CBR psdrc->SDRC_MR = AT91C_SDRC_DBW_16_BITS |AT91C_SDRC_MODE_RFSH_CMD; // Set 2 CBR *AT91C_SDRAM_BASE = 0x00000000; // Perform CBR psdrc->SDRC_MR = AT91C_SDRC_DBW_16_BITS |AT91C_SDRC_MODE_RFSH_CMD; // Set 3 CBR *AT91C_SDRAM_BASE = 0x00000000; // Perform CBR psdrc->SDRC_MR = AT91C_SDRC_DBW_16_BITS |AT91C_SDRC_MODE_RFSH_CMD; // Set 4 CBR *AT91C_SDRAM_BASE = 0x00000000; // Perform CBR psdrc->SDRC_MR = AT91C_SDRC_DBW_16_BITS |AT91C_SDRC_MODE_RFSH_CMD; // Set 5 CBR *AT91C_SDRAM_BASE = 0x00000000; // Perform CBR psdrc->SDRC_MR = AT91C_SDRC_DBW_16_BITS | AT91C_SDRC_MODE_RFSH_CMD;// Set 6 CBR *AT91C_SDRAM_BASE = 0x00000000; // Perform CBR psdrc->SDRC_MR = AT91C_SDRC_DBW_16_BITS | AT91C_SDRC_MODE_RFSH_CMD;// Set 7 CBR *AT91C_SDRAM_BASE = 0x00000000; // Perform CBR psdrc->SDRC_MR = AT91C_SDRC_DBW_16_BITS | AT91C_SDRC_MODE_RFSH_CMD;// Set 8 CBR *AT91C_SDRAM_BASE = 0x00000000; // Perform CBR psdrc->SDRC_MR = AT91C_SDRC_DBW_16_BITS | AT91C_SDRC_MODE_LMR_CMD; // Set LMR operation *(AT91C_SDRAM_BASE + 20)= 0xcafedede; &n |
4楼: | >>参与讨论 |
作者: moise 于 2007/4/30 12:42:00 发布:
re: 需要的数据定义在头文件里: sdram.h #ifndef SDRAM_H #define SDRAM_H #define AT91C_SDRAM_BASE ((volatile unsigned int *)0x20000000) //* Data bus definition MT48LC16M16A2 AT91SA7SE #define DQ0 (unsigned int) AT91C_PC0_D0 #define DQ1 (unsigned int) AT91C_PC1_D1 #define DQ2 (unsigned int) AT91C_PC2_D2 #define DQ3 (unsigned int) AT91C_PC3_D3 #define DQ4 (unsigned int) AT91C_PC4_D4 #define DQ5 (unsigned int) AT91C_PC5_D5 #define DQ6 (unsigned int) AT91C_PC6_D6 #define DQ7 (unsigned int) AT91C_PC7_D7 #define DQ8 (unsigned int) AT91C_PC8_D8 #define DQ9 (unsigned int) AT91C_PC9_D9 #define DQ10 (unsigned int) AT91C_PC10_D10 #define DQ11 (unsigned int) AT91C_PC11_D11 #define DQ12 (unsigned int) AT91C_PC12_D12 #define DQ13 (unsigned int) AT91C_PC13_D13 #define DQ14 (unsigned int) AT91C_PC14_D14 #define DQ15 (unsigned int) AT91C_PC15_D15 //* Address bus definition MT48LC16M16A2 AT91SA7SE //* 16 bits data interface unur 4 banks #define DQML (unsigned int) AT91C_PB0_A0_NBS0 #define DQMLH (unsigned int) AT91C_PA23_NWR1_NBS1_CFIOR_NUB #define DA0 (unsigned int) AT91C_PB2_A2 #define DA1 (unsigned int) AT91C_PB3_A3 #define DA2 (unsigned int) AT91C_PB4_A4 #define DA3 (unsigned int) AT91C_PB5_A5 #define DA4 (unsigned int) AT91C_PB6_A6 #define DA5 (unsigned int) AT91C_PB7_A7 #define DA6 (unsigned int) AT91C_PB8_A8 #define DA7 (unsigned int) AT91C_PB9_A9 #define DA8 (unsigned int) AT91C_PB10_A10 #define DA9 (unsigned int) AT91C_PB11_A11 #define DA10 (unsigned int) AT91C_PA24_SDA10 // PIO A #define DA11 (unsigned int) AT91C_PB13_A13 #define DA12 (unsigned int) AT91C_PB14_A14 #define BA0 (unsigned int) AT91C_PB16_A16_BA0 #define BA1 (unsigned int) AT91C_PB17_A17_BA1 //* CONTROL bus definition MT48LC16M16A2 AT91SA7SE #define CKE (unsigned int) AT91C_PA25_SDCKE #define SDWE (unsigned int) AT91C_PA27_SDWE #define CAS (unsigned int) AT91C_PA28_CAS #define RAS (unsigned int) AT91C_PA29_RAS //* SDRAM Configuration MT48LC16M16A2 // SDRAM Size 256 Mbits 32 Mbytes 8 MWords ( 4 bytes) #define AT91C_SDRAM_SIZE_bits ((256*1024*1024)/4) // 256 Mbits #define AT91C_SDRAM_SIZE ((32*1024*1024)/4) // 8 MWords (Unsigned int) #define AT91C_SDRC_TWR_2 ((unsigned int) 0x2 << 7) // (SDRC) NUMBER of Write Recovery Time Cycles #define AT91C_SDRC_TRC_4 ((unsigned int) 0x4 << 11) // (SDRC) NUMBER of RAS Cycle Time Cycles 7 #define AT91C_SDRC_TRP_4 ((unsigned int) 0x4 << 15) // (SDRC) NUMBER of RAS Precharge Time Cycles #define AT91C_SDRC_TRCD_2 ((unsigned int) 0x2 << 19) // (SDRC) NUMBER of RAS to CAS Delay Cycles 2 #define AT91C_SDRC_TRAS_3 ((unsigned int) 0x3 << 23) // (SDRC) NUMBER of RAS Active Time Cycles 5 #define AT91C_SDRC_TXSR_4 ((unsigned int) 0x4 << 27) // (SDRC) NUMBER of Command Recovery Time Cycles 8 // Refresh time 336 for 48MHZ (TR= 15.6 * F ) 1/7 = 0.1428 // Refresh period (8,192 rows) // Time 64ms 8192 row Refresh period 祍 7,8125 nb cycles 375,00 #define AT91C_SDRC_TR_TIME ((AT91B_MCK * 8) / 1000000) // refresh time 384 ( 375+ 2%error) //*---------------------------------------------------------------------------- //* External function prototype //*---------------------------------------------------------------------------- extern void AT91F_EBI_SDRAM_CfgPIO(void); extern void AT91F_InitSDRAM (void); #endif // SDRAM_H |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |