-
请教AT32F437用XMC--SRAM方式访问AD7606并行总线的时序参数配置
项目中需要AD7606进行快速同步采样,MCU是AT32F437。请教一下,有没有AT32F437用XMC--SRAM方式访问AD7606并行总线的时序参数配置供参考一下?谢谢! 以下是我的配置:翻译 [align=left]搜索[/align][align=left]复制[/align] void AD7606_XMC_SRAM_Configuration(void) { gpio_init_type gpio_init_struct = {0}; xmc_norsram_init_type xmc_norsram_init_struct; xmc_norsram_timing_init_type rw_timing_struct, w_timing_struct; /* enable the gpio clock */ crm_periph_clock_enable(CRM_GPIOF_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_GPIOG_PERIPH_CLOCK, TRUE); /* enable the xmc clock */ crm_periph_clock_enable(CRM_XMC_PERIPH_CLOCK, TRUE); /*-- gpio configuration ------------------------------------------------------*/ //address lines gpio_pin_mux_config(GPIOF, GPIO_PINS_SOURCE0, GPIO_MUX_12); //AA0 gpio_pin_mux_config(GPIOF, GPIO_PINS_SOURCE1, GPIO_MUX_12); //AA1 gpio_pin_mux_config(GPIOF, GPIO_PINS_SOURCE2, GPIO_MUX_12); //AA2 // gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE11, GPIO_MUX_12); // gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE12, GPIO_MUX_12); // gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE13, GPIO_MUX_12); // gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE0, GPIO_MUX_12); // gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE1, GPIO_MUX_12); // gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE2, GPIO_MUX_12); // gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE3, GPIO_MUX_12); // gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE4, GPIO_MUX_12); // gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE5, GPIO_MUX_12); // gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE6, GPIO_MUX_12); // gpio_pin_mux_config(GPIOF, GPIO_PINS_SOURCE3, GPIO_MUX_12); // gpio_pin_mux_config(GPIOF, GPIO_PINS_SOURCE4, GPIO_MUX_12); // gpio_pin_mux_config(GPIOF, GPIO_PINS_SOURCE5, GPIO_MUX_12); // gpio_pin_mux_config(GPIOF, GPIO_PINS_SOURCE12, GPIO_MUX_12); // gpio_pin_mux_config(GPIOF, GPIO_PINS_SOURCE13, GPIO_MUX_12); // gpio_pin_mux_config(GPIOF, GPIO_PINS_SOURCE14, GPIO_MUX_12); // gpio_pin_mux_config(GPIOF, GPIO_PINS_SOURCE15, GPIO_MUX_12); // gpio_pin_mux_config(GPIOG, GPIO_PINS_SOURCE0, GPIO_MUX_12); // gpio_pin_mux_config(GPIOG, GPIO_PINS_SOURCE1, GPIO_MUX_12); // gpio_pin_mux_config(GPIOG, GPIO_PINS_SOURCE2, GPIO_MUX_12); // gpio_pin_mux_config(GPIOG, GPIO_PINS_SOURCE3, GPIO_MUX_12); // gpio_pin_mux_config(GPIOG, GPIO_PINS_SOURCE4, GPIO_MUX_12); // gpio_pin_mux_config(GPIOG, GPIO_PINS_SOURCE5, GPIO_MUX_12); // gpio_pin_mux_config(GPIOG, GPIO_PINS_SOURCE13, GPIO_MUX_12); // gpio_pin_mux_config(GPIOG, GPIO_PINS_SOURCE14, GPIO_MUX_12); // gpio_pin_mux_config(GPIOG, GPIO_PINS_SOURCE10, GPIO_MUX_12); //CB lines gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE4, GPIO_MUX_12); gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE5, GPIO_MUX_12); gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE7, GPIO_MUX_12); //data lines gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE0, GPIO_MUX_12); gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE1, GPIO_MUX_12); gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE8, GPIO_MUX_12); gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE9, GPIO_MUX_12); gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE10, GPIO_MUX_12); gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE14, GPIO_MUX_12); gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE15, GPIO_MUX_12); gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE7, GPIO_MUX_12); gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE8, GPIO_MUX_12); gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE9, GPIO_MUX_12); gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE10, GPIO_MUX_12); gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE11, GPIO_MUX_12); gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE12, GPIO_MUX_12); gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE13, GPIO_MUX_12); gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE14, GPIO_MUX_12); gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE15, GPIO_MUX_12); /* address lines configuration */ gpio_init_struct.gpio_pins = GPIO_PINS_0 | GPIO_PINS_1 | GPIO_PINS_2 ;//| GPIO_PINS_3 | GPIO_PINS_4 | GPIO_PINS_5 | GPIO_PINS_12 | GPIO_PINS_13 | GPIO_PINS_14 | GPIO_PINS_15; gpio_init_struct.gpio_mode = GPIO_MODE_MUX; gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; gpio_init_struct.gpio_pull = GPIO_PULL_NONE; gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; gpio_init(GPIOF, &gpio_init_struct); // gpio_init_struct.gpio_pins = GPIO_PINS_0 | GPIO_PINS_1 | GPIO_PINS_2 | GPIO_PINS_3 | GPIO_PINS_4 | GPIO_PINS_5 | GPIO_PINS_13 | GPIO_PINS_14; // gpio_init_struct.gpio_mode = GPIO_MODE_MUX; // gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; // gpio_init_struct.gpio_pull = GPIO_PULL_NONE; // gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; // gpio_init(GPIOG, &gpio_init_struct); // gpio_init_struct.gpio_pins = GPIO_PINS_11 | GPIO_PINS_12 | GPIO_PINS_13; // gpio_init_struct.gpio_mode = GPIO_MODE_MUX; // gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; // gpio_init_struct.gpio_pull = GPIO_PULL_NONE; // gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; // gpio_init(GPIOD, &gpio_init_struct); // gpio_init_struct.gpio_pins = GPIO_PINS_3 | GPIO_PINS_4 | GPIO_PINS_5 | GPIO_PINS_6 | GPIO_PINS_2; // gpio_init_struct.gpio_mode = GPIO_MODE_MUX; // gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; // gpio_init_struct.gpio_pull = GPIO_PULL_NONE; // gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; // gpio_init(GPIOE, &gpio_init_struct); /* data lines configuration */ gpio_init_struct.gpio_pins = GPIO_PINS_0 | GPIO_PINS_1 | GPIO_PINS_8 | GPIO_PINS_9 | GPIO_PINS_10 | GPIO_PINS_14 | GPIO_PINS_15; gpio_init_struct.gpio_mode = GPIO_MODE_MUX; gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; gpio_init_struct.gpio_pull = GPIO_PULL_NONE; gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; gpio_init(GPIOD, &gpio_init_struct); gpio_init_struct.gpio_pins = GPIO_PINS_7 | GPIO_PINS_8 | GPIO_PINS_9 | GPIO_PINS_10 | GPIO_PINS_11 | GPIO_PINS_12 | GPIO_PINS_13 | GPIO_PINS_14 | GPIO_PINS_15; gpio_init_struct.gpio_mode = GPIO_MODE_MUX; gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; gpio_init_struct.gpio_pull = GPIO_PULL_NONE; gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; gpio_init(GPIOE, &gpio_init_struct); /* ne/noe/nwe/nbl0/nbl1 lines configuration */ //XMC_LB/XMC_UB // gpio_init_struct.gpio_pins = GPIO_PINS_0 | GPIO_PINS_1; // gpio_init_struct.gpio_mode = GPIO_MODE_MUX; // gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; // gpio_init_struct.gpio_pull = GPIO_PULL_NONE; // gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; // gpio_init(GPIOE, &gpio_init_struct); //XMC_NOE/XMC_NWE/XMC_NE1 gpio_init_struct.gpio_pins = GPIO_PINS_4 | GPIO_PINS_5 | GPIO_PINS_7; gpio_init_struct.gpio_mode = GPIO_MODE_MUX; gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; gpio_init_struct.gpio_pull = GPIO_PULL_NONE; gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; gpio_init(GPIOD, &gpio_init_struct); // gpio_init_struct.gpio_pins = GPIO_PINS_10; // gpio_init_struct.gpio_mode = GPIO_MODE_MUX; // gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; // gpio_init_struct.gpio_pull = GPIO_PULL_NONE; // gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; // gpio_init(GPIOG, &gpio_init_struct); /*-- xmc configuration ------------------------------------------------------*/ xmc_norsram_default_para_init(&xmc_norsram_init_struct); xmc_norsram_init_struct.subbank = XMC_BANK1_NOR_SRAM1; xmc_norsram_init_struct.data_addr_multiplex = XMC_DATA_ADDR_MUX_DISABLE; xmc_norsram_init_struct.device = XMC_DEVICE_SRAM; xmc_norsram_init_struct.bus_type = XMC_BUSTYPE_16_BITS; xmc_norsram_init_struct.burst_mode_enable = XMC_BURST_MODE_DISABLE; xmc_norsram_init_struct.asynwait_enable = XMC_ASYN_WAIT_DISABLE; xmc_norsram_init_struct.wait_signal_lv = XMC_WAIT_SIGNAL_LEVEL_LOW; xmc_norsram_init_struct.wrapped_mode_enable = XMC_WRAPPED_MODE_DISABLE; xmc_norsram_init_struct.wait_signal_config = XMC_WAIT_SIGNAL_SYN_BEFORE; xmc_norsram_init_struct.write_enable = XMC_WRITE_OPERATION_ENABLE; xmc_norsram_init_struct.wait_signal_enable = XMC_WAIT_SIGNAL_DISABLE; xmc_norsram_init_struct.write_timing_enable = XMC_WRITE_TIMING_ENABLE; xmc_norsram_init_struct.write_burst_syn = XMC_WRITE_BURST_SYN_DISABLE; xmc_nor_sram_init(&xmc_norsram_init_struct); /* timing configuration */ xmc_norsram_timing_default_para_init(&rw_timing_struct, &w_timing_struct); rw_timing_struct.subbank = XMC_BANK1_NOR_SRAM1; rw_timing_struct.write_timing_enable = XMC_WRITE_TIMING_ENABLE; rw_timing_struct.addr_setup_time = 0x5; //0x2; rw_timing_struct.addr_hold_time = 0x5; //0x0; rw_timing_struct.data_setup_time = 0xc; rw_timing_struct.bus_latency_time = 0x5; //0x0; rw_timing_struct.clk_psc = 0x0; rw_timing_struct.data_latency_time = 0x0; rw_timing_struct.mode = XMC_ACCESS_MODE_A; w_timing_struct.subbank = XMC_BANK1_NOR_SRAM1; w_timing_struct.write_timing_enable = XMC_WRITE_TIMING_ENABLE; w_timing_struct.addr_setup_time = 0x2; w_timing_struct.addr_hold_time = 0x0; w_timing_struct.data_setup_time = 0xc; w_timing_struct.bus_latency_time = 0x0; w_timing_struct.clk_psc = 0x0; w_timing_struct.data_latency_time = 0x0; w_timing_struct.mode = XMC_ACCESS_MODE_A; xmc_nor_sram_timing_config(&rw_timing_struct, &w_timing_struct); /* bus turnaround phase for consecutive read duration and consecutive write duration */ xmc_ext_timing_config(XMC_BANK1_NOR_SRAM1, 0x08, 0x08); /* enable xmc_bank1_nor_sram1 */ xmc_nor_sram_enable(XMC_BANK1_NOR_SRAM1, TRUE); }
499浏览量 3回复量 关注量 -
长线电压释放问题
各位大佬好,做一个二总线通讯的设备,通过控制其中一条线的电压高低来通讯。现在遇到问题,怎样在长线下使得信号的下降沿加快速度。现在断线下可以正常收发,但是长线下下降沿受影响。有没有这方面经验的大佬指点一下
11327浏览量 16回复量 关注量 -
ZYNQ7020学UART总线AN3485模块 但串口测试小助手收发显示不出来
按照教学配套的视频操作,视频最后串口发送成功,但我的一点反应没有。使用配套的代码也没反应,我之前也没用过,按着给的照片接的线,不懂是不是接错了?
3191浏览量 2回复量 关注量 -
DS18B20 请各位大佬帮忙看一下哪里不正确,
void delay_us(uint count)//进入一次该函数需要11.95us { while(count--); //执行一次cout-- 需要6.5us } //即delay_us(2)的延时时间为6.5*2+11.95 void delay_ms(uint y) { uint x; for(;y>0;y--) { for(x=110;x>0;x--); } } uchar DS18B20Init(void) //send reset and initialization command { uchar i=0; DS=0; delay_us(82);//复位,至少延时480us,挂在总线上的DS18B20将被复位 DS=1;//释放总线, i=0; while(DS)//延时等待82us { delay_ms(1); i++; if(i>5) { return 0;//初始化失败 } } return 1;//初始化成功 } void writebyte(uchar byte) //write a byte to ds18b20 { uchar j; for(j=0;j<8;j++) { DS=0;//每次写入一个数据之前需要把总线拉低 _nop_();//15us内要释放总线,产生写时序 DS=byte&0x01;//写入字节从最低位开始 delay_us(10);//延时不少于60us,不可以大于120us DS=1;//释放总线,准备下一次数据写入 byte>>=1; } } uchar readbyte(void) //读字节 { uchar i,j,byte; for(i=0;i<8;i++) { DS=0; _nop_(); _nop_();//延时至少1us,产生读时序 DS=1; delay_us(1);//释放总线 j=DS;//数据采集, delay_us(10);//延时不少于60us byte=(j<<7)|(byte>>1); delay_us(6); } return byte; } void main() { int i,temp; uchar L,H; while(1) { DS18B20Init();//初始化 delay_ms(1); writebyte(0xcc); // address all drivers on bus,发送跳跃ROM指令 writebyte(0x44); // initiates a single temperature conversion,发送温度转换指令 DS18B20Init();//主机和DS18B20做任何通讯前需要对其初始化 delay_ms(1); writebyte(0xcc);//发送跳跃ROM writebyte(0xbe);//读取DS18B20暂存器值 L=readbyte();//读低俗暂存器的值 H=readbyte();//读高速暂存器的值 i=H; i<<=8;//H移到高8位 i|=L;//L写入i的低字节 if(i<0) { i=i-1; temp=~i; } else { temp=i; } i=temp*0.0625*10000 ;//浮点型数据转换 Display(i); } }
1277浏览量 3回复量 关注量