stm32和fpga总线方式通信,此前用原子哥的sram访问区域NE3就是可以的,后来使用ne1,发现fpga接收的数据不稳定,有时候对,有时候错,百思不得解,求各位帮助分析一下,多谢!
其中,ne1设置模式 同ne3类似,就是把ne1 区域基地址配置 #define Bank1_fpga3_ADDR ((u32)(0x68000000)),然后依次修改下面(修改的地方已经红色标出):
//初始化外部SRAM CE1
void FSMC_fpga_Init(void)
{
RCC->AHBENR|=1<<8; //使能FSMC时钟
RCC->APB2ENR|=1<<5; //使能PORTD时钟
RCC->APB2ENR|=1<<6; //使能PORTE时钟
RCC->APB2ENR|=1<<7; //使能PORTF时钟
RCC->APB2ENR|=1<<8; //使能PORTG时钟
//PORTD复用推挽输出
GPIOD->CRH&=0X00000000;
GPIOD->CRH|=0XBBBBBBBB;
GPIOD->CRL&=0X0F00FF00;
GPIOD->CRL|= 0XBBB00BB; //ne1 配置
//PORTE复用推挽输出
GPIOE->CRH&=0X00000000;
GPIOE->CRH|=0XBBBBBBBB;
GPIOE->CRL&=0XFFFFFF00;
GPIOE->CRL|=0X000000BB;
/*之前是
//GPIOE->CRL&=0X0FFFFF00;
//GPIOE->CRL|=0XB00000BB; 去除了FSMC_NBL0和FSMC_NBL1的功能 2014-0402 */
//PORTF复用推挽输出
GPIOF->CRH&=0X0000FFFF;
GPIOF->CRH|=0XBBBB0000;
GPIOF->CRL&=0XFF000000;
GPIOF->CRL|=0X00BBBBBB;
//PORTG复用推挽输出 PG10->NE3
//GPIOG->CRH&=0XFFFFF0FF;
//GPIOG->CRH|=0X00000B00;
GPIOG->CRL&=0XFF000000;
GPIOG->CRL|=0X00BBBBBB;
//寄存器清零
//bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。
//这里我们使用NE1 ,也就对应BTCR[0],[1]。 ly 4--->0 5---------->1
FSMC_Bank1->BTCR[0]=0X00000000;
FSMC_Bank1->BTCR[1]=0X00000000;
FSMC_Bank1E->BWTR[0]=0X00000000;
//操作BCR寄存器 使用异步模式,模式A(读写共用一个时序寄存器)
//BTCR[偶数]:BCR寄存器;BTCR[奇数]:BTR寄存器
FSMC_Bank1->BTCR[0]|=1<<12;//存储器写使能
FSMC_Bank1->BTCR[0]|=1<<4; //存储器数据宽度为16bit
//操作BTR寄存器
FSMC_Bank1->BTCR[1]|=3<<8; //数据保持时间(DATAST)为3个HCLK 4/72M=55ns(对EM的SRAM芯片)
FSMC_Bank1->BTCR[1]|=0<<4; //地址保持时间(ADDHLD)未用到
FSMC_Bank1->BTCR[1]|=0<<0; //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
//闪存写时序寄存器
FSMC_Bank1E->BWTR[0]=0x0FFFFFFF;//默认值
//使能BANK1区域1
FSMC_Bank1->BTCR[0]|=1<<0;
}
求指导,还有哪里需要设置吗?
|