开启TTC定时器,不同于7000系列的私有定时器
此处设置LPD_LSBUS频率
TTC频率取决于LPD_LSBUS
可前往指定位置查看参数
不使能填写对应宏
可前往指定位置查看参数
main.c
#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xil_printf.h"
#include "xttcps.h"
#include "main.h"
#include "gpio.h"
#include "Ttc.h"
#include "intr.h"//定义变量
XGpioPs Gpio; //GPIO 驱动实例
XScuGic Intc; //GIC 驱动实例
XTtcPs TTC; //定时器 驱动实例int main(){xil_printf("MIO_TTC_INT\r\n");mio_config(&Gpio);TTC_config(&TTC);TTC_intr_config(&Intc,&TTC);XTtcPs_Start(&TTC);while(1){}return 0;
}
main.h
#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xil_printf.h"
#include "xttcps.h"#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID //MIO器件ID
#define MIO_LED0 0
#define MIO_LED1 7
#define MIO_LED2 8
#define MIO_KEY0 12
#define MIO_KEY1 11
#define TTC_DEVICE_ID XPAR_XTTCPS_0_DEVICE_ID //TTC定时器器件ID
#define TTC_INTR_ID XPAR_XTTCPS_0_INTR //TTC定时器中断ID
#define INTC_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID //中断控制器器件ID#define TIMER_LOAD_VALUE 20000000 - 1 //TTC定时器装载值 100Mhz->0.2ms = 20_000_000
gpio.c
#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xil_printf.h"
#include "gpio.h"
#include "main.h"void mio_config(XGpioPs *gpio_ptr){////////////配置GPIO输入输出////////////XGpioPs_Config *ConfigPtr;//根据器件ID查找GPIO配置信息ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);//对GPIO驱动初始化XGpioPs_CfgInitialize(gpio_ptr, ConfigPtr,ConfigPtr->BaseAddr);//设置引脚方向 0:输入 1输出XGpioPs_SetDirectionPin(gpio_ptr, MIO_LED0, 1);XGpioPs_SetDirectionPin(gpio_ptr, MIO_LED1, 1);//设置输出使能 0: 不使能 1: 使能XGpioPs_SetOutputEnablePin(gpio_ptr, MIO_LED0, 1);XGpioPs_SetOutputEnablePin(gpio_ptr, MIO_LED1, 1);//设置初始状态XGpioPs_WritePin(gpio_ptr, MIO_LED0, 0x0);XGpioPs_WritePin(gpio_ptr, MIO_LED1, 0x0);
}
gpio.h
#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xil_printf.h"
#include "main.h"extern XGpioPs Gpio; //GPIO 驱动实例#define led0(a) XGpioPs_WritePin(&Gpio,MIO_LED0,a);void mio_config(XGpioPs *gpio_ptr);
intr.c
#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xil_printf.h"
#include "xttcps.h"
#include "main.h"
#include "intr.h"
#include "xttcps_hw.h"u8 led_state ;void TTC_intr_config(XScuGic *intr_ptr,XTtcPs *TTC_ptr){//GIC配置信息驱动实例XScuGic_Config *IntcConfig;//根据中断控制器的器件ID查找配置信息IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);//根据查找到的配置信息初始化中断控制器XScuGic_CfgInitialize(intr_ptr, IntcConfig,IntcConfig->CpuBaseAddress);//关联GPIO中断处理程序XScuGic_Connect(intr_ptr, TTC_INTR_ID,(Xil_ExceptionHandler)IntrHandler,(void *)TTC_ptr);//使能GIC的GPIO中断XScuGic_Enable(intr_ptr, TTC_INTR_ID);//使能TTC定时器中断XTtcPs_EnableInterrupts(TTC_ptr,XTTCPS_IXR_INTERVAL_MASK);//针对异常初始化Xil_ExceptionInit();//注册中断请求异常处理程序Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,intr_ptr);//使能异常处理Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ);
}void IntrHandler(void *CallBackRef){XTtcPs *TTC_ptr = (XTtcPs *) CallBackRef;led_state = !led_state;xil_printf("led_state = %d\r\n",led_state);XTtcPs_ClearInterruptStatus(TTC_ptr,XTTCPS_IXR_INTERVAL_MASK);
}
intr.h
#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xil_printf.h"
#include "xttcps.h"
#include "main.h"void TTC_intr_config(XScuGic *intr_ptr,XTtcPs *TTC_ptr);
void IntrHandler(void *CallBackRef);
Ttc.c
#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xil_printf.h"
#include "xttcps.h"
#include "main.h"
#include "Ttc.h"void TTC_config(XTtcPs *TTC_ptr){XTtcPs_Config *ConfigPtr;//根据器件ID查找GPIO配置信息ConfigPtr = XTtcPs_LookupConfig(TTC_DEVICE_ID);//对定时器驱动初始化XTtcPs_CfgInitialize(TTC_ptr, ConfigPtr,ConfigPtr->BaseAddress);//配置定时器参数//配置工作模式 定时模式XTtcPs_SetOptions(TTC_ptr, XTTCPS_OPTION_INTERVAL_MODE);//预分频 不使能XTtcPs_SetPrescaler(TTC_ptr,XTTCPS_CLK_CNTRL_PS_DISABLE);//设置间隔 定时值XTtcPs_SetInterval(TTC_ptr,TIMER_LOAD_VALUE);//开启定时器 ->配置完中断后//XTtcPs_Start(TTC_ptr);
}
Ttc.h
#include <stdio.h>
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xil_printf.h"
#include "xttcps.h"
#include "main.h"void TTC_config(XTtcPs *TTC_ptr);