MLC interface driver
MLC_drv.h
Go to the documentation of this file.
1 
151 #ifndef MLC_DRV_H_
152 #define MLC_DRV_H_
153 
154 #include "stdint.h"
155 #include "platform.h"
156 #include "MLC_drv_config.h"
157 #include "MLC_ext_module.h"
158 
169 typedef struct{
170  uint16_t cpld_fw_ver;
171  uint16_t fpga_fw_ver;
172  uint16_t pcb_hw_ver;
173  uint16_t adc_conf;
174  uint16_t mod_fw_ver;
175 } mlc_info_t;
184 typedef struct{
185  int16_t in0;
186  int16_t in0_low;
187  int16_t in1;
188  int16_t in1_low;
189  int16_t in2;
190  int16_t in2_low;
191  int16_t in3;
192  int16_t in3_low;
193  int16_t in4;
194  int16_t in4_low;
195  int16_t in5;
196  int16_t in6_low;
197  int16_t in7;
198  int16_t in7_low;
199  int16_t in8;
200  int16_t in8_low;
201 } mlc_adc_result;
213 extern mlc_info_t MLC_info_struct; /*< Internal MLC_info structure, which holds informations about MLC interface. */
214 
222 #if MCU_TYPE == MCU_TYPE_TMS320F2812 || MCU_TYPE == MCU_TYPE_TMS320F28335
223 // ZONE0, address 0x0000
224 #define BASE_ADDRESS 0x00004000
225 #endif
226 
227 #if MCU_TYPE == MCU_TYPE_TMS570LS3137
228 #define BASE_ADDRESS 0x60000000u
229 #endif
230 
231 /*--LATEX-CPLD-BLOCK-START--*/
232 /*******************************************************************************************/
233 // CPLD has address offset range 0xF
234 // write addresses constants
235 #define WRITE_AD_CONF 0x0000
236 #define WRITE_PWR_OUT 0x0001
237 #define WRITE_SETRES_AD 0x0002
238 #define WRITE_CLRRES_AD 0x0003
239 #define WRITE_DBGLEDS 0x0004
241 // read addresses constants
242 #define READ_VER 0x0000
243 #define READ_AD1 0x0001
244 #define READ_AD2 0x0002
245 #define READ_AD3 0x0003
246 #define READ_HV_INPUT 0x0004
247 #define READ_ARC 0x0005
248 #define READ_UIO 0x0009
249 #define READ_PCB_REV 0x000F
251 // read+write addresses constants
252 #define RW_CS_EXT1 0x0006
253 #define RW_CS_EXT2 0x0007
254 #define RW_CS_EXT3 0x0008
255 #define RW_UIO 0x0009
256 #define RW_UIO_CONF 0x000A
257 /*******************************************************************************************/
258 /*--LATEX-CPLD-BLOCK-END--*/
259 
260 /*--LATEX-FPGA-BLOCK-START--*/
261 /*******************************************************************************************/
262 // FPGA uses addresses higher than 0xF
263 #define READ_FPGA_VER 0x0010
271 #define RW_FPGA_LED_REG 0x0011
272 
278 #define WRITE_LCD_DISP 0x0012
280 #define FPGA_RESERVED_13 0x0013
281 #define FPGA_RESERVED_14 0x0014
282 #define FPGA_RESERVED_15 0x0015
283 #define FPGA_RESERVED_16 0x0016
285 #define FPGA_FAULTS_ADDR 0x0017
287 #define FPGA_RESERVED_18 0x0018
288 #define FPGA_RESERVED_19 0x0019
289 #define FPGA_RESERVED_1A 0x001A
290 #define FPGA_RESERVED_1B 0x001B
291 #define FPGA_RESERVED_1C 0x001C
292 #define FPGA_RESERVED_1D 0x001D
293 #define FPGA_RESERVED_1E 0x001E
294 #define FPGA_RESERVED_1F 0x001F
297 #define FPGA_LEDS_SHOW_DATA 0x0000
298 #define FPGA_LEDS_SHOW_PWMA 0x0100
299 #define FPGA_LEDS_SHOW_PWMB 0x0200
300 #define FPGA_LEDS_SHOW_PWMC 0x0300
301 #define FPGA_LEDS_SHOW_PWMD 0x0400
302 #define FPGA_LEDS_SHOW_PWME 0x0500
303 #define FPGA_LEDS_SHOW_PWMF 0x0600
305 /*******************************************************************************************/
306 /*--LATEX-FPGA-BLOCK-END--*/
307 
317 // AD numbering
318 #define AD_CH1 0x1
319 #define AD_CH2 0x2
320 #define AD_CH3 0x4
322 #define AD_SOCA 0x1
323 #define AD_SOCB 0x2
324 #define AD_SOCC 0x4
327 // AD config values
328 // oversampling setup values
329 // no OS
330 #define AD_OS0 0x0000
331 // 2xOS
332 #define AD_OS1 0x0001
333 // 4xOS
334 #define AD_OS2 0x0002
335 // 8xOS
336 #define AD_OS3 0x0003
337 // 16x OS
338 #define AD_OS4 0x0004
339 // 32xOS
340 #define AD_OS5 0x0005
341 // 64xOS
342 #define AD_OS6 0x0006
343 // range select constants
344 #define AD_RNG_5V 0x0000
345 #define AD_RNG_10V 0x0001
347 // Parameters for MLC_setup_AD_SOC() function
348 // mapping of convstart pins to ADs
349 // each AD has it own convstart pin
350 // CH1 - GPIO32/ADSOCA
351 // CH2 - GPIO33/ADSOCB
352 // CH3 - GPIO61 - no ADSOC from EV manager
353 
354 #define AD_SOC_ALL_DEFAULT 0x0000
355 #define AD_SOC_CH3_SOCA 0x1000
356 #define AD_SOC_CH3_SOCB 0x2000
357 #define AD_SOC_CH3_SOCAB 0x3000
358 #define AD_SOC_ALL_SOCA 0x4000
359 #define AD_SOC_ALL_SOCB 0x5000
361 // This flag turns on use of EOC interrupt
362 // It will use XINT1
363 //#define USE_AD_INTERRUPT 1 /*!< Allow ADC end of conversion interrupt */
364 
365 #define AD_IN0 0
366 #define AD_IN1 2
367 #define AD_IN2 4
368 #define AD_IN3 6
369 #define AD_IN4 8
370 #define AD_IN5 10
371 #define AD_IN6 12
372 #define AD_IN7 14
374 #define DMA_ADCH1 AD_CH1
375 #define DMA_ADCH2 AD_CH2
376 #define DMA_ADCH3 AD_CH3
384 #define PCB_REV_1 0x1
385 #define PCB_REV_2 0x2
386 #define PCB_REV_3 0x3
395 // define buttons, they are active at 0, data is inverted
396 // i.e. pushed button means that BTN_Sx returns '1'
397 #if MCU_TYPE == MCU_TYPE_TMS320F28335
398  #define CHECK_BTN_S5() !GpioDataRegs.GPADAT.bit.GPIO28
399  #define CHECK_BTN_S8() !GpioDataRegs.GPADAT.bit.GPIO29
400  #define CHECK_BTN_S6() !GpioDataRegs.GPADAT.bit.GPIO30
402  #if USE_256kB_RAM == 1
403  #define CHECK_BTN_S7() 0
404  #else
405  #define CHECK_BTN_S7() !GpioDataRegs.GPADAT.bit.GPIO31
406  #endif
407 #endif
408 
409 
410 #if MCU_TYPE == MCU_TYPE_TMS320F2812
411 #define CHECK_BTN_S5() !GpioDataRegs.GPFDAT.bit.GPIOF8
412 #define CHECK_BTN_S8() !GpioDataRegs.GPFDAT.bit.GPIOF9
413 #define CHECK_BTN_S6() !GpioDataRegs.GPFDAT.bit.GPIOF10
414 #define CHECK_BTN_S7() !GpioDataRegs.GPFDAT.bit.GPIOF11
415 #endif
416 
417 #if MCU_TYPE == MCU_TYPE_TMS570LS3137
418 #define CHECK_BTN_S5() gioGetBit(gioPORTA, 3)
419 #define CHECK_BTN_S8() gioGetBit(gioPORTA, 2)
420 #define CHECK_BTN_S6() gioGetBit(gioPORTA, 4)
421 #define CHECK_BTN_S7() gioGetBit(gioPORTA, 0)
423 void DELAY_US(float us);
425 #endif
426 
427 
440 void MLC_init();
441 
442 void MLC_global_enable();
443 void MLC_global_disable();
450 void MLC_PWR_on(uint16_t pwr);
451 
457 void MLC_PWR_off(uint16_t pwr);
458 
463 void MLC_DBG_set(uint16_t dbg);
464 
469 void MLC_DBG_clear(uint16_t dbg);
470 
471 // read/write macros - subtitute of inline functions, which do not work properly
472 // these macros allows to comunicate at rate about 20MB/s
480 #define MLC_WRITE(addr, data) *((volatile uint16_t*)BASE_ADDRESS+addr)=(uint16_t)(data)
481 
486 #define MLC_READ(addr) *((volatile uint16_t*)BASE_ADDRESS+addr)
487 
488 // ordinary functions with same behaviour as macros above
489 // there are slower (~4MB/s) but, saves some memory
495 __inline void MLC_write(uint16_t addr, uint16_t data) {*((volatile uint16_t*)(BASE_ADDRESS+addr))=(uint16_t)data;}
501 __inline uint16_t MLC_read(uint16_t addr) {return *((volatile uint16_t*)(BASE_ADDRESS+addr));}
502 
506 #define FPGA_check_faults() MLC_READ(FPGA_FAULTS_ADDR)
507 
511 #define NO_FAULTS 0x3F
512 
523 void MLC_ADC_reset(void);
524 
533 void MLC_ADC_setup(unsigned int os_1, unsigned int os_2, unsigned int os_3, unsigned int rng_1, unsigned int rng_2, unsigned int rng_3);
534 
540 void MLC_ADC_setup_SOC(uint16_t adsoc);
541 
546 void MLC_ADC_start_conv(void);
547 
552 void MLC_ADC_start_one_conv(uint16_t channel);
553 
559 volatile int16_t* MLC_ADC1_read(void);
560 
566 volatile int16_t* MLC_ADC2_read(void);
567 
573 volatile int16_t* MLC_ADC3_read(void);
574 
579 volatile int16_t* MLC_ADC1_get_res_ptr(void);
580 
585 volatile int16_t* MLC_ADC2_get_res_ptr(void);
586 
591 volatile int16_t* MLC_ADC3_get_res_ptr(void);
592 
598 
604 
610 
617 volatile int16_t* MLC_ADC_read(volatile int16_t* ad_res, uint16_t ad_addr);
618 
622 unsigned int MLC_ADC_wait(void);
623 
624 // helper function, it calculate voltage from measured value
631 float MLC_ADC_calc_volt(int16_t value, uint16_t range);
632 
639 void MLC_ADC_enable_isr(interrupt void* handler);
640 
644 void MLC_ADC_disable_isr(void);
645 
646 
647 // F2812 lacks DMA support
648 #if MCU_TYPE == MCU_TYPE_TMS320F28335 || MCU_TYPE == MCU_TYPE_TMS570LS3137
649 
656 void MLC_DMA_enable_isr(uint16_t channel, interrupt void* handler);
657 
662 void MLC_DMA_disable_isr(uint16_t channel);
663 
668 uint16_t MLC_DMA_active(void);
669 
674 void MLC_DMA_activate(void);
675 
680 void MLC_DMA_deactivate(void);
681 
682 
685 #endif
686 
692 // functions for LCD display, FPGA must have basic design to those functions work
698 void MLC_LCD_write_to(uint16_t pos, char chr);
704 void MLC_LCD_write_str(char* pStr, uint16_t pos);
705 
709 void MLC_LCD_clrscr(void);
710 
720 // constants corresponding
721 // with PCB marking of ADC outputs
722 #define DAC_CH_A 0
723 #define DAC_CH_B 1
724 #define DAC_CH_C 2
725 #define DAC_CH_D 3
726 #define DAC_CH_E 4
727 #define DAC_CH_F 5
728 #define DAC_CH_G 6
729 #define DAC_CH_H 7
731 extern uint16_t dac_values[8];
732 extern uint16_t dac_sel_ch[8];
734 void MLC_DAC_reset(void);
739 void MLC_DAC_control(uint16_t cmd);
740 
745 void MLC_DAC_write(uint16_t count);
751 void MLC_DAC_init(void);
752 
753 #define dac_reset() MLC_DAC_reset()
754 #define dac_control MLC_DAC_control
755 #define dac_write MLC_DAC_write
756 #define write_dac MLC_DAC_write
757 #define dac_init() MLC_DAC_init()
758 #define dac_sel_channel dac_sel_ch
759 #define dac_variables dac_values
773 #define DEBUG_LEVEL_NONE 0
774 #define DEBUG_LEVEL_ERR 1
775 #define DEBUG_LEVEL_WRN 2
776 #define DEBUG_LEVEL_INFO 3
778 #if DEBUG_LEVEL == DEBUG_LEVEL_INFO
779  #define DBG_ERR_PUTS(str) puts(str)
780  #define DBG_WRN_PUTS(str) puts(str)
781  #define DBG_INFO_PUTS(str) puts(str)
782 #endif
783 
784 #if DEBUG_LEVEL == DEBUG_LEVEL_WRN
785  #define DBG_ERR_PUTS(str) puts(str)
786  #define DBG_WRN_PUTS(str) puts(str)
787  #define DBG_INFO_PUTS(str) ;
788 #endif
789 
790 #if DEBUG_LEVEL == DEBUG_LEVEL_ERR
791  #define DBG_ERR_PUTS(str) puts(str)
792  #define DBG_WRN_PUTS(str) ;
793  #define DBG_INFO_PUTS(str) ;
794 #endif
795 
796 #if DEBUG_LEVEL == DEBUG_LEVEL_NONE
797  #define DBG_ERR_PUTS(str) ;
798  #define DBG_WRN_PUTS(str) ;
799  #define DBG_INFO_PUTS(str) ;
800 #endif
801 
813 void MLC_SCI_init(uint32_t baudrate);
820 void MLC_SCI_send_char(char c);
826 void MLC_SCI_send_str(char* str);
831 char MLC_SCI_recv_char(void);
832 
837 char MLC_SCI_char_avail(void);
838 
843 char MLC_SCI_wait_send(void);
844 
849 void MLC_SCI_send_char_wait(char c);
850 
853 #endif /* end of MLC_drv */
854 
void MLC_init()
Definition: MLC_drv.c:824
volatile int16_t * MLC_ADC1_read(void)
Definition: MLC_drv.c:1379
float MLC_ADC_calc_volt(int16_t value, uint16_t range)
Definition: MLC_drv.c:1393
int16_t in3_low
Definition: MLC_drv.h:192
void MLC_SCI_init(uint32_t baudrate)
void MLC_DMA_activate(void)
Definition: MLC_drv.c:901
uint16_t mod_fw_ver
Definition: MLC_drv.h:174
volatile int16_t * MLC_ADC3_read(void)
Definition: MLC_drv.c:1389
void MLC_global_enable()
Definition: MLC_drv.c:855
int16_t in7
Definition: MLC_drv.h:197
void MLC_LCD_write_to(uint16_t pos, char chr)
Definition: MLC_drv.c:1397
int16_t in7_low
Definition: MLC_drv.h:198
void MLC_ADC_setup_SOC(uint16_t adsoc)
Definition: MLC_drv.c:1422
void MLC_SCI_send_char(char c)
Definition: MLC_drv.c:1722
__inline void MLC_write(uint16_t addr, uint16_t data)
Definition: MLC_drv.h:495
int16_t in5
Definition: MLC_drv.h:195
int16_t in6_low
Definition: MLC_drv.h:196
void MLC_ADC_start_one_conv(uint16_t channel)
Definition: MLC_drv.c:1122
volatile mlc_adc_result * MLC_ADC3_get_res_strptr(void)
Definition: MLC_drv.c:1374
int16_t in0_low
Definition: MLC_drv.h:186
volatile int16_t * MLC_ADC1_get_res_ptr(void)
Definition: MLC_drv.c:1354
void MLC_LCD_write_str(char *pStr, uint16_t pos)
Definition: MLC_drv.c:1404
uint16_t MLC_DMA_active(void)
Definition: MLC_drv.c:891
void MLC_PWR_on(uint16_t pwr)
Definition: MLC_drv.c:1773
void MLC_ADC_reset(void)
Definition: MLC_drv.c:1061
__inline uint16_t MLC_read(uint16_t addr)
Definition: MLC_drv.h:501
uint16_t pcb_hw_ver
Definition: MLC_drv.h:172
int16_t in0
Definition: MLC_drv.h:185
void MLC_SCI_send_str(char *str)
Definition: MLC_drv.c:1764
int16_t in8
Definition: MLC_drv.h:199
void MLC_DMA_disable_isr(uint16_t channel)
Definition: MLC_drv.c:972
char MLC_SCI_char_avail(void)
Definition: MLC_drv.c:1657
volatile int16_t * MLC_ADC2_get_res_ptr(void)
Definition: MLC_drv.c:1358
int16_t in2_low
Definition: MLC_drv.h:190
uint16_t adc_conf
Definition: MLC_drv.h:173
#define BASE_ADDRESS
Definition: MLC_drv.h:228
volatile mlc_adc_result * MLC_ADC2_get_res_strptr(void)
Definition: MLC_drv.c:1370
void MLC_DBG_clear(uint16_t dbg)
Definition: MLC_drv.c:1791
int16_t in8_low
Definition: MLC_drv.h:200
void MLC_PWR_off(uint16_t pwr)
Definition: MLC_drv.c:1779
int16_t in4
Definition: MLC_drv.h:193
unsigned int MLC_ADC_wait(void)
Definition: MLC_drv.c:1239
char MLC_SCI_recv_char(void)
Definition: MLC_drv.c:1694
Header configuration file for MLC driver.
int16_t in4_low
Definition: MLC_drv.h:194
Header file which adding support for external module.
int16_t in3
Definition: MLC_drv.h:191
int16_t in1_low
Definition: MLC_drv.h:188
volatile int16_t * MLC_ADC3_get_res_ptr(void)
Definition: MLC_drv.c:1362
void MLC_DAC_write(uint16_t count)
Definition: MLC_drv.c:1551
void MLC_SCI_send_char_wait(char c)
Definition: MLC_drv.c:1747
void MLC_LCD_clrscr(void)
Definition: MLC_drv.c:1415
void MLC_DMA_deactivate(void)
Definition: MLC_drv.c:916
char MLC_SCI_wait_send(void)
Definition: MLC_drv.c:1680
volatile int16_t * MLC_ADC_read(volatile int16_t *ad_res, uint16_t ad_addr)
Definition: MLC_drv.c:1259
void MLC_global_disable()
Definition: MLC_drv.c:872
void MLC_DAC_init(void)
Definition: MLC_drv.c:1428
void MLC_ADC_enable_isr(interrupt void *handler)
Definition: MLC_drv.c:1008
void MLC_ADC_setup(unsigned int os_1, unsigned int os_2, unsigned int os_3, unsigned int rng_1, unsigned int rng_2, unsigned int rng_3)
Definition: MLC_drv.c:1191
void MLC_ADC_start_conv(void)
Definition: MLC_drv.c:1084
void MLC_ADC_disable_isr(void)
Definition: MLC_drv.c:1043
void MLC_DMA_enable_isr(uint16_t channel, interrupt void *handler)
Definition: MLC_drv.c:932
int16_t in2
Definition: MLC_drv.h:189
void MLC_DBG_set(uint16_t dbg)
Definition: MLC_drv.c:1785
volatile int16_t * MLC_ADC2_read(void)
Definition: MLC_drv.c:1384
uint16_t fpga_fw_ver
Definition: MLC_drv.h:171
mlc_info_t * pMLC_info_struct
Definition: MLC_drv.c:126
uint16_t cpld_fw_ver
Definition: MLC_drv.h:170
int16_t in1
Definition: MLC_drv.h:187
volatile mlc_adc_result * MLC_ADC1_get_res_strptr(void)
Definition: MLC_drv.c:1366