 |
RTEMS 7.0-rc1
|
Loading...
Searching...
No Matches
1#ifndef __TASK_API_BESTCOMM_CNTRL_H
2#define __TASK_API_BESTCOMM_CNTRL_H 1
33#define SDMA_INT_BIT_DBG 31
34#define SDMA_INT_BIT_TEA 28
35#define SDMA_INT_BIT_TEA_TASK 24
36#define SDMA_INT_BIT_IMPL 0x9000FFFF
38#define SDMA_PTDCTRL_BIT_TEA 14
40#define SDMA_TCR_BIT_AUTO 15
41#define SDMA_TCR_BIT_HOLD 5
43#define SDMA_STAT_BIT_ALARM 17
44#define SDMA_FIFO_ALARM_MASK 0x0020000
46#define SDMA_DRD_BIT_TFD 27
47#define SDMA_DRD_BIT_INT 26
48#define SDMA_DRD_BIT_INIT 21
49#define SDMA_DRD_MASK_FLAGS 0x0C000000
50#define SDMA_DRD_MASK_LENGTH 0x03FFFFFF
51#define SDMA_BD_BIT_READY 30
53 #define SDMA_BD_MASK_READY constant(1<<SDMA_BD_BIT_READY)
55 #define SDMA_BD_MASK_READY (1<<SDMA_BD_BIT_READY)
57#define SDMA_BD_MASK_SIGN 0x7FFFFFFF
59#define SDMA_PRAGMA_BIT_RSV 7
60#define SDMA_PRAGMA_BIT_PRECISE_INC 6
61#define SDMA_PRAGMA_BIT_RST_ERROR_NO 5
62#define SDMA_PRAGMA_BIT_PACK 4
63#define SDMA_PRAGMA_BIT_INTEGER 3
64#define SDMA_PRAGMA_BIT_SPECREAD 2
65#define SDMA_PRAGMA_BIT_CW 1
66#define SDMA_PRAGMA_BIT_RL 0
68#define SDMA_TASK_ENTRY_BYTES 32
69#define SDMA_TASK_GROUP_NUM 16
70#define SDMA_TASK_GROUP_BYTES (SDMA_TASK_ENTRY_BYTES*SDMA_TASK_GROUP_NUM)
76#define SDMA_TASKNUM_EXT(OldTaskNum) (OldTaskNum%16)
78#define SDMA_TASKBAR_CHANGE(sdma, OldTaskNum) { \
79 sdma->taskBar += (((int)(OldTaskNum/SDMA_TASK_GROUP_NUM))*SDMA_TASK_GROUP_BYTES); \
82#define SDMA_TASKBAR_RESTORE(sdma, OldTaskNum) { \
83 sdma->taskBar -= (((int)(OldTaskNum/SDMA_TASK_GROUP_NUM))*SDMA_TASK_GROUP_BYTES); \
90#define SDMA_TASK_CFG(RegAddr, TaskNum, AutoStart, AutoStartNum) { \
91 *(((volatile uint16 *)RegAddr)+TaskNum) = (uint16)(0x0000 | \
92 ((AutoStart!=0)<<7) | \
93 (AutoStartNum&0xF) ); \
96#define SDMA_TASK_AUTO_START(RegAddr, TaskNum, AutoStart, AutoStartNum) { \
97 *(((volatile uint16 *)RegAddr)+TaskNum) = (uint16)((*(((volatile uint16 *)RegAddr)+TaskNum) & \
98 (uint16) 0xff30) | ((uint16)(0x0000 | \
99 ((AutoStart!=0)<<7) | \
100 (AutoStartNum&0xF)) )); \
103#define SDMA_TASK_ENABLE(RegAddr, TaskNum) { \
104 *(((volatile uint16 *)RegAddr)+TaskNum) |= (uint16)0x8000; \
107#define SDMA_TASK_DISABLE(RegAddr, TaskNum) { \
108 *(((volatile uint16 *)RegAddr)+TaskNum) &= ~(uint16)0x8000; \
111#define SDMA_TASK_STATUS(RegAddr, TaskNum) \
112 *(((volatile uint16 *)RegAddr)+TaskNum)
118#define SDMA_INT_ENABLE(RegAddr, Bit) \
120 rtems_interrupt_level level; \
121 volatile uint32 *reg = (volatile uint32 *) RegAddr; \
122 rtems_interrupt_disable(level); \
123 *reg &= ~((uint32) (1 << Bit)); \
124 rtems_interrupt_enable(level); \
127#define SDMA_INT_DISABLE(RegAddr, Bit) \
129 rtems_interrupt_level level; \
130 volatile uint32 *reg = (volatile uint32 *) RegAddr; \
131 rtems_interrupt_disable(level); \
132 *reg |= ((uint32)(1 << Bit)); \
133 rtems_interrupt_enable(level); \
136#define SDMA_INT_SOURCE(RegPend, RegMask) \
137 (*((volatile uint32 *)(RegPend)) & (~*((volatile uint32 *)(RegMask))) & (uint32)SDMA_INT_BIT_IMPL)
139#define SDMA_INT_PENDING(RegPend, RegMask) \
140 (*((volatile uint32 *)(RegPend)) & (~*((volatile uint32 *)(RegMask))))
142#define SDMA_INT_TEST(IntSource, Bit) \
143 (((uint32)IntSource) & ((uint32)(1<<Bit)))
151#define SDMA_CLEAR_IEVENT(RegAddr, Bit) { \
152 volatile uint32 *reg = (volatile uint32 *) RegAddr; \
153 *reg = ((uint32)(1<<Bit)); \
156#define SDMA_GET_PENDINGBIT(sdma, Bit) \
157 (sdma->IntPend & (uint32)(1<<Bit))
159#define SDMA_GET_MASKBIT(sdma, Bit) \
160 (sdma->IntMask & (uint32)(1<<Bit))
171#define SDMA_TEA_ENABLE(sdma) { \
172 SDMA_INT_ENABLE(sdma, SDMA_INT_BIT_TEA); \
173 sdma->PtdCntrl &= ~((uint32)(1<<SDMA_PTDCTRL_BIT_TEA)); \
177#define SDMA_TEA_DISABLE(sdma) { \
178 SDMA_INT_DISABLE(sdma, SDMA_INT_BIT_TEA); \
179 sdma->PtdCntrl |= ((uint32)(1<<SDMA_PTDCTRL_BIT_TEA)); \
183#define SDMA_TEA_CLEAR(sdma) { \
184 sdma->IntPend = ((uint32)(0x1F<<SDMA_INT_BIT_TEA_TASK)); \
188#define SDMA_TEA_SOURCE(RegPend) \
189 (uint32)(((*(volatile uint32 *)RegPend)>>SDMA_INT_BIT_TEA_TASK) & 0xF)
197#define SDMA_DBG_ENABLE(sdma) { \
198 SDMA_INT_ENABLE(sdma, SDMA_INT_BIT_DBG); \
201#define SDMA_DBG_DISABLE(sdma) { \
202 SDMA_INT_DISABLE(sdma, SDMA_INT_BIT_DBG); \
206#define SDMA_DBG_CLEAR(sdma) { \
207 SDMA_CLEAR_IEVENT(sdma, SDMA_INT_BIT_DBG); \
210#define SDMA_DBG_MDE(dst, sdma, addr) { \
211 sdma->MDEDebug = addr; \
212 dst = sdma->MDEDebug; \
215#define SDMA_DBG_ADS(dst, sdma, addr) { \
216 sdma->ADSDebug = addr; \
217 dst = sdma->ADSDebug; \
220#define SDMA_DBG_PTD(dst, sdma, addr) { \
221 sdma->PTDDebug = addr; \
222 dst = sdma->PTDDebug; \
234#define SDMA_SET_SIZE(RegAddr, TaskNum, SrcSize, DstSize) \
235 *(((volatile uint8 *)RegAddr)+((uint32)(TaskNum/2))) = \
236 (uint8)((*(((volatile uint8 *)RegAddr)+((uint32)(TaskNum/2))) & \
237 ((TaskNum%2) ? 0xf0 : 0x0f)) | \
238 ((uint8)(((SrcSize & 0x3)<<2) | \
239 ( DstSize & 0x3 ) ) <<(4*((int)(1-(TaskNum%2))))));
243#define SDMA_SET_INIT(RegAddr, TaskNum, Initiator) \
245 *(((volatile uint16 *)RegAddr)+TaskNum) &= (uint16)0xE0FF; \
246 *(((volatile uint16 *)RegAddr)+TaskNum) |= (((0x01F & Initiator)<<8) | \
247 (0<<SDMA_TCR_BIT_HOLD)); \
251#define SDMA_INIT_CHANGE(task, oldInitiator, newInitiator) { \
253 for (i=0; i<task->NumDRD; i++) { \
254 if (SDMA_INIT_READ(task->DRD[i]) == (uint32)oldInitiator) { \
255 SDMA_INIT_WRITE(task->DRD[i],newInitiator); \
261#define SDMA_SET_INITIATOR_PRIORITY(sdma, initiator, priority) \
262 *(((volatile uint8 *)&sdma->IPR0)+initiator) = priority;
266#define SDMA_INIT_READ(PtrDRD) \
267 (((*(volatile uint32 *)PtrDRD)>>SDMA_DRD_BIT_INIT) & (uint32)0x1F)
270#define SDMA_INIT_WRITE(PtrDRD, Initiator) { \
271 *(volatile uint32 *)PtrDRD = ((*(volatile uint32 *)PtrDRD) & 0xFC1FFFFF) | \
272 (Initiator<<SDMA_DRD_BIT_INIT); \
276#define SDMA_INIT_CHANGE(task, oldInitiator, newInitiator) { \
278 for (i=0; i<task->NumDRD; i++) { \
279 if (SDMA_INIT_READ(task->DRD[i]) == (uint32)oldInitiator) { \
280 SDMA_INIT_WRITE(task->DRD[i],newInitiator); \