求教原子哥767的fmc同步突发模式,急啊。

2019-07-20 07:21发布

原子哥,还有各位大神:
     先说说经历,先后在原子哥哪里买了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,请原子哥哥和各位大神给点指导。有哪里不清楚的请及时回复。给原子客服打过几个电话,让在论坛咨询。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。