在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2906|回复: 8

[求助] 模拟8080并行总线发送数据至FPGA

[复制链接]
发表于 2016-12-23 15:03:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x




  1. #ifndef __CPU_H
  2. #define __CPU_H
  3. #include "stm32f10x.h"
  4. #include "sys.h"

  5. #define FPGA_RST     PEout(1)                  //FPGAD¾Æ¬¸′λ1|Äü£¬μíμçƽòì2½¸′λ  1--Î′¸′λ  0--¸′λ PE1
  6. #define FPGA_CS      PDout(0)                  //ƬѡFPGA  0--Î′Ñ¡éÏ  1--Ñ¡éÏ  CPU_IDAT0 PD0
  7. #define FPGA_WR      PDout(3)                  //D′FPGAê1Äü¶Ë £» 1 -D′FPGA   CPU_IDAT2 PD3
  8. //#define FPGA_A       PDout(1)         //¶áD′FPGAê±êy¾YÃüáî¿ØÖÆ×Ö  1--¶áD′Ãüáî  0--¶áD′êy¾Y CPU_IDAT1 PD1
  9. //#define FPGA_RD    PCout(11)                 //¶áFPGAê1Äü¶Ë 1-¶áFPGA
  10. #define FPGA_DONE    PCout(9)                  //êäèë1ü½Å 1-FPGAÅäÖÃíê3é  0--Î′íê3é   FPGA_DONE PC9
  11. #define DATA0        PDout(5)
  12. #define DATA1        PDout(6)
  13. #define DATA2        PDout(7)
  14. #define DATA3        PDout(13)
  15. #define DATA4        PDout(14)
  16. #define DATA5        PDout(15)
  17. #define DATA6        PDout(12)
  18. #define DATA7        PCout(8)
  19. #define DATA8        PCout(10)
  20. #define DATA9        PCout(11)
  21. #define DATA10       PDout(10)
  22. #define DATA11       PDout(11)
  23. #define DATA12       PCout(6)
  24. #define DATA13       PCout(7)
  25. #define DATA14       PCout(12)
  26. #define DATA15       PDout(2)
  27. void Parallel_Init(void);
  28. void Dataout(u16 data);
  29. void write_data(u16 data);
  30. void write_data_num(u16 *str ,u16 num);
  31. #endif



复制代码





  1. //******************************************************************************
  2. // @file    cpu.c
  3. // @author  wuzhicheng
  4. // @version V01.01
  5. // @date    2016Äê12ÔÂ20èÕ
  6. // Description : 2¢DD×üÏß′|àí.
  7. //******************************************************************************
  8. #include "stm32f10x.h"
  9. #include "cpu.h"
  10. #include "delay.h"
  11. //#define set_in()  {GPIOD->CRL=0X88888888;GPIOD->ODR=0XFFFF;}//PD0-7  éÏà-êäèë  //è«2¿êä3ö¸ß
  12. //#define set_out()  {GPIOD->CRL=0X33333333;GPIOD->ODR=0XFFFF;
  13. //                   GPIOD->CRL=0X33333333;GPIOD->ODR=0XFFFF;}//PD0-7  éÏà-êä3ö  //è«2¿êä3ö¸ß
  14. // ******************************************************************************
  15. // oˉêyÃû£o    void Parallel_Init(void)
  16. // 1|ÄüÃèêö£o  ½ó¿ú3õê¼»ˉ
  17. // êäèë2Îêy£o  ÎT
  18. // ±»μ÷óÃoˉêy£oÎT
  19. //  ******************************************************************************
  20. void Parallel_Init(void)
  21. {         
  22.         RCC->APB2ENR|=1<<4;          //PORTCê±&#214;óê1&#196;ü PC6,7,8,10,11,12 6GE;  PC9        
  23.   RCC->APB2ENR|=1<<5;          //PORTDê±&#214;óê1&#196;ü PD2,5,6,7,10,11,12,13,14,15  10GE  PD0 PD3
  24.   RCC->APB2ENR|=1<<6;   //PORTEê±&#214;óê1&#196;ü PE1£&#172;
  25.         GPIOC->CRL&=0X33000000;  //í¨ó&#195;í&#198;íìê&#228;3&#246;&#196;£ê&#189;£PPC6 PC7
  26.         GPIOC->CRH&=0X00033383;  //í¨ó&#195;í&#198;íìê&#228;3&#246;&#196;£ê&#189;£PPC8 PC10 PC11 PC12£&#172;PC9éè&#214;&#195;&#206;aé&#207;à-/&#207;&#194;à-ê&#228;è&#235;-1000£&#187;
  27.         GPIOC->ODR|=0XFFFF;      //è&#171;2&#191;éè&#214;&#195;&#206;aê&#228;3&#246;&#184;&#223;μ&#231;&#198;&#189;£&#187;
  28.         //GPIOC->ODR|=0X1DC0;           //0001_1101_1100_0000

  29.         GPIOD->CRL&=0X33303303; //í¨ó&#195;í&#198;íìê&#228;3&#246;&#196;£ê&#189;£PPD0 PD2 PD3 PD5 PD6 PD7
  30.         GPIOD->CRH&=0X33333300; //í¨ó&#195;í&#198;íìê&#228;3&#246;&#196;£ê&#189;£PPD10 PD11 PD12 PD13  PD14 PD15
  31.         GPIOD->ODR|=0XFFFF;           //è&#171;2&#191;éè&#214;&#195;&#206;aê&#228;3&#246;&#184;&#223;μ&#231;&#198;&#189;
  32.   //GPIOD->ODR|=0XFCE4;       //1111_1100_1110_0100
  33.         GPIOE->CRL&=0X00000030;//éè&#214;&#195;PE1&#206;aí¨ó&#195;í&#198;íìê&#228;3&#246;&#196;£ê&#189; -0011
  34. }
  35. // ******************************************************************************
  36. //  oˉêy&#195;&#251;      void Dataout(u16 data)
  37. //  1|&#196;ü&#195;èê&#246;    êy&#190;Yê&#228;3&#246;
  38. //  ê&#228;è&#235;2&#206;êy    data òaê&#228;è&#235;μ&#196;êy&#190;Y
  39. //  &#207;è&#190;&#246;ì&#245;&#188;t        IO&#191;ú±&#216;Dè&#207;èéè&#214;&#195;&#206;aê&#228;3&#246;&#191;ú
  40. //  ±&#187;μ÷ó&#195;oˉêy        &#206;T
  41. // ******************************************************************************

  42. void Dataout(u16 data)
  43. {
  44.         DATA0 = data>>15;
  45.         DATA1 = data>>14;
  46.         DATA2 = data>>13;
  47.         DATA3 = data>>12;
  48.         DATA4 = data>>11;
  49.         DATA5 = data>>10;
  50.         DATA6 = data>>9;
  51.         DATA7 = data>>8;
  52.         DATA8 = data>>7;
  53.         DATA9 = data>>6;
  54.         DATA10 = data>>5;
  55.         DATA11 = data>>4;
  56.         DATA12 = data>>3;
  57.         DATA13 = data>>2;
  58.         DATA14 = data>>1;
  59.         DATA15 = data;
  60. //GPIOC->ODR=(GPIOC->ODR&0xe23f)|data;   //GPIOC->ODR&0XE23F;  1110_0010_0011_1111
  61. //GPIOD->ODR=(GPIOD->ODR&0x031b)|data;   //GPIOD->ODR&0x1dc0   0000_0011_0001_1011
  62. }
  63. // ******************************************************************************
  64. // oˉêy&#195;&#251;       void write_data(u16 data)
  65. // 1|&#196;ü&#195;èê&#246;     D′êy&#190;Y
  66. // ê&#228;è&#235;2&#206;êy     data 16&#206;&#187;êy&#190;Y
  67. // ±&#187;μ÷ó&#195;oˉêy          Dataout(data);
  68. // ******************************************************************************
  69. void write_data(u16 data)
  70. {
  71.         FPGA_CS = 1;
  72.         delay_us(1);
  73.         FPGA_WR = 0;
  74.         delay_us(1);
  75.   Dataout(data);
  76.         delay_us(1);
  77.   FPGA_WR=1;
  78.         delay_us(5);
  79.   FPGA_WR=0;
  80.         delay_us(5);
  81.         FPGA_CS = 0;
  82. }
  83. //*******************************************************************************
  84. // oˉêy&#195;&#251;:      void write_data_num(u16 *str,u16 num)
  85. // 1|&#196;ü&#195;èê&#246;:    D′è&#235;&#214;&#184;μ&#227;3¤&#182;èμ&#196;êy&#190;Y
  86. // ê&#228;è&#235;2&#206;êy:    *str 16&#206;&#187;êy&#190;Y×é; u16 êy&#190;Y&#184;&#246;êy£&#187;
  87. // ±&#187;μ÷ó&#195;oˉêy          write_data( u16 data);
  88. //*******************************************************************************
  89. void write_data_num(u16 *str ,u16 num)
  90. {
  91.         u16 i=0;
  92.         for(i=0;i<num;i++)
  93.         {
  94.                 write_data(str[i]);
  95.                 delay_us(100);
  96.         }
  97. }



复制代码






  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "cpu.h"
  4. //#include "w25qxx.h"
  5. //******************************************************************************
  6. //oˉêy&#195;&#251;£o    int main(void)
  7. //1|&#196;ü&#195;èê&#246;£o  &#214;÷oˉêy£&#172;&#196;£&#196;a80802¢DD×ü&#207;&#223;£&#172;·¢&#203;íêy&#190;Yμ&#189;FPGA
  8. //ê&#228;è&#235;2&#206;êy£o  &#206;T
  9. //±&#187;μ÷ó&#195;oˉêy£o&#206;T
  10. //******************************************************************************       
  11. //òaD′è&#235;μ&#189;W25Q128μ&#196;×&#214;·&#251;′&#174;êy×é
  12. //u16 spi_Buffer[2048];
  13. //#define SIZE sizeof (spi_Buffer)
  14. int main(void)
  15. {       
  16.   //u16 datatemp[SIZE];
  17.         u16 spi_Buffer[2048];
  18.         u16 i;
  19.         u16 num = 2048;
  20.         //u32 wraddr = 0;
  21.         Stm32_Clock_Init(9);        //&#207;μí3ê±&#214;óéè&#214;&#195;
  22.         delay_init(72);                            //&#209;óê±3&#245;ê&#188;&#187;ˉ                          
  23.         //W25QXX_Init();                        //W25QXX3&#245;ê&#188;&#187;ˉ
  24.         Parallel_Init();     //2¢&#191;ú3&#245;ê&#188;&#187;ˉ;
  25.         for(i=0; i<num; i++) //2úéúêy×é;
  26.         {
  27.            spi_Buffer[i]=i;
  28.         }
  29.   //W25QXX_Write((u16*)spi_Buffer,wraddr,SIZE);
  30.   //delay_ms(500);
  31.   //W25QXX_Read(datatemp,wraddr,SIZE);                                        //&#182;á3&#246;SIZE&#184;&#246;×&#214;&#189;ú
  32.   //delay_ms(500);
  33.         FPGA_RST = 0;
  34.         delay_ms(500);
  35.         FPGA_RST = 1;
  36.         delay_ms(500);
  37.         delay_ms(500);
  38.   write_data_num(spi_Buffer,num); //êy&#190;Y&#190;-2¢&#191;ú·¢&#203;íμ&#189;FPGA
  39.         delay_ms(500);
  40. }



复制代码


这是我这边编写的部分代码,大致意思是将16位并行数据发送至fpga,模拟的是8080并行口,但是没有读的部分,也没有地址,在FPGA部分设置双口RAM缓存数据,考虑到是按顺序存储,就自加产生写地址;FPGA部分编写完成,功能仿真也可以,但是好像数据没有发送过去,不知问题出在哪儿,STM32刚学习不久,所以怀疑这边出现问题,希望大家可以帮我看看。多多指点!万分感谢!
(本来还有一部分读写W25Q16部分,因为数据是先缓冲到那里面,但是考虑到一步一步调试,所以先注销了,后面再研究)
 楼主| 发表于 2016-12-23 15:08:21 | 显示全部楼层
回复 1# 黎释注册


   乱码部分都是注释,对整个代码没有影响,要是感兴趣可以复制带文档中看下,诚心讨教。谢谢!
发表于 2016-12-25 08:40:50 | 显示全部楼层
您的DATAOUT 子程序逻辑观念似乎整个要改掉
举例BIT0如下:
1.         if (data&BIT0) gpioSetValue (PORTD, 5, 0); else gpioSetValue (PORTD, 5, 1);
以此类推 16 BIT 重写
发表于 2016-12-25 08:42:02 | 显示全部楼层
您的DATAOUT 子程序逻辑观念似乎整个要改掉
举例BIT0如下:
1.         if (data&BIT0) gpioSetValue (PORTD, 5, 1); else gpioSetValue (PORTD, 5, 0);
以此类推 16 BIT 重写
 楼主| 发表于 2016-12-25 09:00:56 | 显示全部楼层
回复 4# meta59


  谢谢您,我按着您说的方法试一试,那个是不是要用到库函数?
发表于 2016-12-26 07:46:20 | 显示全部楼层
是 需要用到 有可能函数名称不同。只要符合作法的都可以。
发表于 2017-4-14 09:52:22 | 显示全部楼层
模拟8080并行总线发送数据至FPGA
发表于 2017-4-16 15:51:13 | 显示全部楼层
不错不错不错
发表于 2017-5-21 16:56:36 | 显示全部楼层
没看懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-16 08:36 , Processed in 0.022087 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表