Описание библиотеки микросхемы 5023ВС016 процессора "Спутник"
mkpd.c
См. документацию.
1 
29 #include "chip_5023BC016.h"
30 #include "system.h"
31 #include "mkpd.h"
32 
33 
39 void MKPD_Set_InvTX(MKPD_T *pMKPD, unsigned int invTX)
40 {
41  pMKPD->SETTING2 = (pMKPD->SETTING2 & ~(0x1 << 8)) | MKPD_SETTING2_INVTX(invTX);
42 }
49 void MKPD_Set_System_Clock(MKPD_T *pMKPD, uint32_t sys_clk)
50 {
51  pMKPD->SETTING0 = (pMKPD->SETTING0 & ~(0xFF << 24)) | MKPD_SETTING0_SYS_CLK(sys_clk-1);
52 }
53 
60 void MKPD_Set_Interpacket_Time(MKPD_T *pMKPD, uint32_t time)
61 {
62  if (time < 4)
63  {
64  time = 4;
65  }
66  pMKPD->SETTING1 = (pMKPD->SETTING1 & ~(0xF << 24)) | MKPD_SETTING1_TIME(time);
67 }
68 
75 void MKPD_Set_Wait_Time(MKPD_T *pMKPD, uint32_t rwait)
76 {
77  if (rwait < 21)
78  {
79  rwait = 21;
80  }
81  pMKPD->SETTING1 = (pMKPD->SETTING1 & ~(0xFF << 16)) | MKPD_SETTING1_RWAIT(rwait);
82 }
83 
90 void MKPD_Set_Edge_Time(MKPD_T *pMKPD, uint32_t edge)
91 {
92  pMKPD->SETTING1 = (pMKPD->SETTING1 & ~(0xFF << 8)) | MKPD_SETTING1_EDGE(edge);
93 }
94 
95 
106 uint32_t MKPD_Get_Interrupt(MKPD_T *pMKPD)
107 {
108  return pMKPD->INTERRUPT;
109 }
110 
111 
119 void MKPD_Set_BC_COM_Data(MKPD_T *pMKPD, MKPD_TX_T index, uint32_t com_data)
120 {
121  if (index == TX_ONE)
122  {
123  pMKPD->BCONE2 = (pMKPD->BCONE2 & ~(0xFFFF << 16)) | MKPD_BCONE2_COM_DATA(com_data);
124  }
125  else
126  {
127  pMKPD->BCTWO2 = (pMKPD->BCTWO2 & ~(0xFFFF << 16)) | MKPD_BCTWO2_COM_DATA(com_data);
128  }
129 }
130 
138 void MKPD_Set_BC_Transaction_Format(MKPD_T *pMKPD, MKPD_TX_T index, uint32_t type_trans)
139 {
140  if (index == TX_ONE)
141  {
142  pMKPD->BCONE2 = (pMKPD->BCONE2 & ~(0xF << 0)) | MKPD_BCONE2_TYPE_TRANS((type_trans-1)%10);
143  }
144  else
145  {
146  pMKPD->BCTWO2 = (pMKPD->BCTWO2 & ~(0xF << 0)) | MKPD_BCONE2_TYPE_TRANS((type_trans-1)%10);
147  }
148 }
149 
150 
151 
152 
153 
161 {
162  if (index == TX_ONE)
163  {
164  return (pMKPD->BCONE2 & MKPD_BCONE2_ENA) ? SET : RESET;
165  }
166  else
167  {
168  return (pMKPD->BCTWO2 & MKPD_BCTWO2_ENA) ? SET : RESET;
169  }
170 }
171 
179 {
180  if (index == TX_ONE)
181  {
182  return (pMKPD->BCONE4 & MKPD_BCONE4_STATUS) ? SET : RESET;
183  }
184  else
185  {
186  return (pMKPD->BCTWO4 & MKPD_BCTWO4_STATUS) ? SET : RESET;
187  }
188 }
189 
197 {
198  if (index == TX_ONE)
199  {
200  return (pMKPD->BCONE4 & MKPD_BCONE4_ERROR) ? SET : RESET;
201  }
202  else
203  {
204  return (pMKPD->BCTWO4 & MKPD_BCTWO4_ERROR) ? SET : RESET;
205  }
206 }
207 
215 {
216  if (index == TX_ONE)
217  {
218  return (pMKPD->BCONE4 & MKPD_BCONE4_TIMEOUT) ? SET : RESET;
219  }
220  else
221  {
222  return (pMKPD->BCTWO4 & MKPD_BCTWO4_TIMEOUT) ? SET : RESET;
223  }
224 }
225 
232 uint32_t MKPD_BC_Reply_Word(MKPD_T *pMKPD, MKPD_TX_T index)
233 {
234  if (index == TX_ONE)
235  {
236  return MKPD_BCONE3_REPLY(pMKPD->BCONE3);
237  }
238  else
239  {
240  return MKPD_BCTWO3_REPLY(pMKPD->BCTWO3);
241  }
242 }
243 
250 uint32_t MKPD_BC_Reply_Data(MKPD_T *pMKPD, MKPD_TX_T index)
251 {
252  if (index == TX_ONE)
253  {
254  return MKPD_BCONE3_REPLY_WORD(pMKPD->BCONE3);
255  }
256  else
257  {
258  return MKPD_BCTWO3_REPLY_WORD(pMKPD->BCTWO3);
259  }
260 }
261 
262 
263 
264 
265 
272 void MKPD_Set_Endpoint_RDATA(MKPD_T *pMKPD, uint32_t rdata)
273 {
274  pMKPD->EP1 = (pMKPD->EP1 & ~(0xFFFF << 16)) | MKPD_EP1_RDATA(rdata);
275 }
276 
277 
278 
285 {
286  return MKPD_EP3_EP_COM_DATA(pMKPD->EP2);
287 }
288 
295 {
296  return (pMKPD->EP2 & MKPD_EP2_EP_COM_TIMEOUT) ? SET : RESET;
297 }
298 
305 {
306  return (pMKPD->EP2 & MKPD_EP2_EP_COM_ERR) ? SET : RESET;
307 }
308 
315 {
316  return MKPD_EP3_EP_COM(pMKPD->BCTWO3);
317 }
318 
325 void MKPD_Set_Monitor_DMA_Address(MKPD_T *pMKPD, uint32_t dma_monitor_addr)
326 {
327  pMKPD->MONITOR0 = dma_monitor_addr;
328 }
329 
336 void MKPD_Set_Monitor_Memory_Size(MKPD_T *pMKPD, uint32_t memory_size)
337 {
338  pMKPD->MONITOR1 = memory_size;
339 }
340 
347 void MKPD_Set_Monitor_Threshold(MKPD_T *pMKPD, uint32_t threshold)
348 {
349  pMKPD->MONITOR2 = threshold;
350 }
351 
360 void MKPD_ConfigMonitor(MKPD_T *pMKPD, uint32_t address, uint32_t size, uint32_t threshold)
361 {
362  MKPD_Set_Monitor_Memory_Size(pMKPD, size);
363  MKPD_Set_Monitor_Threshold(pMKPD, threshold);
364  MKPD_Set_Monitor_DMA_Address(pMKPD, address);
366 }
#define MKPD_SETTING1_RWAIT(x)
Definition: mkpd.h:175
__RW uint32_t INTERRUPT
Definition: mkpd.h:62
FlagStatus MKPD_BC_IsWaiting(MKPD_T *pMKPD, MKPD_TX_T index)
Определяет, находится ли транзакция в очереди на передачу
Definition: mkpd.c:160
#define MKPD_EP3_EP_COM_DATA(x)
Макросы для регистра EP3.
Definition: mkpd.h:147
uint32_t MKPD_Get_Interrupt(MKPD_T *pMKPD)
Возвращает значение прерывания
Definition: mkpd.c:106
void MKPD_Set_Monitor_Threshold(MKPD_T *pMKPD, uint32_t threshold)
Задание порогового значения для монитора
Definition: mkpd.c:347
uint32_t MKPD_BC_Reply_Data(MKPD_T *pMKPD, MKPD_TX_T index)
Возвращает ответные данные, полученные от ОУ (для транзакций формата 5)
Definition: mkpd.c:250
static void MKPD_Set_Mode(MKPD_T *pMKPD, uint32_t mode)
Установка режима работы блока.
Definition: mkpd.h:316
Структура для доступа к регистрам МКПД.
Definition: mkpd.h:38
void MKPD_Set_Interpacket_Time(MKPD_T *pMKPD, uint32_t time)
Установка временного интервала между передачей пакетов
Definition: mkpd.c:60
#define MKPD_BCONE4_STATUS
Макросы для регистра BCONE4.
Definition: mkpd.h:91
#define MKPD_EP3_EP_COM(x)
Definition: mkpd.h:148
#define MKPD_BCONE2_COM_DATA(x)
Definition: mkpd.h:80
#define MKPD_EP2_EP_COM_ERR
Макросы для регистра EP2.
Definition: mkpd.h:141
void MKPD_ConfigMonitor(MKPD_T *pMKPD, uint32_t address, uint32_t size, uint32_t threshold)
Настройка монитора
Definition: mkpd.c:360
#define MKPD_SETTING1_EDGE(x)
Макросы для регистра SETTING1.
Definition: mkpd.h:174
void MKPD_Set_Monitor_DMA_Address(MKPD_T *pMKPD, uint32_t dma_monitor_addr)
Задание начального адреса DMA для монитора
Definition: mkpd.c:325
#define MKPD_BCONE2_TYPE_TRANS(x)
Макросы для регистра BCONE2.
Definition: mkpd.h:77
__RO uint32_t BCTWO3
Definition: mkpd.h:48
void MKPD_Set_Endpoint_RDATA(MKPD_T *pMKPD, uint32_t rdata)
Установка слова данных для передачи от ОУ
Definition: mkpd.c:272
#define MKPD_SETTING2_INVTX(x)
Definition: mkpd.h:185
Этот файл содержит описание адресного пространства микроконтроллера 5023ВС016.
__RO uint32_t BCONE3
Definition: mkpd.h:43
#define MKPD_BCONE4_ERROR
Definition: mkpd.h:92
Definition: mkpd.h:239
__RW uint32_t EP1
Definition: mkpd.h:51
Этот файл содержит структуры, макросы и функции необходимые для взаимодействия с аппаратным модулем М...
uint32_t MKPD_Get_Endpoint_Command_Word(MKPD_T *pMKPD)
Возвращает командное слово, принятое ОУ
Definition: mkpd.c:314
__RO uint32_t EP2
Definition: mkpd.h:52
#define MKPD_BCONE3_REPLY(x)
Definition: mkpd.h:86
void MKPD_Set_InvTX(MKPD_T *pMKPD, unsigned int invTX)
Установка инвертирования дифференциального сигнала на передаче
Definition: mkpd.c:39
FlagStatus
Тип для состояний флагов
Definition: types.h:64
#define MKPD_SETTING0_SYS_CLK(x)
Definition: mkpd.h:169
__RW uint32_t MONITOR2
Definition: mkpd.h:60
FlagStatus MKPD_BC_IsSending(MKPD_T *pMKPD, MKPD_TX_T index)
Определяет, передается ли транзакция в настоящий момент
Definition: mkpd.c:178
void MKPD_Set_BC_Transaction_Format(MKPD_T *pMKPD, MKPD_TX_T index, uint32_t type_trans)
Установка формата транзакции
Definition: mkpd.c:138
void MKPD_Set_Wait_Time(MKPD_T *pMKPD, uint32_t rwait)
Установка времени ожидания ОС или СД в режиме работы КШ и ОУ
Definition: mkpd.c:75
__RW uint32_t SETTING0
Definition: mkpd.h:54
__RO uint32_t BCONE4
Definition: mkpd.h:44
uint32_t MKPD_Get_Endpoint_COM_Data(MKPD_T *pMKPD)
Возвращает принятое от КШ слово данных
Definition: mkpd.c:284
#define MKPD_BCTWO4_TIMEOUT
Definition: mkpd.h:123
#define MKPD_BCONE4_TIMEOUT
Definition: mkpd.h:93
void MKPD_Set_Monitor_Memory_Size(MKPD_T *pMKPD, uint32_t memory_size)
Задание размера буфера монитора
Definition: mkpd.c:336
#define MKPD_BCONE3_REPLY_WORD(x)
Макросы для регистра BCONE3.
Definition: mkpd.h:85
#define MKPD_SETTING1_TIME(x)
Definition: mkpd.h:176
#define MKPD_BCTWO4_ERROR
Definition: mkpd.h:122
#define MKPD_BCTWO4_STATUS
Макросы для регистра BCTWO4.
Definition: mkpd.h:121
#define MKPD_EP1_RDATA(x)
Definition: mkpd.h:136
__RW uint32_t SETTING1
Definition: mkpd.h:55
void MKPD_Set_System_Clock(MKPD_T *pMKPD, uint32_t sys_clk)
Установка значения системной частоты
Definition: mkpd.c:49
FlagStatus MKPD_BC_IsTimeout(MKPD_T *pMKPD, MKPD_TX_T index)
Возвращает значение флага таймаута транзации
Definition: mkpd.c:214
FlagStatus MKPD_BC_IsError(MKPD_T *pMKPD, MKPD_TX_T index)
Возвращает значение флага ошибки транзации
Definition: mkpd.c:196
MKPD_TX_T
Выбор интерфейса передачи для контроллера шины
Definition: mkpd.h:237
__RW uint32_t MONITOR1
Definition: mkpd.h:59
#define MKPD_BCTWO3_REPLY(x)
Definition: mkpd.h:116
#define MKPD_BCTWO2_ENA
Definition: mkpd.h:109
__RW uint32_t MONITOR0
Definition: mkpd.h:58
Этот файл содержит структуры, макросы и функции необходимые для взаимодействия с регистрами общего на...
void MKPD_Set_Edge_Time(MKPD_T *pMKPD, uint32_t edge)
Установка времени запрещенного состояния дифференциального сигнала
Definition: mkpd.c:90
__RW uint32_t BCONE2
Definition: mkpd.h:42
FlagStatus MKPD_Get_Endpoint_COM_Timeout(MKPD_T *pMKPD)
Возвращает значение флага таймаута
Definition: mkpd.c:294
__RO uint32_t BCTWO4
Definition: mkpd.h:49
FlagStatus MKPD_Get_Endpoint_COM_Error(MKPD_T *pMKPD)
Возвращает значение флага ошибки в слове данных (используется в транзакциях №6, 10) ...
Definition: mkpd.c:304
__RW uint32_t BCTWO2
Definition: mkpd.h:47
Definition: types.h:64
uint32_t MKPD_BC_Reply_Word(MKPD_T *pMKPD, MKPD_TX_T index)
Возвращает ответное слово, полученное от ОУ
Definition: mkpd.c:232
#define MKPD_BCTWO3_REPLY_WORD(x)
Макросы для регистра BCTWO3.
Definition: mkpd.h:115
#define MKPD_EP2_EP_COM_TIMEOUT
Definition: mkpd.h:142
#define MKPD_BCTWO2_COM_DATA(x)
Definition: mkpd.h:110
void MKPD_Set_BC_COM_Data(MKPD_T *pMKPD, MKPD_TX_T index, uint32_t com_data)
Установка слова данных для передачи в транзакциях формата 6 или 10.
Definition: mkpd.c:119
__RW uint32_t SETTING2
Definition: mkpd.h:56
Definition: types.h:64
#define MKPD_BCONE2_ENA
Definition: mkpd.h:79