zynq+linux定时器,Zynq-7000 FreeRTOS(二)中断:Timer中断

/** main.c

*

* Created on: 2016年6月26日

* Author: Administrator*/#include #include "xadcps.h"#include "xil_types.h"#include "Xscugic.h"#include "Xil_exception.h"#include "xscutimer.h"

//timer info

#define TIMER_DEVICE_ID XPAR_XSCUTIMER_0_DEVICE_ID

#define INTC_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID

#define TIMER_IRPT_INTR XPAR_SCUTIMER_INTR

#define TIMER_LOAD_VALUE 0x13D92D3Fstatic XScuGic Intc;//GIC

static XScuTimer Timer;//timer

static void TimerIntrHandler(void*CallBackRef)

{

staticint sec = 0; //计数

XScuTimer *TimerInstancePtr = (XScuTimer *) CallBackRef;

XScuTimer_ClearInterruptStatus(TimerInstancePtr);

sec++;

printf("%d Second\n\r",sec); //每秒打印输出一次

}

void SetupInterruptSystem(XScuGic*GicInstancePtr,

XScuTimer*TimerInstancePtr, u16 TimerIntrId)

{

XScuGic_Config*IntcConfig; //GIC config

Xil_ExceptionInit();//initialise the GIC

IntcConfig =XScuGic_LookupConfig(INTC_DEVICE_ID);

XScuGic_CfgInitialize(GicInstancePtr, IntcConfig,

IntcConfig->CpuBaseAddress);

Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,

(Xil_ExceptionHandler)XScuGic_InterruptHandler,//connect to the hardware

GicInstancePtr);

XScuGic_Connect(GicInstancePtr, TimerIntrId,

(Xil_ExceptionHandler)TimerIntrHandler,//set up the timer interrupt

(void *)TimerInstancePtr);

XScuGic_Enable(GicInstancePtr, TimerIntrId);//enable the interrupt for the Timer at GIC

XScuTimer_EnableInterrupt(TimerInstancePtr);//enable interrupt on the timer

Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ); //Enable interrupts in the Processor.

}intmain()

{

XScuTimer_Config*TMRConfigPtr; //timer config

printf("------------START-------------\n");//私有定时器初始化

TMRConfigPtr =XScuTimer_LookupConfig(TIMER_DEVICE_ID);

XScuTimer_CfgInitialize(&Timer, TMRConfigPtr,TMRConfigPtr->BaseAddr);//XScuTimer_SelfTest(&Timer);//加载计数周期,私有定时器的时钟为CPU的一般,为333MHZ,如果计数1S,加载值为1sx(333x1000x1000)(1/s)-1=0x13D92D3F

XScuTimer_LoadTimer(&Timer, TIMER_LOAD_VALUE);//自动装载

XScuTimer_EnableAutoReload(&Timer);//启动定时器

XScuTimer_Start(&Timer);//set up the interrupts

SetupInterruptSystem(&Intc,&Timer,TIMER_IRPT_INTR);while(1);

return0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZYNQ平台上进行PL-PS协同设计时,需要考虑如何将PL中的网口与PS中的网口进行连接。一种常用的方式是使用AXI Ethernet IP核,将PL中的网口接到AXI总线上,然后通过AXI总线与PS中的网口进行连接。 在Linux中使用PL中的网口时,需要进行如下调试步骤: 1. 确认AXI Ethernet IP核已经正确配置,并且在硬件中已经成功实现了网口的功能。 2. 在Linux内核中,需要加载相应的驱动程序。以常见的AXI Ethernet驱动程序axienet为例,可以使用以下命令加载驱动程序: ``` modprobe axienet ``` 3. 确认网口的设备节点已经正确创建。可以使用以下命令查看网口设备节点: ``` ls /sys/class/net ``` 如果成功创建了网口设备节点,应该能够看到类似于eth0、eth1等设备节点。 4. 使用ifconfig命令配置网口IP地址等参数。例如,可以使用以下命令将eth0网口的IP地址设置为192.168.1.100: ``` ifconfig eth0 192.168.1.100 ``` 5. 确认网口是否能够正常工作。可以使用ping命令测试与其他主机的连通性: ``` ping <目标IP地址> ``` 如果能够ping通目标主机,则说明网口已经正确工作。 6. 如果出现网络连接问题,可以使用tcpdump命令进行网络抓包分析,以便确定问题的原因: ``` tcpdump -i eth0 ``` 这将在eth0网口上抓取所有的网络数据包,并将它们输出到屏幕上。可以使用Ctrl+C停止抓包,并分析输出的数据包内容以确定问题的原因。 以上就是在ZYNQ平台上使用PL中的网口进行Linux开发时常见的调试步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值