zedboard中断main

//Description:         Zed LED DimmerExample

//Revision:            Oct 25, 2013: 1.00Initial version

//----------------------------------------------------------------------------

/*****************************Include Files *********************************/

#include"xparameters.h"

#include"xil_io.h"

#include"xstatus.h"

//这些都是静态的,必须添加到我们的中断安装例程映射到SCUGIC定义驱动程序调用。

#include"xscugic.h"//SCUGIC的驱动//该文件包含配置驱动程序以及 GIC 的使用范围

#include "xil_exception.h"//ExceptionHandlerd的驱动包

/**************************Constant Definitions *****************************/

/*

* The following constant maps to the name ofthe hardware instances that

* were created in the EDK XPS system.

*/

#define PWM_BASE_ADDRESS0x43C00000

/* The followingdefinitions are related to handling interrupts from the

* PWMcontroller. */

#defineXPAR_PS7_SCUGIC_0_DEVICE_ID 0

//#defineINTC_PWM_INTERRUPT_ID XPAR_FABRIC_PWM_W_INT_0_INTERRUPT_OUT_INTR//报错:未定义

#defineXPAR_FABRIC_PWM_W_INT_0_INTERRUPT_OUT_INTR 61//因为报错,自己添加的

#defineINTC_PWM_INTERRUPT_ID XPAR_FABRIC_PWM_W_INT_0_INTERRUPT_OUT_INTR

#define INTCXScuGic

#defineINTC_HANDLER XScuGic_InterruptHandler

#defineINTC_DEVICE_ID XPAR_PS7_SCUGIC_0_DEVICE_ID

/**************************Variable Definitions *****************************/

/*

* The following are declared globally so theyare zeroed and so they are

* easily accessible from a debugger

*/

//这些变量声明复制到源代码变量声明部分。亮度可变现在全局声明的,使其对可见光

//ISR将在以后添加。该INTC变量是用来设置一个静态的定义用于设置SCUGIC驱动程序。

//这些变量声明复制到源代码变量声明

/* LEDbrightness level is now global to make is visble to the ISR. */

volatile u32brightness;

/* The Instanceof the Interrupt Controller Driver */

static INTCIntc;

//这将作为调用的硬件时,回调的中断服务程序。

/**************************Main Code Entry **********************************/

void PWMIsr(void*InstancePtr)

{

/* Inform theuser that an invalid value was detected by the PWM

* controller. */

print("PWMValue exceeded, brightness reset to zero. Enter new value: \r\n");

/* Set thebrightness value to a safe value and write it to the

* PWM controllerin order to clear the pending interrupt. */

brightness = 0;

Xil_Out32(PWM_BASE_ADDRESS,brightness);

}

/****************************************************************************/

/**

* This functionsets up the interrupt system for the PWM dimmer controller.

* The processingcontained in this function assumes the hardware system was

* built with aninterrupt controller.

*

* @param None.

*

* @return Astatus indicating XST_SUCCESS or a value that is contained in

* xstatus.h.

*

* @note None.

*

*****************************************************************************/

intSetupInterruptSystem()

{

int result;

INTC*IntcInstancePtr = &Intc;

XScuGic_Config*IntcConfig;

/* Initializethe interrupt controller driver so that it is ready to

* use. */

IntcConfig =XScuGic_LookupConfig(INTC_DEVICE_ID);

if (IntcConfig== NULL)

{

returnXST_FAILURE;

}

/* Initializethe SCU and GIC to enable the desired interrupt

* configuration.*/

result =XScuGic_CfgInitialize(IntcInstancePtr, IntcConfig,

IntcConfig->CpuBaseAddress);

if (result !=XST_SUCCESS)

{

returnXST_FAILURE;

}

XScuGic_SetPriorityTriggerType(IntcInstancePtr,INTC_PWM_INTERRUPT_ID,

0xA0, 0x3);

/* Connect theinterrupt handler that will be called when an

* interruptoccurs for the device. */

result =XScuGic_Connect(IntcInstancePtr, INTC_PWM_INTERRUPT_ID,

(Xil_ExceptionHandler)PWMIsr, 0);

if (result !=XST_SUCCESS)

{

return result;

}

/* Enable theinterrupt for the PWM controller device. */

XScuGic_Enable(IntcInstancePtr,INTC_PWM_INTERRUPT_ID);

/* Initializethe exception table and register the interrupt controller

* handler withthe exception table. */

Xil_ExceptionInit();

Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,

(Xil_ExceptionHandler)INTC_HANDLER,IntcInstancePtr);

/* Enablenon-critical exceptions */

Xil_ExceptionEnable();

returnXST_SUCCESS;

}

int main(void)

{

//printf("HelloWorld\n");

int status = XST_SUCCESS;

u32 value = 0;

u32 period = 0;

brightness = 0; // u32 brightness = 0;

/* Initialize the LED Dimmer controller toa safe PWM value. */

Xil_Out32(PWM_BASE_ADDRESS, 0);

/* Now that the hardware has beeninitialized, continuously loop while

* prompting the user for updates to thebrightness level. */

while (1)

{

/* Prompt the user to select abrightness value ranging from

* 0 to 9. */

print("Select a Brightness between0 and 9\n\r");

/* Read an input value from theconsole. */

value = inbyte();

/* Convert the input ASCII character toan integer value. */

period = value - 0x30;

/* Print the input value back to theconsole to provide some

* feedback to the user. */

xil_printf("Brightness Level %dselected\n\r", period);

/* Since the LED width is 1e6 clkcycles, we need to normalize

* the period to that clk.  Since we accept values 0-9, that will

* scale period from 0-999,000.  0 turns off LEDs, 999,000 is full

* brightness. */

brightness = period * 110000;

/* Write the duty_cycle width (Period)out to the PL PWM

* peripheral. */

Xil_Out32(PWM_BASE_ADDRESS,brightness);

//这个调用,使能了中断和ISR,在中断处理之前

/* Setup the interrupts such thatinterrupt processing can occur. If an

* error occurs while setting upinterrupts, then exit the application. */

status = SetupInterruptSystem();

if (status != XST_SUCCESS)

{

return XST_FAILURE;

}

}

return status;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-04 00:49:22

zedboard中断main的相关文章

zedboard中断实现

关于zedboard中断的博客 http://m.blog.csdn.net/blog/oxp7085915/17378687 http://www.tuicool.com/articles/mY3qIvi 在系统编程的中断处理程序,也称为中断服务例程(ISR),在微控制器固件,操作系统回调子例程,或设备驱动器,其执行是由一个硬件中断的接收触发.中断处理程序中有大量的功能,这些功能的基础上的原因而变化的中断生成和速度时,中断处理程序完成其任务. 中断处理程序是事件处理程序的一个低级别的对应.这些

zedboard 中断

/*该文件包含使用GPIO驱动程序(XGpioPs)在一个设计实例操作中断驱动模式. *该示例使用GPIO的中断能力检测按钮,事件并设置基于输入输出的LED.用户需要按评估板上所有的开关SW1-SW5从这个例子中退出. *@注意:*本示例假定有一个UART设备在硬件设计.*/ /***************************** Include Files *********************************/ #include "xparameters.h" #

SPI

STM32-SPI使用 SPI知识: 1) 高速同步串行口.3-4线接口(CS ,CLK ,MOSI,MISO),收发独立.可同步进行. 2)SPI分为主从模式,主模式提供时钟和片选选择信号. 3) 模式控制:CPOL用来控制时钟信号(clk)在空闲时候的状态:CPHA用来控制采样时刻时CLK的边缘动作. CPOL CPHA 模式 0 0 CLK空闲时为低电平,CLK上升沿采样数据. 0 1 CLK空闲为低电平,CLK下降沿采样数据. 1 0 CLK空闲时为高电平,CLK上升沿采样数据. 1 1

嵌入式开发之 STM32自行车码表(图文)

笔者将从以下几个方面逐步深入地讲解STM32F103C8开发板的使用,并在Windows下编写一个简单的自行车码表程序: 元器件 环境搭建 电路连接 一个简单的LED闪烁程序 自行车码表 准备工作之 元器件 准备工作之 电路连接 准备工作之 环境搭建 CubeMX配置 KeilST-LINK下载程序调试程序 下载并注册安装Keil Keil安装程序及注册机 用keil打开CubeMX生成的工程文件 build keilST-LINK下载和调试以blink为例 出错误了 解决方法一 解决方法二 连

异常控制流 第十周11.15~11.22

第八章 异常控制流 控制流:控制转移序列. 控制转移:从一条指令到下一条指令. 异常控制流:现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流. 作为程序员,理解ECF很重要,这有很多原因: 理解ECF将帮助你理解重要的系统概念.ECF是操作系统用来实现I/O.进程和虚拟存储器的基本机制,在能够真正理解这些重要概念之前,你必须须理解ECF. 理解ECF将帮助你理解应用程序是如何与操作系统交互的.应用程序通过一个叫做陷阱或者系统调用的ECF形式,向操作系统请求服务. 理解

20135306黄韧 第八章学习总结

第八章异常控制流 控制流:控制转移序列. 控制转移:从一条指令到下一条指令. 异常控制流:现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流. 8.1 异常 异常的剖析,如下图所示: 异常处理 异常表:当处理器检测到有事件发生时,它会通过跳转表,进行一个间接过程调用(异常),到异常处理程序. 异常号:系统中可能的某种类型的异常都分配了一个唯一的非负整数的异常号.异常号是到异常表中的索引. 异常类似于过程调用,但有一些重要的不同之处:(1)过程调用时,在跳转到处理程序之前

c语言基础知识要点

C语言程序的构成 与C++.Java相比,C语言其实很简单,但却非常重要.因为它是C++.Java的基础.不把C语言基础打扎实,很难成为程序员高手. 一.C语言的结构 先通过一个简单的例子,把C语言的基础打牢. /* clang01_1.c */ #include <stdio.h> int main(void) { printf("这是劝学网的C语言教程.\n"); return 0; } C语言的结构要掌握以下几点: C语言的注释是/* ··· */,而不是//···,

怎样从Cortex-m向STM32移植使用SPI接口协议

/***************************************************************************************************** * @brief: LDC1000应用程序 * _____________ _______________ * |PB4(SSI2CLK) ----> SCLK| * |PB5(SSI2FSS) ----> CSB | * |PB6(SSI2RX)    <----       SDO

如何从Cortex-m向STM32移植使用SPI接口协议

/***************************************************************************************************** * @brief: LDC1000应用程序 * _____________ _______________ * |PB4(SSI2CLK) ----> SCLK| * |PB5(SSI2FSS) ----> CSB | * |PB6(SSI2RX)    <----       SDO