| #ifndef __CPU_H
#define __CPU_H
#include "stm32f10x.h"
#include "sys.h"
#define FPGA_RST     PEout(1)                  //FPGAоƬ¸´Î»¹¦ÄÜ£¬µÍµçƽÒì²½¸´Î»  1--δ¸´Î»  0--¸´Î» PE1
#define FPGA_CS      PDout(0)                  //ƬѡFPGA  0--δѡÉÏ  1--Ñ¡ÉÏ  CPU_IDAT0 PD0
#define FPGA_WR      PDout(3)                  //дFPGAʹÄÜ¶Ë £» 1 -дFPGA   CPU_IDAT2 PD3
//#define FPGA_A       PDout(1)         //¶ÁдFPGAʱÊý¾ÝÃüÁî¿ØÖÆ×Ö  1--¶ÁдÃüÁî  0--¶ÁдÊý¾Ý CPU_IDAT1 PD1
//#define FPGA_RD    PCout(11)                 //¶ÁFPGAʹÄÜ¶Ë 1-¶ÁFPGA
#define FPGA_DONE    PCout(9)                  //ÊäÈë¹Ü½Å 1-FPGAÅäÖÃÍê³É  0--δÍê³É   FPGA_DONE PC9
#define DATA0        PDout(5)
#define DATA1        PDout(6)
#define DATA2        PDout(7)
#define DATA3        PDout(13)
#define DATA4        PDout(14)
#define DATA5        PDout(15)
#define DATA6        PDout(12)
#define DATA7        PCout(8)
#define DATA8        PCout(10)
#define DATA9        PCout(11)
#define DATA10       PDout(10)
#define DATA11       PDout(11)
#define DATA12       PCout(6)
#define DATA13       PCout(7)
#define DATA14       PCout(12)
#define DATA15       PDout(2)
void Parallel_Init(void);
void Dataout(u16 data);
void write_data(u16 data);
void write_data_num(u16 *str ,u16 num);
#endif
//******************************************************************************
// [url=home.php?mod=space&uid=288409]@file[/url]    cpu.c
// [url=home.php?mod=space&uid=187600]@author[/url]  wuzhicheng
// [url=home.php?mod=space&uid=895143]@version[/url] V01.01
// [url=home.php?mod=space&uid=212281]@date[/url]    2016Äê12ÔÂ20ÈÕ
// Description : ²¢ÐÐ×ÜÏß´¦Àí.
//******************************************************************************
#include "stm32f10x.h"
#include "cpu.h"
#include "delay.h"
//#define set_in()  {GPIOD->CRL=0X88888888;GPIOD->ODR=0XFFFF;}//PD0-7  ÉÏÀÊäÈë  //È«²¿Êä³ö¸ß
//#define set_out() {GPIOD->CRL=0X33333333;GPIOD->ODR=0XFFFF; 
//                   GPIOD->CRL=0X33333333;GPIOD->ODR=0XFFFF;}//PD0-7  ÉÏÀÊä³ö  //È«²¿Êä³ö¸ß
// ******************************************************************************
// º¯ÊýÃû£º    void Parallel_Init(void)
// ¹¦ÄÜÃèÊö£º  ½Ó¿Ú³õʼ»¯
// ÊäÈë²ÎÊý£º  ÎÞ
// ±»µ÷Óú¯Êý£ºÎÞ
//  ******************************************************************************
void Parallel_Init(void)
{         
        RCC->APB2ENR|=1<<4;          //PORTCʱÖÓʹÄÜ PC6,7,8,10,11,12 6GE;  PC9         
  RCC->APB2ENR|=1<<5;          //PORTDʱÖÓʹÄÜ PD2,5,6,7,10,11,12,13,14,15  10GE  PD0 PD3
  RCC->APB2ENR|=1<<6;   //PORTEʱÖÓʹÄÜ PE1£¬
        GPIOC->CRL&=0X33000000;  //ͨÓÃÍÆÍìÊä³öģʽ£PPC6 PC7
        GPIOC->CRH&=0X00033383;  //ͨÓÃÍÆÍìÊä³öģʽ£PPC8 PC10 PC11 PC12£¬PC9ÉèÖÃΪÉÏÀ/ÏÂÀÊäÈë-1000£»
        GPIOC->ODR|=0XFFFF;      //È«²¿ÉèÖÃΪÊä³ö¸ßµçƽ£»
        //GPIOC->ODR|=0X1DC0;           //0001_1101_1100_0000
        GPIOD->CRL&=0X33303303; //ͨÓÃÍÆÍìÊä³öģʽ£PPD0 PD2 PD3 PD5 PD6 PD7
        GPIOD->CRH&=0X33333300; //ͨÓÃÍÆÍìÊä³öģʽ£PPD10 PD11 PD12 PD13  PD14 PD15
        GPIOD->ODR|=0XFFFF;           //È«²¿ÉèÖÃΪÊä³ö¸ßµçƽ
  //GPIOD->ODR|=0XFCE4;       //1111_1100_1110_0100
        GPIOE->CRL&=0X00000030;//ÉèÖÃPE1ΪͨÓÃÍÆÍìÊä³öģʽ -0011
}
// ******************************************************************************
//  º¯ÊýÃû      void Dataout(u16 data)
//  ¹¦ÄÜÃèÊö    Êý¾ÝÊä³ö
//  ÊäÈë²ÎÊý    data ÒªÊäÈëµÄÊý¾Ý 
//  ÏȾöÌõ¼þ        IO¿Ú±ØÐèÏÈÉèÖÃΪÊä³ö¿Ú
//  ±»µ÷Óú¯Êý        ÎÞ
// ******************************************************************************
void Dataout(u16 data)
{
        DATA0 = data>>15;
        DATA1 = data>>14;
        DATA2 = data>>13;
        DATA3 = data>>12;
        DATA4 = data>>11;
        DATA5 = data>>10;
        DATA6 = data>>9;
        DATA7 = data>>8;
        DATA8 = data>>7;
        DATA9 = data>>6;
        DATA10 = data>>5;
        DATA11 = data>>4;
        DATA12 = data>>3;
        DATA13 = data>>2;
        DATA14 = data>>1;
        DATA15 = data;
 //GPIOC->ODR=(GPIOC->ODR&0xe23f)|data;   //GPIOC->ODR&0XE23F;  1110_0010_0011_1111
//GPIOD->ODR=(GPIOD->ODR&0x031b)|data;   //GPIOD->ODR&0x1dc0   0000_0011_0001_1011
}
// ******************************************************************************
// º¯ÊýÃû       void write_data(u16 data)
// ¹¦ÄÜÃèÊö     Ð´Êý¾Ý
// ÊäÈë²ÎÊý     data 16λÊý¾Ý
// ±»µ÷Óú¯Êý          Dataout(data);
// ******************************************************************************
void write_data(u16 data)
{
        FPGA_CS = 1;
        delay_us(1);
        FPGA_WR = 0;
        delay_us(1);
  Dataout(data);
        delay_us(1);
  FPGA_WR=1;
        delay_us(5);
  FPGA_WR=0;
        delay_us(5);
        FPGA_CS = 0;
}
//*******************************************************************************
// º¯ÊýÃû:      void write_data_num(u16 *str,u16 num)
// ¹¦ÄÜÃèÊö:    дÈëÖ¸µã³¤¶ÈµÄÊý¾Ý
// ÊäÈë²ÎÊý:    *str 16λÊý¾Ý×é; u16 Êý¾Ý¸öÊý£»
// ±»µ÷Óú¯Êý          write_data( u16 data);
//*******************************************************************************
void write_data_num(u16 *str ,u16 num)
{
        u16 i=0;
        for(i=0;i<num;i++)
        {
                write_data(str[i]);
                delay_us(100);
        }
}
这是我编写的部分代码,(1.CPU.H  ;   2. CPU.C  ;  3 .TEST.C ;)大致意思是将16位并行数据发送至fpga,模拟的是8080并行口,但是没有读的部分,也没有地址,在FPGA部分设置双口RAM缓存数据,考虑到是按顺序存储,就自加产生写地址;FPGA部分编写完成,功能仿真也可以,但是好像数据没有发送过去,不知问题出在哪儿,STM32刚学习不久,所以怀疑这边出现问题,希望大家可以帮我看看。多多指点!万分感谢!#include "sys.h"
#include "delay.h"
#include "cpu.h" 
//#include "w25qxx.h" 
//******************************************************************************
//º¯ÊýÃû£º    int main(void)
//¹¦ÄÜÃèÊö£º  Ö÷º¯Êý£¬Ä£Äâ8080²¢ÐÐ×ÜÏߣ¬·¢ËÍÊý¾Ýµ½FPGA
//ÊäÈë²ÎÊý£º  ÎÞ
//±»µ÷Óú¯Êý£ºÎÞ
//******************************************************************************        
//ҪдÈëµ½W25Q128µÄ×Ö·û´®Êý×é
//u16 spi_Buffer[2048];
//#define SIZE sizeof (spi_Buffer)
int main(void)
{        
  //u16 datatemp[SIZE];
        u16 spi_Buffer[2048];
        u16 i;
        u16 num = 2048;
        //u32 wraddr = 0;
         Stm32_Clock_Init(9);        //ϵͳʱÖÓÉèÖÃ
        delay_init(72);                            //ÑÓʱ³õʼ»¯                           
        //W25QXX_Init();                        //W25QXX³õʼ»¯
        Parallel_Init();     //²¢¿Ú³õʼ»¯;
        for(i=0; i<num; i++) //²úÉúÊý×é;
        {
           spi_Buffer[i]=i;
        }
  //W25QXX_Write((u16*)spi_Buffer,wraddr,SIZE);
  //delay_ms(500);
  //W25QXX_Read(datatemp,wraddr,SIZE);                                        //¶Á³öSIZE¸ö×Ö½Ú
  //delay_ms(500);
        FPGA_RST = 0;
        delay_ms(500);
        FPGA_RST = 1;
        delay_ms(500);
        delay_ms(500);
  write_data_num(spi_Buffer,num); //Êý¾Ý¾²¢¿Ú·¢Ë͵½FPGA
        delay_ms(500);
}
(本来还有一部分读写W25Q16部分,因为数据是先缓冲到那里面,但是考虑到一步一步调试,所以先注销了,后面再研究)
 
 |