英雄联盟网站模版,国家防疫政策最新调整,怎么打开到wordpress,成品片a免费入口REVIEW 关于ZYNQ中断#xff1a; ZYNQ PS_GPIO中断-CSDN博客 ZYNQ AXI_GPIO_INT-CSDN博客 ZYNQ 定时器中断-CSDN博客 在一些应用场景中#xff0c;可能需要使用到多个定时器#xff0c;除了选择使用 PS 侧其他定时器外#xff0c;也可以使用 PL 侧逻辑定时器。 1. 今日摸鱼…REVIEW 关于ZYNQ中断 ZYNQ PS_GPIO中断-CSDN博客 ZYNQ AXI_GPIO_INT-CSDN博客 ZYNQ 定时器中断-CSDN博客 在一些应用场景中可能需要使用到多个定时器除了选择使用 PS 侧其他定时器外也可以使用 PL 侧逻辑定时器。
1. 今日摸鱼任务 创建并使用AXI_TIMER 定时器11s MIO7(PS_LED)闪烁 定时器20.5s EMIO54(PL_LED)闪烁 小梅哥教材 03_【裸机教程】基于C编程的Zynq裸机程序设计与应用教程v2.4.5.pdf 第七章 基于AXI Timer的定时器中断实验没用串口
2. AXI_Timer 核 AXI Timer IP 核全称为 AXI Timer/Counter 是一个 32/64 位定时器模块可连接到 AXI4-Lite 接口。通过计数值以及接入 axi_timer 的计数时钟周期可以在 PS 内取得比较精确的计时。 单个32位级联64位 结构框图如下图 AXI4-Lite Interface AXI4 Lite 接口模块实现 AXI4 Lite 从接口用于访问内存映射定时器寄存器。 Timer Register 为每个定时器 / 计数器实现一组 32 位寄存器。 这组寄存器包含加载寄存器、定时器/计数器寄存器和控制/状态寄存器。 32-bit Counter 定时器 / 计数器模块有两个 32 位计数器。 每个计数器可配置为递增/递减计数并可使用加载寄存器中的值加载。 Interrupt Counter 中断控制模块根据工作模式生成单个中断。 Pulse Width Modulation (PWM) PWM 模块生成具有指定频率和占空比的脉冲信号 PWM0 。 使用定时器 0 用于 PWM0 周期定时器 1 用于PWM0 输出宽度。
3. AXI_Timer 寄存器 3.1 寄存器一览 3.2 控制/状态寄存器 0 (TCSR0) 31-12 保留 11 CASC 使能定时器的级联模式 1启用级联模式做低32位。 10 ENALL 使能所有定时器 1 写入该位将设置 ENALL、ENT0(TCSR0)和 ENT1(TCSR1)。 0 写入此寄存器将清除 ENALL但对 ENT0 和 ENT1 没有影响。 9 PWMA0 使能定时器 0 的脉宽调制 PWM 模式MDT0(TCSR0)和 MDT1(TCSR1)必须为 0。 8 T0INT 定时器 0 中断 捕获模式且定时器已使能则此位表示已发生捕获。 生成模式则该位表示计数器已翻转。必须通过写入1来清除。 7 ENT0 使能定时器 0 0禁用定时器计数器停止 1使能定时器计数器运行 6 ENIT0 使能定时器 0 的中断 使能此定时器中断信号的断言。对 TCSR0 中的中断标志 T0INT没有影响。 0禁用中断信号 1使能中断信号 5 LOAD0 加载定时器 0 1使用 TLR0 中的值加载计时器 与 ENT0 位一起清除 4 ARHT0 自动重新加载/保持定时器 0 生成模式时该位确定计数器是重新加载生成值并继续运行还是保持在终止值。 在捕获模式下该位确定新的捕获触发器覆盖或保留先前捕获的值。 0保持计数器或捕获值。在提供外部捕获之前必须读取TLR0。 1重新加载生成值或覆盖捕获值。 3 CAPT0 使能外部捕获触发器定时器 2 GENT0 使能外部生成信号定时器 0 1 UDT0 递增/递减计数定时器 0递增 1递减 0 MDT0 定时器 0 模式 0生成模式 1捕获模式 3.3 加载寄存器TLR0 和 TLR1 32b Timer/Counter Load Register 计数器宽度配置为小于 32 位时加载寄存器值在 TLR0 和 TLR1 中右对齐。 最低有效计数器位始终映射到加载寄存器的 bit0 。 级联模式下 TLR0 具有生成值的最低有效 32 位而 TLR1 在生成模式下应具有生成值的最高有效位。 3.4 定时器/计数器寄存器TCR0 和 TCR132b Timer/Counter Register 计数器宽度配置为小于 32 位时计数值在 TCR0 和 TCR1 中右对齐。 在级联模式下 TCR0 具有 64 位计数器中最低有效位的 32 位 TCR1 具有最高有效位。 3.5 控制/状态寄存器 1TCSR1 与TCSR0相比减少了第11位 其他功能与其对应
4. 工作模式 3.1 生成模式 在生成模式下会将加载寄存器(Load Register)中的值加载到计数器中。当计数器使能时根据定时器控制状态寄存器TCSR 中向上 / 向下UDT位递增/减计数。在计数器进位转换时计数器停止或重新加载生成值并在达到超时值后按照 TCSR 中自动重新加载 /保持 ARHT位的选择继续计数。定时器中断状态TINT 如果使能则 GenerateOut 信号在一个时钟周期内被驱动为 1 。 如果使能当达到超时值时定时器的中断信号被驱动为1。通过向定时器中断寄存器写入 1 来清除中断。使用此模式生成具有指定间隔的重复中断或外部信号。 3.2 捕获模式 在捕获模式下当外部捕获信号时计数器的值存储在加载寄存器中。检测到捕获事件时也会在 TCSR 中设置 TINT 位。根据 TCSR 中 UDT 位的选 择计数器可配置为该模式的递增或递减计数器。自动重新加载 / 保持ARHT位控制在清除前一个 TINT标志之前是否用新的捕捉值覆盖捕捉值。使用此模 式对外部事件进行时间标记同时生成中断。 3.3 脉宽调制模式 在脉宽调制PWM 模式下两个定时器 /计数器成对使用以产生具有指定频率和占空因数的输出信号 PWM0 。定时器 0 设置周期定时器 1 设置PWM0 输出的高电平时间。 3.4 级联模式 在级联模式下两个定时器/ 计数器级联为单个 64 定时器 /计数器。级联计数器可以在生成和捕获模式下工作。 TCSR0 用作级联计数器的控制和状态寄存器。在此模式下 TCSR1 被忽略。 当需超过 32 位宽的定时器 /计数器时使用此模式。级联操作需要将定时器 0 和定时器 1 成对使用。定时器 1 的计数事件是定时器 0 从全 1 翻转到全 0反之亦然。
5. Block Design
AXI_TIMER保持默认设置
6. SDK
PS_GPIO、 SCU_GICZYNQ PS_GPIO中断-CSDN博客AXI_TIMER.h #ifndef AXI_Timer_AXI_Timer_H_ #define AXI_Timer_AXI_Timer_H_ #include xscutimer.h #include xtmrctr.h #define TMRCTR_DEVICE_ID XPAR_TMRCTR_0_DEVICE_ID #define TMRCTR_INTERRUPT_ID XPAR_FABRIC_TMRCTR_0_VEC_ID #define INTC_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID #define TIMER_CNTR_0 0 #define TIMER_CNTR_1 1#define TIMER0_FREQ XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ //(50000000U)#define RELOAD_VAL_US(n) ((TIMER0_FREQ/1000000)*n-1) //计算n(us)的装载值 #define RELOAD_VAL_MS(n) ((TIMER0_FREQ/1000)*n-1) //计算n(ms)的装载值 #define RELOAD_VAL_S(n) ((TIMER0_FREQ)*n-1) //计算n(s)的装载值 //这里计算值需选择 XTC_DOWN_COUNT_OPTION 配置为向下计数默认为向上计数 extern XTmrCtr AXI_Timer0; //定时器实例extern volatile uint16_t Cnt0;extern volatile uint16_t Cnt1;extern volatile uint16_t Cnt0_Flag;extern volatile uint16_t Cnt1_Flag; void AXI_Timer_Init(XTmrCtr *TmrCtrInstPtr,uint16_t DevId); void AXI_Timer_Int_Init(XTmrCtr *TmrCtrInstPtr,uint16_t IntrId,XTmrCtr_Handler Timer_Handler); void AXI_Timer_SetOption(XTmrCtr *TmrCtrInstPtr,uint8_t TmrCtrNum,uint32_t Mode, uint32_t Reload_Val); void AXI_Timer0_IRQ_Handler(void *CallBackRef, u8 TmrCtrNum); #endif /* AXI_Timer_AXI_Timer_H_ */ AXI_TIMER.c /** ***************************************************************************** * AXI TIMER IP核的定时器中断相关应用库 ***************************************************************************** * * File : AXI_Timer.c * By : Sun * Version: V1.0 * Date : 2022 / 05 / 19 * Shop : https://xiaomeige.taobao.com/ * ***************************************************************************** **/ #include AXI_TIMER.h #includeSCU_GIC.h XTmrCtr AXI_Timer0; //定时器实例 /** ***************************************************** * brief 初始化AXI_Timer设备 * param TmrCtrInstPtr Timer对象指针 * param DevId Timer设备ID * usage //定时器初始化 * AXI_Timer_Init(Timer0,TMRCTR_DEVICE_ID); ***************************************************** **/ void AXI_Timer_Init(XTmrCtr *TmrCtrInstPtr,uint16_t DevId) { XTmrCtr_Initialize(TmrCtrInstPtr, DevId); } /** ***************************************************** * brief 初始化AXI_Timer中断 * param TmrCtrInstPtr Timer对象指针 * param IntrId 中断ID * param Timer_Handler Timer的中断服务函数 * usage //定时器中断初始化,中断服务函数为AXI_Timer0_Handler * AXI_Timer_Int_Init(Timer0,TMRCTR_INTERRUPT_ID,AXI_Timer0_Handler); ***************************************************** **/ void AXI_Timer_Int_Init(XTmrCtr *TmrCtrInstPtr,uint16_t IntrId,XTmrCtr_Handler Timer_Handler) { Set_ScuGic_Link(IntrId, 0xA8, HIGH_Level_Sensitive, XTmrCtr_InterruptHandler, TmrCtrInstPtr); XTmrCtr_SetHandler(TmrCtrInstPtr, Timer_Handler,TmrCtrInstPtr); } /** ***************************************************** * brief 设置AXI_Timer配置 * param TmrCtrInstPtr Timer对象指针 * param TmrCtrNum AXI_Timer计数器0为计数器01为计数器1 * param Mode Timer模式配置 * 模式有以下几种 XTC_CASCADE_MODE_OPTION 启用级联模式仅适用于TCSRO * XTC_ENABLE_ALL_OPTION 一次性启用所有定时计数器 * XTC_DOWN_COUNT_OPTION 配置为向下计数默认为向上计数 * XTC_CAPTURE_MODE_OPTION 配置为输入捕获模式默认为比较模式 * XTC_INT_MODE_OPTION 开定时器中断向下计数到0或向上计数溢出时触发 * XTC_AUTO_RELOAD_OPTION 开启自动重装载 * XTC_EXT_COMPARE_OPTION 启用外部比较输出信号 * param Reload_Val 装载值每个CLK它会向上或下计数1这里的CLK由AXI_TIMER IP核外部供给 * usage //定时器计数器0配置为中断模式自动重装载且向下计数 * AXI_Timer_SetOption(Timer0,TIMER_CNTR_0, XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION | XTC_DOWN_COUNT_OPTION,RELOAD_VALUE); ***************************************************** **/ void AXI_Timer_SetOption(XTmrCtr *TmrCtrInstPtr,uint8_t TmrCtrNum,uint32_t Mode,uint32_t Reload_Val) { XTmrCtr_SetOptions(TmrCtrInstPtr, TmrCtrNum, Mode); //设置重装载值这个值在计数器启动时被载入 XTmrCtr_SetResetValue(TmrCtrInstPtr, TmrCtrNum, Reload_Val); //启动计数器 XTmrCtr_Start(TmrCtrInstPtr, TmrCtrNum); } void AXI_Timer0_IRQ_Handler(void *CallBackRef, u8 TmrCtrNum) { //Timer0 的计数器 0 中断 if (TmrCtrNum TIMER_CNTR_0) { /* ↓↓↓用户处理↓↓↓ */ Cnt0_Flag 1; Cnt0; /* ↑↑↑结束处理↑↑↑ */ } //Timer0 的计数器 1 中断 if(TmrCtrNum TIMER_CNTR_1) { /* ↓↓↓用户处理↓↓↓ */ Cnt1_Flag 1; Cnt1; /* ↑↑↑结束处理↑↑↑ */ } } main.c //系统头文件 #include stdio.h #include stdint.h //Xilinx头文件 #include xgpiops.h #include xparameters.h #include AXI_TIMER.h #include PS_GPIO.h #include SCU_GIC.h volatile uint16_t Cnt0 0;volatile uint16_t Cnt1 0;volatile uint16_t Cnt0_Flag 0;volatile uint16_t Cnt1_Flag 0; #define INPUT 1 #define OUTPUT 0 #define PL_LED (540) #define PS_LED 7 int main(void) { //初始化通用中断控制器 ScuGic_Init(); //定时器初始化 AXI_Timer_Init(AXI_Timer0,XPAR_TMRCTR_0_DEVICE_ID); //定时器中断初始化 AXI_Timer_Int_Init(AXI_Timer0,TMRCTR_INTERRUPT_ID,AXI_Timer0_IRQ_Handler); //定时器计数器 0 配置为中断模式自动重装载且向下计数定时 1s AXI_Timer_SetOption(AXI_Timer0,TIMER_CNTR_0, XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION | XTC_DOWN_COUNT_OPTION,RELOAD_VAL_S(1)); //定时器计数器 1 配置为中断模式自动重装载且向下计数定时 0.5s AXI_Timer_SetOption(AXI_Timer0,TIMER_CNTR_1, XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION | XTC_DOWN_COUNT_OPTION,RELOAD_VAL_MS(500)); //初始化 PS 端 GPIO PS_GPIO_Init(); //设置 PS_LED(MIO7)方向为输出 PS_GPIO_SetMode(PS_LED, OUTPUT, 0); //设置 PL_LED(T14)方向为输出 PS_GPIO_SetMode(PL_LED, OUTPUT, 0); while(1) { //判断计数器 0 的计数标志 if(Cnt0_Flag) { PS_GPIO_SetPort(PS_LED, (Cnt0%20)?1:0); Cnt0_Flag 0; //清除标志 } //判断计数器 1 的计数标志 if(Cnt1_Flag) { PS_GPIO_SetPort(PL_LED, (Cnt1%20)?1:0); Cnt1_Flag 0; //清除标志 } } return 0; }
每次检测到定时标志LED翻转
摸鱼结束~ 文章转载自: http://www.morning.sgnxl.cn.gov.cn.sgnxl.cn http://www.morning.wcyr.cn.gov.cn.wcyr.cn http://www.morning.slfkt.cn.gov.cn.slfkt.cn http://www.morning.fcxt.cn.gov.cn.fcxt.cn http://www.morning.bnfrj.cn.gov.cn.bnfrj.cn http://www.morning.ysmw.cn.gov.cn.ysmw.cn http://www.morning.mqfhy.cn.gov.cn.mqfhy.cn http://www.morning.njnqn.cn.gov.cn.njnqn.cn http://www.morning.qwhbk.cn.gov.cn.qwhbk.cn http://www.morning.xcfmh.cn.gov.cn.xcfmh.cn http://www.morning.nkjxn.cn.gov.cn.nkjxn.cn http://www.morning.knpbr.cn.gov.cn.knpbr.cn http://www.morning.kfwqd.cn.gov.cn.kfwqd.cn http://www.morning.knwry.cn.gov.cn.knwry.cn http://www.morning.sdktr.com.gov.cn.sdktr.com http://www.morning.swkzr.cn.gov.cn.swkzr.cn http://www.morning.thnpj.cn.gov.cn.thnpj.cn http://www.morning.ljjmr.cn.gov.cn.ljjmr.cn http://www.morning.qsmmq.cn.gov.cn.qsmmq.cn http://www.morning.cspwj.cn.gov.cn.cspwj.cn http://www.morning.fylsz.cn.gov.cn.fylsz.cn http://www.morning.btgxf.cn.gov.cn.btgxf.cn http://www.morning.msfqt.cn.gov.cn.msfqt.cn http://www.morning.kgqpx.cn.gov.cn.kgqpx.cn http://www.morning.rfyff.cn.gov.cn.rfyff.cn http://www.morning.xkzmz.cn.gov.cn.xkzmz.cn http://www.morning.dlgjdg.cn.gov.cn.dlgjdg.cn http://www.morning.zhiheliuxue.com.gov.cn.zhiheliuxue.com http://www.morning.nfgbf.cn.gov.cn.nfgbf.cn http://www.morning.snnb.cn.gov.cn.snnb.cn http://www.morning.xsszn.cn.gov.cn.xsszn.cn http://www.morning.clybn.cn.gov.cn.clybn.cn http://www.morning.qmqgx.cn.gov.cn.qmqgx.cn http://www.morning.mkyny.cn.gov.cn.mkyny.cn http://www.morning.nynlf.cn.gov.cn.nynlf.cn http://www.morning.cykqb.cn.gov.cn.cykqb.cn http://www.morning.rlwcs.cn.gov.cn.rlwcs.cn http://www.morning.cftkz.cn.gov.cn.cftkz.cn http://www.morning.bzkgn.cn.gov.cn.bzkgn.cn http://www.morning.xcjwm.cn.gov.cn.xcjwm.cn http://www.morning.psxwc.cn.gov.cn.psxwc.cn http://www.morning.elsemon.com.gov.cn.elsemon.com http://www.morning.nrbqf.cn.gov.cn.nrbqf.cn http://www.morning.zdnrb.cn.gov.cn.zdnrb.cn http://www.morning.tyhfz.cn.gov.cn.tyhfz.cn http://www.morning.lmjtp.cn.gov.cn.lmjtp.cn http://www.morning.eronghe.com.gov.cn.eronghe.com http://www.morning.yuminfo.com.gov.cn.yuminfo.com http://www.morning.qggxt.cn.gov.cn.qggxt.cn http://www.morning.lkrmp.cn.gov.cn.lkrmp.cn http://www.morning.lmhh.cn.gov.cn.lmhh.cn http://www.morning.zwndt.cn.gov.cn.zwndt.cn http://www.morning.kfyjh.cn.gov.cn.kfyjh.cn http://www.morning.rfpq.cn.gov.cn.rfpq.cn http://www.morning.wptdg.cn.gov.cn.wptdg.cn http://www.morning.mmjqk.cn.gov.cn.mmjqk.cn http://www.morning.rnngz.cn.gov.cn.rnngz.cn http://www.morning.nflpk.cn.gov.cn.nflpk.cn http://www.morning.btmwd.cn.gov.cn.btmwd.cn http://www.morning.ppllj.cn.gov.cn.ppllj.cn http://www.morning.rldph.cn.gov.cn.rldph.cn http://www.morning.mqfkd.cn.gov.cn.mqfkd.cn http://www.morning.zpqk.cn.gov.cn.zpqk.cn http://www.morning.fqyxb.cn.gov.cn.fqyxb.cn http://www.morning.pzbjy.cn.gov.cn.pzbjy.cn http://www.morning.wjrq.cn.gov.cn.wjrq.cn http://www.morning.lhytw.cn.gov.cn.lhytw.cn http://www.morning.gnwpg.cn.gov.cn.gnwpg.cn http://www.morning.mdmxf.cn.gov.cn.mdmxf.cn http://www.morning.kwjyt.cn.gov.cn.kwjyt.cn http://www.morning.jpdbj.cn.gov.cn.jpdbj.cn http://www.morning.crxdn.cn.gov.cn.crxdn.cn http://www.morning.krnzm.cn.gov.cn.krnzm.cn http://www.morning.qtnmp.cn.gov.cn.qtnmp.cn http://www.morning.lgnbr.cn.gov.cn.lgnbr.cn http://www.morning.bzsqr.cn.gov.cn.bzsqr.cn http://www.morning.mrccd.cn.gov.cn.mrccd.cn http://www.morning.mfrb.cn.gov.cn.mfrb.cn http://www.morning.rzjfn.cn.gov.cn.rzjfn.cn http://www.morning.gfkb.cn.gov.cn.gfkb.cn