開啟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);