ZYNQ7000开发板(zedboard)定时器中断实验——LED闪烁

vidoda设计

和gpio_mio实验硬件相同
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
PS-PL Configuration ->general
在这里插入图片描述

SDK设计


#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#include "xstatus.h"
#include "xplatform_info.h"
#include <xil_printf.h>
#include "sleep.h"
#include "xscutimer.h"
#include "xscugic.h"

#define GPIO_DEVICE_ID		XPAR_XGPIOPS_0_DEVICE_ID
#define MIO7_LED            7    //ps端LED
#define LED_DELAY		10000000
#define TIMER_DEVICE_ID		XPAR_XSCUTIMER_0_DEVICE_ID
#define TIMER_IRPT_INTR		XPAR_SCUTIMER_INTR

#define TIMER_LOAD_VALUE	0x3F83C3F    //0.2s 闪烁一次,0.2*1000_000_000/(1000/333) - 1 = 3F83C3F
#define INTC_DEVICE_ID		XPAR_SCUGIC_SINGLE_DEVICE_ID


XGpioPs Gpio;	/* The driver instance for GPIO Device. */
XScuTimer TimerInstance;
XScuGic IntcInstance;

//	中断处理函数
void TimerIntrHandler(void *CallBackRef)
{
	//LED 状态,用于控制 LED 灯状态翻转
	static int led_state = 0;
	XScuTimer *timer_ptr = (XScuTimer *) CallBackRef;
	if(led_state == 0)
		led_state = 1;
	else
		led_state = 0;
	//向指定引脚写入数据: 0 或 1
	XGpioPs_WritePin(&Gpio, MIO7_LED,led_state);
	//清除定时器中断标志
	XScuTimer_ClearInterruptStatus(timer_ptr);
}
//	mio初始化
void mio_init()
{
	XGpioPs_Config *ConfigPtr;
	//初始化gpio驱动
	//根据器件id,查找器件配置信息
	ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
	//初始化gpio参数
	XGpioPs_CfgInitialize(&Gpio, ConfigPtr,
						ConfigPtr->BaseAddr);

	//gpio方向设置为输出(0:输入、1:输出)
	XGpioPs_SetDirectionPin(&Gpio, MIO7_LED, 1);
//	XGpioPs_SetDirectionPin(&Gpio, 50, 0);

	//设置输出使能(0:关闭、1:打开)
	XGpioPs_SetOutputEnablePin(&Gpio, MIO7_LED, 1);
//	XGpioPs_WritePin(&Gpio, MIO7_LED, 0x0);
}
//	定时器中断初始化
void TimerSetupIntrSystem(XScuGic *IntcInstancePtr, XScuTimer *TimerInstancePtr, u16 TimerIntrId)
{
	XScuGic_Config *IntcConfig;
//	定时器中断初始化
	IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
	XScuGic_CfgInitialize(IntcInstancePtr, IntcConfig,
						IntcConfig->CpuBaseAddress);

	Xil_ExceptionInit();
//	关联中断函数
	Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,
					(Xil_ExceptionHandler)XScuGic_InterruptHandler,
					IntcInstancePtr);
//	关联中断函数
	XScuGic_Connect(IntcInstancePtr, TimerIntrId,
					(Xil_ExceptionHandler)TimerIntrHandler,
					(void *)TimerInstancePtr);
//	使能GIC定时器中断
	XScuGic_Enable(IntcInstancePtr, TimerIntrId);
//	使能定时器中断
	XScuTimer_EnableInterrupt(TimerInstancePtr);
	Xil_ExceptionEnable();
}

// 	定时器初始化
int timer_init(XScuGic *IntcInstancePtr, XScuTimer * TimerInstancePtr, u16 TimerDeviceId, u16 TimerIntrId)
{
	int Status;
//	int LastTimerExpired = 0;
	XScuTimer_Config *ConfigPtr;
//	初始化私有定时器
	ConfigPtr = XScuTimer_LookupConfig(TimerDeviceId);
	XScuTimer_CfgInitialize(TimerInstancePtr, ConfigPtr,
						ConfigPtr->BaseAddr);
//	硬件自测
	Status = XScuTimer_SelfTest(TimerInstancePtr);
		if (Status != XST_SUCCESS) {
			return XST_FAILURE;
		}
//		设置中断系统
	TimerSetupIntrSystem(IntcInstancePtr,
							TimerInstancePtr, TimerIntrId);
//		使能自动重下载模式
	XScuTimer_EnableAutoReload(TimerInstancePtr);
//		加载定时器计数器
	XScuTimer_LoadTimer(TimerInstancePtr, TIMER_LOAD_VALUE);
//		开始定时器计数
	XScuTimer_Start(TimerInstancePtr);

	return 0;
}

int main()
{
//	u32 Data;

	printf("***hello,hello,hello,hello,hello,hello***\r\n");
	mio_init();
	timer_init(&IntcInstance, &TimerInstance,TIMER_DEVICE_ID, TIMER_IRPT_INTR);

	XScuTimer_Start(&TimerInstance); //启动定时器
	return 0;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Alinx Zynq7000开发是一种基于Xilinx Zynq-7000 SoC(System on Chip)的开发平台。它融合了ARM Cortex-A9处理器和FPGA(Field Programmable Gate Array)技术,可以实现硬件和软件联合开发,满足各种应用需求。 Alinx Zynq7000开发配备了丰富的外设接口,包括以太网口、USB接口、HDMI接口、SD卡插槽等,可灵活地与外部设备进行通信。同时,它还提供了一块DDR3 SDRAM和一块QSPI Flash,用于存储和读取数据。 Alinx Zynq7000开发提供了丰富的例程供开发者参考和学习。这些例程涵盖了各种应用场景,例如图像处理、音频处理、通信等。这些例程可以帮助开发者快速了解并使用该开发,加快产品开发的速度。 在使用Alinx Zynq7000开发的例程时,开发者可以按照以下步骤进行操作: 1. 确保开发与电脑正确连接,并且开发环境已经配置好。 2. 获取并导入相应的例程代码。 3. 根据例程提供的文档和说明,了解该例程的功能和实现原理。 4. 根据需要对例程进行修改和定制,以满足自己的应用需求。 5. 编译和烧录代码到开发中,运行和调试例程。 通过学习和运行这些例程,开发者可以深入理解Alinx Zynq7000开发的特性和功能,并为开发自己的应用程序提供参考和借鉴。这些例程的丰富性和灵活性,使得开发者可以更好地利用Alinx Zynq7000开发的强大性能,实现各种创新的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

RyanLee90

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

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

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

打赏作者

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

抵扣说明:

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

余额充值