SOC设计及Verilog学习笔记六

Cortex-M3软硬件协同仿真设计(Keil+ModelSim10.1):
模块包括:M3_core、MEM、APB及所连外设、Matrix总线
目标功能:软件驱动TIMER/GPIO

地址分配:
32位地址线
APB及外设地址:0x4000 0000-0x4000 FFFF 共64K

SOC设计及Verilog学习笔记六_第1张图片

SOC设计及Verilog学习笔记六_第2张图片

由HPORT[3:0]可知APB将PADDR32位地址分配成16*4K,每个外设占据4K存储空间;APB_MUX通过对PADDR [15:12]/DECODE[3:0]判断调用哪个外设;其中TIMER地址:0x4000 0000-0x4000 0FFF(其中[PADDR[11:2]有效),GPIO地址:0x4000 4000-0x4000 4FFF(其中[PADDR[6:2]有效),UART地址:0x4000 5000-0x4000 5FFF(其中[PADDR[11:2]有效)

TIMER模块:

// Programmer's model
// 0x00 RW    CTRL[3:0]
//              [3] Timer Interrupt Enable
//              [2] Select External input as Clock
//              [1] Select External input as Enable
//              [0] Enable
// 0x04 RW    Current Value[31:0]
// 0x08 RW    Reload Value[31:0]
// 0x0C R/Wc  Timer Interrupt
//              [0] Interrupt, right 1 to clear
// 0x3E0 - 0x3FC  ID registers
//-------------------------------------

1、TIMER写使能:ox4000 0000(写0x0000 0001)
2、TIMER加载初始计数值:0x4000 4008(写任意初值)
3、TIMER计数值进行读取:0x4000 4004
4、TIMER计数完成发出中断信号:0x4000 400c

在Keil中进行驱动:
 

	//TIMER使能
	TADDR =(int*)0x40000000;
	*TADDR = 0x00000001;	
	//TIMER加载计数值
	TADDR =(int*)0x40000008;
	*TADDR =100;	
	//TIMER读
	TADDR =(int*)0x40000004;
	

波形:
 

 

GPIO模块:

`define gpio_swporta_dr_OFFSET    5'b00000  //写数据到输出引脚
`define gpio_swporta_ddr_OFFSET   5'b00001  //配置IO方向
`define gpio_swporta_ctl_OFFSET   5'b00010  //使能

`define gpio_inten_OFFSET         5'b01100
`define gpio_intmask_OFFSET       5'b01101
`define gpio_inttype_level_OFFSET 5'b01110
`define gpio_int_polarity_OFFSET  5'b01111
`define gpio_intstatus_OFFSET     5'b10000
`define gpio_raw_intstatus_OFFSET 5'b10001

`define gpio_porta_eoi_OFFSET     5'b10011
`define gpio_ext_porta_OFFSET     5'b10100

`define gpio_ls_sync_OFFSET       5'b11000

GPIO地址[6:2]五位控制信号如上图所示
1、GPIO数据方向定义为输出模式0x4000 4004(每位都要写1,给0xff)
2、GPIO软硬件控制一0x4000 4008(软件1)
2、GPIO数据输出0x4000 4000(数据写入,这边给0x0-0xf-0x0-0xf)

在Keil中进行驱动:
 

	//GPIO写使能
	GADDR=(int*)0x40004004;
	*GADDR=0xff;
	GADDR=(int*)0x40004008;
	*GADDR=0x00000001;
	//GPIO输出
	GADDR=(int*)0x40004000;
	*GADDR=0x0f;	
	
	GADDR=(int*)0x40004000;
	*GADDR=0x00;	

	GADDR=(int*)0x40004000;
	*GADDR=0x0f;
		
	GADDR=(int*)0x40004000;
	*GADDR=0x00;

波形:

SOC设计及Verilog学习笔记六_第3张图片

 

你可能感兴趣的:(数字IC设计)