-
请教下GD32H7系列的外部SRAM读写 EXMC初始化问题 赏300家园币
EXMC初始化之后,对外部SRAM的操作没有效果,以下是代码部分(nor_region传的是EXMC_BANK0_NORSRAM_REGION0)。 请大佬们看看是什么问题。 void exmc_norflash_init(uint32_t nor_region) { exmc_norsram_parameter_struct nor_init_struct; exmc_norsram_timing_parameter_struct nor_timing_init_struct; gpio_deinit(GPIOB); gpio_deinit(GPIOD); gpio_deinit(GPIOE); gpio_deinit(GPIOF); gpio_deinit(GPIOG); exmc_norsram_deinit(nor_region); /* EXMC clock enable */ rcu_periph_clock_enable(RCU_EXMC); /* GPIO clock enable */ rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_GPIOD); rcu_periph_clock_enable(RCU_GPIOE); rcu_periph_clock_enable(RCU_GPIOF); rcu_periph_clock_enable(RCU_GPIOG); /* configure GPIO D[0-15] */ gpio_af_set(GPIOD, GPIO_AF_12, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15); gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15); gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15); gpio_af_set(GPIOE, GPIO_AF_12, GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15); gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15); gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15); /* configure GPIO A[0-23] */ gpio_af_set(GPIOF, GPIO_AF_12, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15); gpio_mode_set(GPIOF, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15); gpio_output_options_set(GPIOF, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15); gpio_af_set(GPIOG, GPIO_AF_12, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5); gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5); gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5); gpio_af_set(GPIOD, GPIO_AF_12, GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13); gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13); gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13); gpio_af_set(GPIOE, GPIO_AF_12, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6); gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6); gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6); /* configure NOE NWE */ gpio_af_set(GPIOD, GPIO_AF_12, GPIO_PIN_4 | GPIO_PIN_5); gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_4 | GPIO_PIN_5); gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_4 | GPIO_PIN_5); /* configure NBL0-1 */ gpio_af_set(GPIOE, GPIO_AF_12, GPIO_PIN_0 | GPIO_PIN_1); gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_0 | GPIO_PIN_1); gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_0 | GPIO_PIN_1); /* configure EXMC NE0*/ gpio_af_set(GPIOD, GPIO_AF_12, GPIO_PIN_7); gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_7); gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_7); /* configure CLK and NWAIT */ gpio_af_set(GPIOD, GPIO_AF_12, GPIO_PIN_3 | GPIO_PIN_6); gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_3 | GPIO_PIN_6); gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_3 | GPIO_PIN_6); exmc_norsram_struct_para_init(&nor_init_struct); nor_timing_init_struct.asyn_access_mode = EXMC_ACCESS_MODE_A; nor_timing_init_struct.syn_data_latency = EXMC_DATALAT_6_CLK; nor_timing_init_struct.syn_clk_division = EXMC_SYN_CLOCK_RATIO_6_CLK; nor_timing_init_struct.bus_latency = 5; nor_timing_init_struct.asyn_data_setuptime = 80; nor_timing_init_struct.asyn_address_holdtime = 10; nor_timing_init_struct.asyn_address_setuptime = 10; /* configure EXMC bus parameters */ nor_init_struct.norsram_region = nor_region; nor_init_struct.address_data_mux = DISABLE; nor_init_struct.memory_type = EXMC_MEMORY_TYPE_SRAM; nor_init_struct.databus_width = EXMC_NOR_DATABUS_WIDTH_16B; nor_init_struct.burst_mode = DISABLE; nor_init_struct.nwait_polarity = EXMC_NWAIT_POLARITY_LOW; nor_init_struct.nwait_config = EXMC_NWAIT_CONFIG_BEFORE; nor_init_struct.memory_write = ENABLE; nor_init_struct.nwait_signal = DISABLE; nor_init_struct.extended_mode = DISABLE; nor_init_struct.asyn_wait = DISABLE; nor_init_struct.write_mode = EXMC_ASYN_WRITE; nor_init_struct.cram_page_size = EXMC_CRAM_AUTO_SPLIT; nor_init_struct.read_write_timing = &nor_timing_init_struct; nor_init_struct.write_timing = &nor_timing_init_struct; exmc_norsram_init(&nor_init_struct); exmc_norsram_enable(nor_region); }
6881浏览量 4回复量 关注量 -
GD32F470 EXMC 的映射问题
在GD32F470上的EXMC同时外接了,DM9000A和一块SDRAM。DM9000A使用的是NOR/PSRAM的BANK0 Regions1区域,使用的命令地址是0x64000100区域,数据地址是0x64000108区域。SDRAM使用的是SDRAM device0区域,是0XC000 0000这一地址起始。单独使用都是可以的,同时使用会出现冲突问题。 后来查了手册,DM9000A所使用的区域16位数据传输下,内部的地址线是这样对应的,HADDR[25:1]--->EXMC_A[24:0],根据HADDR[27:26]作为片选线。SDRAM所使用的区域在16位数据传输下,内部的地址线是这样对应的,HADDR[26:25]作为bank选中线,HADDR[24:12]作为行地址线,HADDR[11:1]作为列地址线。 会是这样的内部址线的冲突,让他们没办法同时使用吗? 下面是同时使用时的波形分析
1468浏览量 4回复量 关注量