|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
★坚鸿-深圳:
今天为了实现FPGA的在线升级程序,刚刚终于搞出来了。要实现这个功能,我采用的方案就要编写SPI通讯的EPCS16芯片的驱动程序,这个芯片是一个FLASH芯片,专门用来装FPGA程序。FPGA每次上电时就自动从这个外围的FLASH芯片中快速读取并加载程序到FPGA内部。现在我决定把这个EPCS16的C语言驱动程序分享给大家。其它EPCS4,EPCS64,EPCS128都大同小异。
Epcs16.h头文件:
- #ifndef _EPCS16_
- #define _EPCS16_
- #define EPCS16_SPI_CS_ON() GPIO_SetBits(GPIOF , GPIO_Pin_0)
- #define EPCS16_SPI_CS_OFF() GPIO_ResetBits(GPIOF , GPIO_Pin_0)
- #define EPCS16_SPI_SCK_ON() GPIO_SetBits(GPIOF , GPIO_Pin_1)
- #define EPCS16_SPI_SCK_OFF() GPIO_ResetBits(GPIOF , GPIO_Pin_1)
- #define EPCS16_SPI_SI_ON() GPIO_SetBits(GPIOF , GPIO_Pin_2)
- #define EPCS16_SPI_SI_OFF() GPIO_ResetBits(GPIOF , GPIO_Pin_2)
- #define EPCS16_SPI_READ_SO() GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_3)
- void Epcs16Initial(void);
- void Epcs16SendByte(u8 u8SendData);
- u8 Epcs16GetByte(void);
- void Epcs16WriteDisable(void);
- void Epcs16WriteEnable(void);
- void Epcs16CheckBusy(u16 u16TimeOut); //注意,这里用到定时中断的延时,每1ms定时中断一次的累计时间。
- void Epcs16WriteStatus(u8 u8Epcs16Data);
- void Epcs16WriteByte(u32 u32Epcs16Addr,u8 u8Epcs16Data);
- u8 Epcs16ReadByte(u32 u32Epcs16Addr);
- void Epcs16EraseSector(u32 u32Epcs16Addr);
- void Epcs16EraseBulk(void);
- #endif
复制代码
Epcs16.c源文件:
|
|