京微齐力 FPGA-M5 学习(二)- Blink_LED

京微齐力 FPGA-M5 学习(二)- Blink_LED

    • 简介
    • FPGA部分
    • 硬核8051部分
    • 如有疑问或错误的请留言!

简介

简单一点的开始,在FPGA部分控制闪烁LED0,在8051内核部分控制闪烁LED1;
建立工程和详细配置就不说明了!

百度云工程链接,提取码:qkc3
说明:

  1. 例化8051内核时将keil生成的Hex文件路径填入,编译FPGA部分时会将其打包进bin文件中;
    京微齐力 FPGA-M5 学习(二)- Blink_LED_第1张图片

FPGA部分

// ============================================================
//
// Company: F111
// Engineer: 九四一二
//
// Create Date: 05/07/2020 11:22:02   
// Design Name: 
// Module Name: M5_FP
// Project Name: BlinkLED
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
// ============================================================
module M5_FP(
	output LED_0,
	output LED_1
);

//io port
wire [7:0] port0o;
wire [7:0] port0i;
wire [7:0] port1o;
wire [7:0] port1i;
wire [7:0] port2o;
wire [7:0] port2i;	
wire [7:0] port3o;
wire [7:0] port3i;
//clock 
wire clkin;       // 外部输入时钟 20M
wire clk_sys;     // 51内核时钟 / 系统时钟   100M
	

localparam DivisionCountMax = 24'd5_000_000;
reg [23:0] divisionCount;
reg blinkLED;

always @(posedge clkin) begin                                  
    if(divisionCount <= DivisionCountMax)
		divisionCount <= divisionCount + 1'b1;
	else begin
		divisionCount <= 23'b0;
		blinkLED = ~blinkLED;
	end
end

assign 	LED_0 = blinkLED;   //FP 控制LED_0
assign 	LED_1 = port0o[0];   //8051-P0^0 控制LED_1


/*----------------------------
 * 模块 : 例化晶振驱动(使用外部20M无源晶振)
 */
MyOscillator myOscillator (
	.clkout (clkin)
);
/*----------------------------
 * 模块 : 例化PLL 0
 */
MyPLL_0 myPLL_0(
    .clkin(clkin),      // clkin   20M
    .clkout0(clk_sys)   // clkout 100M
);
/*----------------------------
 * 模块 : 例化硬核8051
 */
my_51mcu my51mcu(
    .clkcpu     (clk_sys   ),
    .resetn     (1'b1      ),
    .port0i 	(port0i    ), //8 bit input port
    .port1i 	(port1i    ),
    .port2i 	(port2i    ),
    .port3i 	(port3i    ),
    .port0o 	(port0o    ), //8 bit output port
    .port1o 	(port1o    ),
    .port2o 	(port2o    ),
    .port3o 	(port3o    )
);

endmodule

硬核8051部分

#include "CME-M5.h"
#include "BasicDataType.h"

#define LED_1       P0_0 
//8051时钟频率定义:和FP—PLL生成时钟频率一致
#define CPU_CLOCK   100000000UL
// *******************************************************************
void ApiDelay_nms(UINT32 t)
{
   UINT32 i;  
    do{  
        i = (UINT32)(CPU_CLOCK / 100000);  
        while(--i);  
    }while(--t);  
}

void main(void)
{
  CKCON = 0x11; 
  EAL = 1;      //全局中断使能
  
  while(1)
  {	
		LED_1 = 1;
		ApiDelay_nms(500);
		LED_1 = 0;
		ApiDelay_nms(500);
  }
}

如有疑问或错误的请留言!

如未回复可发邮件给我([email protected])。

你可能感兴趣的:(京微齐力-M5学习)