source: PlatformSupport/CustomPeripherals/pcores/sw_intr_util_v1_00_a/src/sw_intr_util.h

Last change on this file was 6318, checked in by murphpo, 5 years ago

Added getters for enA/enB/maskA/maskB register fields

File size: 4.7 KB
Line 
1/*****************************************************************
2* File: sw_intr_util.h
3* Copyright (c) 2018 Mango Communications, all rights reseved
4*****************************************************************/
5
6#ifndef SW_INTR_UTIL_H
7#define SW_INTR_UTIL_H
8
9/***************************** Include Files *******************************/
10
11#include "xstatus.h"
12#include "xil_io.h"
13
14#define SW_INTR_UTIL_USER_SLV_SPACE_OFFSET (0x00000000)
15#define SW_INTR_UTIL_SLV_REG0_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000000)
16#define SW_INTR_UTIL_SLV_REG1_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000004)
17#define SW_INTR_UTIL_SLV_REG2_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000008)
18#define SW_INTR_UTIL_SLV_REG3_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x0000000C)
19#define SW_INTR_UTIL_SLV_REG4_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000010)
20#define SW_INTR_UTIL_SLV_REG5_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000014)
21#define SW_INTR_UTIL_SLV_REG6_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000018)
22#define SW_INTR_UTIL_SLV_REG7_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x0000001C)
23#define SW_INTR_UTIL_SLV_REG8_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000020)
24#define SW_INTR_UTIL_SLV_REG9_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000024)
25#define SW_INTR_UTIL_SLV_REG10_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000028)
26#define SW_INTR_UTIL_SLV_REG11_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x0000002C)
27#define SW_INTR_UTIL_SLV_REG12_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000030)
28#define SW_INTR_UTIL_SLV_REG13_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000034)
29#define SW_INTR_UTIL_SLV_REG14_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x00000038)
30#define SW_INTR_UTIL_SLV_REG15_OFFSET (SW_INTR_UTIL_USER_SLV_SPACE_OFFSET + 0x0000003C)
31
32/* Address map:
33    HDL is coded [MSB:LSB] = [31:0], per Xilinx's convention for AXI peripherals
34    regX[31] maps to 0x80000000 in C driver
35    regX[ 0] maps to 0x00000001 in C driver
36
370: RO/RW: Control/status register
38    [    0] = Enable (active high) for intrA output
39    [    1] = Enable (active high) for intrB output
40    [   28] = (RO) current intrA_out value
41    [   29] = (RO) current intrB_out value
42   
431: RW: Software state register 0
442: RW: Software state register 1
45
463: RW: Bitmask for sw state reg 0 asserting intrA
474: RW: Bitmask for sw state reg 1 asserting intrA
485: RW: Bitmask for sw state reg 0 asserting intrB
496: RW: Bitmask for sw state reg 1 asserting intrB
50
51Two interrupt outputs - intrA and intrB. These should be connected
52to an interrupt controller in the hardware design.
53
54Either software state register can assert either interrupt output.
55
56intrA is asserted when en_intrA & (((sw_state0 & sw_mask0_A) || (sw_state1 & sw_mask1_A)) != 0)
57intrB is asserted when en_intrB & (((sw_state0 & sw_mask0_B) || (sw_state1 & sw_mask1_B)) != 0)
58
59*/ 
60
61#define SW_INTR_CTRL_REG_EN_A   0x00000001
62#define SW_INTR_CTRL_REG_EN_B   0x00000002
63
64#define SW_INTR_CTRL_REG_INTR_A 0x10000000
65#define SW_INTR_CTRL_REG_INTR_B 0x20000000
66
67#define sw_intr_set_enA(ba, e) Xil_Out32((ba) + SW_INTR_UTIL_SLV_REG0_OFFSET, (Xil_In32((ba) + SW_INTR_UTIL_SLV_REG0_OFFSET) & ~SW_INTR_CTRL_REG_EN_A) | ((e) ? SW_INTR_CTRL_REG_EN_A : 0))
68#define sw_intr_set_enB(ba, e) Xil_Out32((ba) + SW_INTR_UTIL_SLV_REG0_OFFSET, (Xil_In32((ba) + SW_INTR_UTIL_SLV_REG0_OFFSET) & ~SW_INTR_CTRL_REG_EN_B) | ((e) ? SW_INTR_CTRL_REG_EN_B : 0))
69
70#define sw_intr_get_enA(ba) ((Xil_In32((ba) + SW_INTR_UTIL_SLV_REG0_OFFSET) & SW_INTR_CTRL_REG_EN_A) ? 1 : 0)
71#define sw_intr_get_enB(ba) ((Xil_In32((ba) + SW_INTR_UTIL_SLV_REG0_OFFSET) & SW_INTR_CTRL_REG_EN_B) ? 1 : 0)
72
73#define sw_intr_set_state0(ba, s) Xil_Out32((ba) + SW_INTR_UTIL_SLV_REG1_OFFSET, (s))
74#define sw_intr_set_state1(ba, s) Xil_Out32((ba) + SW_INTR_UTIL_SLV_REG2_OFFSET, (s))
75
76#define sw_intr_get_state0(ba) Xil_In32((ba) + SW_INTR_UTIL_SLV_REG1_OFFSET)
77#define sw_intr_get_state1(ba) Xil_In32((ba) + SW_INTR_UTIL_SLV_REG2_OFFSET)
78
79#define sw_intr_set_mask_A0(ba, m) Xil_Out32((ba) + SW_INTR_UTIL_SLV_REG3_OFFSET, (m))
80#define sw_intr_set_mask_A1(ba, m) Xil_Out32((ba) + SW_INTR_UTIL_SLV_REG4_OFFSET, (m))
81#define sw_intr_set_mask_B0(ba, m) Xil_Out32((ba) + SW_INTR_UTIL_SLV_REG5_OFFSET, (m))
82#define sw_intr_set_mask_B1(ba, m) Xil_Out32((ba) + SW_INTR_UTIL_SLV_REG6_OFFSET, (m))
83
84#define sw_intr_get_mask_A0(ba) Xil_In32((ba) + SW_INTR_UTIL_SLV_REG3_OFFSET)
85#define sw_intr_get_mask_A1(ba) Xil_In32((ba) + SW_INTR_UTIL_SLV_REG4_OFFSET)
86#define sw_intr_get_mask_B0(ba) Xil_In32((ba) + SW_INTR_UTIL_SLV_REG5_OFFSET)
87#define sw_intr_get_mask_B1(ba) Xil_In32((ba) + SW_INTR_UTIL_SLV_REG6_OFFSET)
88
89void sw_intr_init(u32 baseaddr);
90
91
92#endif /** SW_INTR_UTIL_H */
Note: See TracBrowser for help on using the repository browser.