Vivado Vitis 赛灵思xc7a75t工程新增外设流程

IP核部分新增定时器外设流程如下。

流程图

1. 新增外设。

        打开Vivado工程,打开Block Design。

        这里以定时器为例,灵活新增一个定时器。打开原理图,右键添加IP。

         双击增加定时器。必须连接的线路为总线,时钟与复位信号,中断线。

       

        双击AXI总线,增加一组主接口。

        可以点击进行自动连线,推荐手动连线。

        连接总线,连接时钟与复位信号输入,连接外设。

        

        创建一组中断线并连接。双击中断控制器,新增中断线,并连接到中断。

        可以右键,进行原理图重新布局。

        地址映射(推荐自动分配)。根据需求自行配置资源。

2. 生成与检查。

        生成设计。

        随后重新生成综合,实现,生成比特流。

        生成xsa文件,保存文件路径。

        删除Vivado工程中的旧elf文件。

        打开Vitis,在平台目录下右键,更新xsa文件,自动生成相关文件。

        平台目录下,按照以下步骤检查是否成功添加外设。

3. 增加C代码

        打开查看自动生成的文件有没有添加上新的外设相关宏定义。

        成功新增地址和中断相关宏定义。下一步只需要初始化定时器,使能中断,既可以在中断回调函数中执行相关定时指令。

XTmrCtr Timer1InitStruct;
#define TMRCTR1_DEVICE_ID	XPAR_TMRCTR_1_DEVICE_ID
#define TMRCTR1_INTERRUPT_ID	XPAR_INTC_0_TMRCTR_1_VEC_ID
#define TIMER1CNT	 0
long time1_10ms = 0;

static void Timer1InterruptHandler(void *CallBackRef);    //中断回调函数句柄
void timer1interruptfunction();

BOOL Timer1_Init( USHORT usTim1Timerout50us )    //定时器初始化样例
{
    int Status;
	unsigned int timer_load;
    timer_load = RESET_VALUE* usTim1Timerout50us;
	Status = XTmrCtr_Initialize(&Timer1InitStruct, TMRCTR1_DEVICE_ID);
	if (Status != XST_SUCCESS) {
		return XST_FAILURE;
	}

	XIntc_RegisterHandler(XPAR_INTC_0_BASEADDR,TMRCTR1_INTERRUPT_ID,
	(XInterruptHandler)Timer1InterruptHandler,(void *)XPAR_AXI_TIMER_1_BASEADDR);
    XTmrCtr_SetLoadReg(XPAR_AXI_TIMER_1_BASEADDR, TIMER1CNT, timer_load);
    XTmrCtr_SetControlStatusReg(XPAR_AXI_TIMER_1_BASEADDR, TIMER1CNT,XTC_CSR_ENABLE_TMR_MASK | XTC_CSR_ENABLE_INT_MASK |XTC_CSR_AUTO_RELOAD_MASK | XTC_CSR_DOWN_COUNT_MASK);
    XTmrCtr_EnableIntr(XPAR_AXI_TIMER_1_BASEADDR, TIMER1CNT);
	XTmrCtr_Start(&Timer1InitStruct, TIMER1CNT);
    return TRUE;
}


void Timer1InterruptHandler(void *CallBackRef)//中断回调函数
{
    unsigned int timer_csr;
    timer_csr = XTmrCtr_GetControlStatusReg(XPAR_AXI_TIMER_1_BASEADDR, 0);
    if(timer_csr & XTC_CSR_INT_OCCURED_MASK)
    {
    	timer1interruptfunction();    //在这执行操作
       XTmrCtr_SetControlStatusReg(XPAR_AXI_TIMER_1_BASEADDR, 0, timer_csr);
    }
}

void Timer1Start(  )    //开始计数
{
   XTmrCtr_Enable(XPAR_AXI_TIMER_1_BASEADDR, TIMER1CNT);
}

void Timer1Stop(  )    //停止
{
   XTmrCtr_Disable(XPAR_AXI_TIMER_1_BASEADDR, TIMER1CNT);
}

void system_intr_en(void)    //不要忘记使能中断
{
    microblaze_enable_interrupts();

    microblaze_register_handler(XIntc_DeviceInterruptHandler,XPAR_INTC_0_DEVICE_ID);

   XIntc_MasterEnable(XPAR_INTC_0_BASEADDR);

   XIntc_EnableIntr(XPAR_INTC_0_BASEADDR,XPAR_AXI_TIMER_0_INTERRUPT_MASK|XPAR_AXI_TIMER_1_PWM0_MASK);    //使能

}

4. 关联vivado并烧录

        将软核代码修改完成后,进行编译。编译完成后找到vitis生成的.elf文件。一般位于debug目录下。

        将elf文件导入vivado,进行关联。

        从新生成比特文件,生成固化文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chase465

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值