原子哥,还有各位大神:
先说说经历,先后在原子哥哪里买了429核心板加底板,767核心板。自己项目,给别人做个检测设备,刚开始用429核心板搭配自己的底板,用429的FMC和FPGA通过同步突发模式通讯,接地址线19,18,17,16地址线,然后在FPGA内部同步译码(因为一个功能需要fmc_clk信号,因此用同步方式),OE,WR,NE,CLK输出都正常,也能读写数据。但是把429核心板换成767核心板后,读数据时候OE,NE,CLK均无输出。搞了好久了,一直没进展,手册都不知道看了多少遍了。下面是部分代码。请各位看下,给个建议。(低级错误不会犯,例如KEIL配置,启动文件,芯片选择等)。
具体代码如下(部分注释不要理会,配置那一块的时间参数我也是根据手册弄的,估计问题还是出在767配置那一块,但是429是没有任何问题的,不知道2者配置的时候到底有啥区别):
#define SSI_LOCK ((u32)(0x60000000)) //写ssi地址,读之前写高,读完之后写低
#define SSI_G1 ((u32)(0x60200000)) //读ssi,位59-44;
#define SSI_G2 ((u32)(0x60400000)) //读ssi,位43-28;
#define SSI_G3 ((u32)(0x60600000)) //读ssi,位27-12;
#define SSI_G4 ((u32)(0x60800000)) //读ssi,位11-0,+起始位+报警位,共14位
#define RDC1 ((u32)(0x60A00000)) //RDC1片基地址
#define RDC2 ((u32)(0x60C00000)) //RDC2片基地址
#define RDC3 ((u32)(0x60E00000)) //RDC3片基地址
#define RDC4 ((u32)(0x61000000)) //RDC4片基地址
#define RDC5 ((u32)(0x61200000)) //RDC5片基地址
#define RDC6 ((u32)(0x61400000)) //RDC6片基地址
#define RDC7 ((u32)(0x61600000)) //RDC7片基地址
#define RDC8 ((u32)(0x61800000)) //RDC8片基地址
#define RDC9 ((u32)(0x61A00000)) //RDC9片基地址
#define RDC10 ((u32)(0x61C00000)) //RDC10片基地址
#define RDC11 ((u32)(0x61E00000)) //RDC11片基地址
[mw_shl_code=applescript,true]void FMC_Init(void)
{
RCC->AHB1ENR|=1<<1; //使能PORTB时钟
RCC->AHB1ENR|=3<<3; //使能PD,PE
RCC->AHB3ENR|=1<<0; //使能FMC时钟
GPIO_Set(GPIOB,PIN5,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU); //PB5 推挽输出,控制背光
GPIO_Set(GPIOD,(3<<0)|(3<<4)|(15<<7)|(7<<13),GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PD0,1,4,5,7,8,9,10,13,14,15 AF OUT
GPIO_Set(GPIOD,PIN13|PIN3|PIN11|PIN12,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PD11,PD12 AF OUT 16和17
GPIO_Set(GPIOE,(0X1FF<<7),GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);
GPIO_Set(GPIOE,PIN3|PIN2|PIN4|PIN5|PIN6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PE3,地址19
GPIO_AF_Set(GPIOD,0,12); //PD0,AF12
GPIO_AF_Set(GPIOD,1,12); //PD1,AF12
GPIO_AF_Set(GPIOD,3,12); //PD3,AF12//CLK
GPIO_AF_Set(GPIOD,4,12); //PD4,AF12
GPIO_AF_Set(GPIOD,5,12); //PD5,AF12
GPIO_AF_Set(GPIOD,7,12); //PD7,AF12
GPIO_AF_Set(GPIOD,8,12); //PD8,AF12
GPIO_AF_Set(GPIOD,9,12); //PD9,AF12
GPIO_AF_Set(GPIOD,10,12); //PD10,AF12
GPIO_AF_Set(GPIOD,11,12); //PD11,AF12 地址16
GPIO_AF_Set(GPIOD,12,12); //PD12,AF12 地址17
GPIO_AF_Set(GPIOD,13,12); //PD13,AF12 地址18
GPIO_AF_Set(GPIOD,14,12); //PD14,AF12
GPIO_AF_Set(GPIOD,15,12); //PD15,AF12
GPIO_AF_Set(GPIOE,2,12); //PE7,AF12 地址19
GPIO_AF_Set(GPIOE,4,12); //PE7,AF12 地址19
GPIO_AF_Set(GPIOE,5,12); //PE7,AF12 地址19
GPIO_AF_Set(GPIOE,6,12); //PE7,AF12 地址19
GPIO_AF_Set(GPIOE,3,12); //PE7,AF12 地址19
GPIO_AF_Set(GPIOE,7,12); //PE7,AF12
GPIO_AF_Set(GPIOE,8,12); //PE8,AF12
GPIO_AF_Set(GPIOE,9,12); //PE9,AF12
GPIO_AF_Set(GPIOE,10,12); //PE10,AF12
GPIO_AF_Set(GPIOE,11,12); //PE11,AF12
GPIO_AF_Set(GPIOE,12,12); //PE12,AF12
GPIO_AF_Set(GPIOE,13,12); //PE13,AF12
GPIO_AF_Set(GPIOE,14,12); //PE14,AF12
GPIO_AF_Set(GPIOE,15,12); //PE15,AF12
FMC_Bank1->BTCR[0]=0X00000000;
FMC_Bank1->BTCR[1]=0X00000000;
FMC_Bank1->BTCR[0]|=1<<12; //
FMC_Bank1->BTCR[0]|=1<<7; //使能CLK输出
FMC_Bank1->BTCR[0]|=1<<8; //同步模式使能
FMC_Bank1->BTCR[0]|=1<<4; //存储器数据宽度为16bit
FMC_Bank1->BTCR[0]|=1<<2; //psram
FMC_Bank1->BTCR[0]|=1<<1; //psram
FMC_Bank1->BTCR[1]|=1<<22; //clk为5倍的Hclk
FMC_Bank1->BTCR[1]|=1<<19; //NE的时间,为9个HCLK周期=5.2*10=52ns
FMC_Bank1->BTCR[0]|=1<<1; //使能BANK1,区域1
FMC_Bank1->BTCR[0]|=1<<0; //使能BANK1,区域1
delay_ms(50); // delay 50 ms
}
主程序里面就是两行读写两个地址
int main(void)
{
Stm32_Clock_Init(432,25,2,9);//设置时钟,216Mhz
delay_init(216); //延时初始化
GPO_Init();
GPI_Init();
FMC_Init();
{
RDC_DATA1=(*(vu16*)RDC1); //读方位RDC旋变低16位;0101
RDC_DATA2=(*(vu16*)RDC2); //读方位RDC旋变高2位; 0110
}
}
快要崩溃了,我的项目里面有部分在中断中做算法的代码,怕429不够用,因此想用767,请原子哥哥和各位大神给点指导。有哪里不清楚的请及时回复。给原子客服打过几个电话,让在论坛咨询。
一周热门 更多>