- #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);
- }
- }
- #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);
- }
这是我编写的部分代码,(1.CPU.H ; 2. CPU.C ; 3 .TEST.C ;)大致意思是将16位并行数据发送至fpga,模拟的是8080并行口,但是没有读的部分,也没有地址,在FPGA部分设置双口RAM缓存数据,考虑到是按顺序存储,就自加产生写地址;FPGA部分编写完成,功能仿真也可以,但是好像数据没有发送过去,不知问题出在哪儿,STM32刚学习不久,所以怀疑这边出现问题,希望大家可以帮我看看。多多指点!万分感谢!
(本来还有一部分读写W25Q16部分,因为数据是先缓冲到那里面,但是考虑到一步一步调试,所以先注销了,后面再研究)
|