資源簡介
Linux在增加了設備樹后,中斷驅動的編寫模式不一樣了,很多介紹Zynq中斷的文檔還是介紹以前的方法,中斷函數不能正常進入。一個源碼給Zynq新手學習、參考。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
?
MODULE_LICENSE(“GPL“);
#define?DEVICE_NAME?“axi_timer_0“
#define?XIL_AXI_TIMER_TCSR_OFFSET 0x0
#define?XIL_AXI_TIMER_TLR_OFFSET 0x4
#define?XIL_AXI_TIMER_TCR_OFFSET 0x8
#define?XIL_AXI_TIMER_CSR_INT_OCCURED_MASK 0x00000100
#define?XIL_AXI_TIMER_CSR_CASC_MASK 0x00000800
#define?XIL_AXI_TIMER_CSR_ENABLE_ALL_MASK 0x00000400
#define?XIL_AXI_TIMER_CSR_ENABLE_PWM_MASK 0x00000200
#define?XIL_AXI_TIMER_CSR_INT_OCCURED_MASK 0x00000100
#define?XIL_AXI_TIMER_CSR_ENABLE_TMR_MASK 0x00000080
#define?XIL_AXI_TIMER_CSR_ENABLE_INT_MASK 0x00000040
#define?XIL_AXI_TIMER_CSR_LOAD_MASK 0x00000020
#define?XIL_AXI_TIMER_CSR_AUTO_RELOAD_MASK 0x00000010
#define?XIL_AXI_TIMER_CSR_EXT_CAPTURE_MASK 0x00000008
#define?XIL_AXI_TIMER_CSR_EXT_GENERATE_MASK 0x00000004
#define?XIL_AXI_TIMER_CSR_DOWN_COUNT_MASK 0x00000002
#define?XIL_AXI_TIMER_CSR_CAPTURE_MODE_MASK 0x00000001
#define?TIMER_CNT 0xE8000000
static?struct?platform_device?*pdev;
?
void?*dev_virtaddr;
static?int?int_cnt;
static?int?xilaxitimer_open(struct?inode?*?inode??struct?file?*?filp)
{
??return?0;
}
static?int?xilaxitimer_release(struct?inode?*?inode?struct?file?*filp)
{
??return?0;
}
static?int?xilaxitimer_read(struct?file?*filp?char?*buffer?size_t?length?loff_t?*?offset)
{
??
??return?0;
}
static?const?struct?file_operations?xilaxitimer_fops?=
{
??.owner?=?THIS_MODULE
??.open?=?xilaxitimer_open
??.release?=?xilaxitimer_release
??.read?=?xilaxitimer_read
};
static?struct?miscdevice?xilaxitimer_dev?=
{
??.minor?=?MISC_DYNAMIC_MINOR
??.name?=?DEVICE_NAME
??.fops?=?&xilaxitimer_fops
};
static?irqreturn_t?xilaxitimer_isr(int?irqvoid*dev_id)
{??????
??unsigned?int?data;
??
??/*?
???*?Check?Timer?Counter?Value
???*/
??data?=?ioread32(dev_virtaddr?+?XIL_AXI_TIMER_TCR_OFFSET);
??printk(“xilaxitimer_isr:?Interrupt?Occurred?!?Timer?Count?=?0x%08X\n“data);
??
??/*?
???*?Clear?Interrupt
???*/
??data?=?ioread32(dev_virtaddr?+?XIL_AXI_TIMER_TCSR_OFFSET);
??iowrite32(data?|?XIL_AXI_TIMER_CSR_INT_OCCURED_MASK
????dev_virtaddr?+?XIL_AXI_TIMER_TCSR_OFFSET);
??
??/*?
???*?Disable?Timer?after?100?Interrupts
???*/
??int_cnt++;
??
??if?(int_cnt>=100)
????{
??????printk(“xilaxitimer_isr:?100?interrupts?have?been?occurred.?Disabling?timer“);
??????data?=?ioread32(dev_virtaddr?+?XIL_AXI_TIMER_TCSR_OFFSET);
??????iowrite32(data?&?~(XIL_AXI_TIMER_CSR_ENABLE_TMR_MASK)
dev_virtaddr?+?XIL_AXI_TIMER_TCSR_OFFSET);
????}
?
??return?IRQ_HANDLED;
}
static?const?struct?of_device_id?xilaxitimer_of_match[];
static?int?xilaxitimer_probe(struct?platform_device?*pdev)
{
????struct?devi
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????432??2018-10-09?15:42??Linux4.0版??zynq?Axitimer自編驅動源碼\Makefile
?????文件???????5370??2018-10-16?13:23??Linux4.0版??zynq?Axitimer自編驅動源碼\xilaxitimer.c
?????目錄??????????0??2018-10-16?13:52??Linux4.0版??zynq?Axitimer自編驅動源碼
-----------?---------??----------?-----??----
?????????????????5802????????????????????3
- 上一篇:開通局域網共享(訪問本機無需驗證即可進入)
- 下一篇:odis工程師激活原廠導航
評論
共有 條評論