216 lines
4.7 KiB
C
216 lines
4.7 KiB
C
#include "main.h"
|
|
#include "Function.h"
|
|
#include "spi.h"
|
|
#include "sdram.h"
|
|
#include "math.h"
|
|
#include "exfuns.h"
|
|
#include "malloc.h"
|
|
#include "cnn_model.h"
|
|
|
|
uint32_t number;
|
|
char file_name[20];
|
|
|
|
/**************************************** FPGA启动信号 *********************************************/
|
|
|
|
void sendStartSignalToFPGA(void) {
|
|
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_11, GPIO_PIN_SET);//实现发送启动信号的逻辑
|
|
delay_ms(1);
|
|
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_11, GPIO_PIN_RESET);
|
|
}
|
|
|
|
/**************************************** 数据处理 *********************************************/
|
|
|
|
float Data_processing(uint16_t temp)
|
|
{
|
|
float Data;
|
|
temp = temp << 1;
|
|
temp = temp ^ 0x8000;
|
|
Data = (((float)temp*9)/65536) - 4.5;
|
|
return Data;
|
|
}
|
|
|
|
/**************************************** 接收采集信号 -> SDRAM *********************************************/
|
|
|
|
#if 1
|
|
void SPI_Read_SDRAM(void){
|
|
uint32_t i = 0;
|
|
unsigned int count_err = 0;
|
|
unsigned char flag = 1;
|
|
uint16_t Temp;
|
|
float Data;
|
|
sendStartSignalToFPGA();
|
|
printf("SDRAM开始写入\r\n");
|
|
while(flag){
|
|
SPI_FPGA_CS_LOW();
|
|
Temp = SPI1_ReadWriteByte(0x00);
|
|
SPI_FPGA_CS_HIGH();
|
|
Data = Data_processing(Temp);
|
|
if(Temp != 0x0000 && fabsf(Data) > 0.00001){
|
|
count_err = 0;
|
|
*(float*)(Bank5_SDRAM_ADDR+4*i++) = Data;
|
|
if( i >= Data_volume ){
|
|
printf("SDRAM写入结束\r\n");
|
|
number = i;
|
|
i = 0;
|
|
flag = 0;
|
|
}
|
|
}
|
|
else{
|
|
count_err++;
|
|
if(count_err > 10000){
|
|
printf("信号采集失败\r\n");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if 0
|
|
void SPI_Read_SDRAM(void){
|
|
uint32_t i = 0;
|
|
unsigned int count_err = 0;
|
|
unsigned char flag = 1;
|
|
uint16_t buff[100];
|
|
uint16_t Temp;
|
|
float Data;
|
|
sendStartSignalToFPGA();
|
|
printf("SDRAM开始写入\r\n");
|
|
while(flag){
|
|
SPI_FPGA_CS_LOW();
|
|
Temp = SPI1_ReadWriteByte(0x00);
|
|
SPI_FPGA_CS_HIGH();
|
|
Data = Data_processing(Temp);
|
|
if(Temp != 0x0000 && Data != 0.000000){
|
|
count_err = 0;
|
|
*(uint16_t*)(Bank5_SDRAM_ADDR+2*i++) = Temp;
|
|
/* 每次取前100个数据 若前100个数据相同 则判断为数据采集失败 */
|
|
if(i == 101){
|
|
for(unsigned int j = 0;j < 100;j++){
|
|
if(buff[j] == buff[j+1]){
|
|
count_err++;
|
|
}
|
|
else break;
|
|
}
|
|
if(count_err > 70){
|
|
printf("信号采集失败\r\n");
|
|
flag = 0;
|
|
break;
|
|
}
|
|
}
|
|
else if(i < 101){
|
|
buff[i] = Temp;
|
|
}
|
|
/************************************************************/
|
|
if( i >= Data_volume ){
|
|
printf("SDRAM写入结束\r\n");
|
|
number = i;
|
|
flag = 0;
|
|
}
|
|
}
|
|
/* 若连续100个数据都为0 则判断为采集失败 */
|
|
else{
|
|
count_err++;
|
|
if(count_err > 100){
|
|
printf("信号采集失败\r\n");
|
|
flag = 0;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
/**************************************** 初始化SD卡 *********************************************/
|
|
|
|
void Formatting_test(void)
|
|
{
|
|
u32 total,free;
|
|
exfuns_init();
|
|
uint8_t _res_sd;
|
|
res = f_mount(&fatfs,"0:",1);// 挂载SD卡
|
|
delay_ms(1);
|
|
if(res != RES_OK)
|
|
{
|
|
printf("f_mount error!\r\n");// 挂载失败
|
|
while(1)
|
|
{
|
|
delay_ms(500);
|
|
LED_R=!LED_R;
|
|
}
|
|
}
|
|
else
|
|
printf("f_mount successful!\r\n");// 挂载成功
|
|
|
|
fatbuf=(u8*)mymalloc(SRAMEX,512); //为fatbuf申请内存
|
|
_res_sd = exf_getfree("0:",&total,&free); //得到SD卡的总容量和剩余容量
|
|
if(_res_sd)printf("SD Card Fatfs Error!");
|
|
while(_res_sd)
|
|
{
|
|
delay_ms(100);
|
|
LED_R=!LED_R;
|
|
}
|
|
printf("初始化完成!\r\n");
|
|
}
|
|
|
|
|
|
/**************************************** 接收采集信号 -> SDRAM *********************************************/
|
|
|
|
void SDRAM_TO_SD(void)
|
|
{
|
|
static unsigned char filenum = 1;
|
|
float temp;
|
|
int i;
|
|
|
|
while(1){
|
|
sprintf(file_name,"souce_%d.bin",filenum);
|
|
res = f_stat(file_name,&fno);
|
|
if(res == FR_OK){
|
|
filenum++;
|
|
printf("文件存在\r\n");
|
|
}
|
|
else if(res == FR_NO_FILE){
|
|
printf("打开文件%s\r\n",file_name);
|
|
res = f_open(&file1,file_name,FA_CREATE_ALWAYS | FA_WRITE | FA_READ);
|
|
if(res != FR_OK){
|
|
printf("文件打开失败\r\n");
|
|
while(1)
|
|
{
|
|
delay_ms(500);
|
|
LED_R=!LED_R;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
printf("SD开始写入\r\n");
|
|
for(i=0,number=1300000;number>0;number--,i++){
|
|
temp = *(float*)(Bank5_SDRAM_ADDR+4*i+40000); //SDRAM中前面10000个不要
|
|
res=f_write(&file1,&temp,4,&fnum);
|
|
if(i % 10000 == 0) printf("%d\r\n",i); //显示SD卡写入进度
|
|
}
|
|
memset((float*)Bank5_SDRAM_ADDR,0,Data_volume);
|
|
i = 0;
|
|
printf("SD写入结束\r\n");
|
|
f_close(&file1);
|
|
}
|
|
|
|
/*******************************************************************************************************/
|
|
|
|
void open_file(void)
|
|
{
|
|
|
|
res = f_open(&file1,"ttt.bin",FA_CREATE_ALWAYS | FA_WRITE | FA_READ);
|
|
if(res != FR_OK){
|
|
printf("文件打开失败\r\n");
|
|
while(1)
|
|
{
|
|
delay_ms(500);
|
|
LED_R=!LED_R;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|