P2 Evb 做一个跑马灯
0赞之前我用M5 做了一个跑马灯,这次我用P2. 主要想使用一下其中的ARM 这个IP. 最简单的是做一个跑马灯。
代码部分:
ARM 代码如下:(编程环境为Keil)
#include <stdio.h>
#include <string.h>
#include "hme_includes.h"
#include "hme_retarget.h"
#include "timer_delay.h"
#include "gpio_task.h"
void delay(volatile unsigned int ix)
{
volatile unsigned int cycles = ix *31250;
while( cycles )
--cycles;
}
int main(void)
{
HME_GPIO_InitTypeDef Init;
Init.Mode = PIN_MODE_OUTPUT;
Init.Pins = 0xf;
HME_GPIO_Init(GPIO0, &Init);
delay(250);
while(1){
HME_GPIO_Set(GPIO0,GPIO_PIN1);
delay(250);
HME_GPIO_Clear(GPIO0,GPIO_PIN1);
delay(250);
HME_GPIO_Set(GPIO0,GPIO_PIN0);
delay(250);
HME_GPIO_Clear(GPIO0,GPIO_PIN0);
delay(250);
HME_GPIO_Set(GPIO0,GPIO_PIN2);
delay(250);
HME_GPIO_Clear(GPIO0,GPIO_PIN2);
delay(250);
HME_GPIO_Set(GPIO0,GPIO_PIN3);
delay(250);
HME_GPIO_Clear(GPIO0,GPIO_PIN3);
delay(250);
}
}
FPGA的代码 用fuxi这个工具写, 如下:
module top(led);
output [3:0] led;
wire clk;
//sys_rstn 系统复位低电平有效
wire sys_rstn;
//GPIO
wire [3:0] gpio_d;//enable
wire [3:0] gpio_out;
wire [3:0] gpio_in;
por_v1_1 por_inst(
.O(por)
);
//assign sys_rstn = por;
oscillator_v1 u_osc(
.clkout(clk)
);
pll_v1 u0_pll(
.clkin0 (clk),
.locked (locked0),
.clkout0 (psram_clk),
.clkout1 (psram_clk_90),
.clkout2 (psram_clk_60),
.ps_ck (ps_ck),
.ps_dir (ps_dir),
.ps_en (ps_en0),
.ps_done (ps_done),
.pssel (pssel)
);
pll_v2 u1_pll(
.clkin0 (clk),
.locked (locked1),
.clkout0 (clk_mcu)
);
assign sys_rstn = locked0 & locked1 & por;
assign rstn_mcu = sys_rstn;
soc_system_v1 u0_soc(
.m3soc_clk_o(clk_mcu),
.m3soc_clken(1'b1),
.m3soc_rstn(rstn_mcu),
.u_m3soc_gpio0_ext_porta_i(gpio_in),
.u_m3soc_gpio0_porta_ddr_o(gpio_d),
.u_m3soc_gpio0_porta_dr_o(gpio_out)
);
assign led[0] = gpio_d[0] == 1'b1 ? gpio_out[0] : 1'bz;
assign led[1] = gpio_d[1] == 1'b1 ? gpio_out[1] : 1'bz;
assign led[2] = gpio_d[2] == 1'b1 ? gpio_out[2] : 1'bz;
assign led[3] = gpio_d[3] == 1'b1 ? gpio_out[3] : 1'bz;
endmodule
这里面有一个东东让我花了一些时间理解:
这个是P2手册里面的,关于地址空间的分配

根据上面的手册,Keil中做如下配置 (注:IROM1 存放代码; IRAM1 地址是指定存放数据的。完全follow 上面的手册内容,如果想要使用0x18000000 后面的区域,需要在Fuxi工程中用emb扩展SRAM区, 后面有时间我会去实现一下 我们有参考代码)

