summaryrefslogtreecommitdiff
path: root/Libraries/NixieDriver/nixie_driver_process.h
blob: bc4b4ca7a1b51b157776ca015415342d6b044913 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef NIXIE_DRIVER_PROCESS_INCLUDED
#define NIXIE_DRIVER_PROCESS_INCLUDED

#include <stdint.h>
#include "FreeRTOS.h"
#include "queue.h"

// Схема драйвера Никси на трех сдвиговых 8-разрядных регистрах.
// Первые два регистра для цифр, третий регистр для выбора лампы

#define  MAX_TUBES  6
#define  MAX_DIGITS 13//11

// Коды цифр ламп для буфера tube_digit [] Значения 16-разрядные
#define  TUBE_DIGIT_0     8192  //0010 0000 0000 0000
#define  TUBE_DIGIT_1     128   //0000 0000 1000 0000
#define  TUBE_DIGIT_2     64    //0000 0000 0100 0000
#define  TUBE_DIGIT_3     32    //0000 0000 0010 0000
#define  TUBE_DIGIT_4     16    //0000 0000 0001 0000
#define  TUBE_DIGIT_5     8     //0000 0000 0000 1000
#define  TUBE_DIGIT_6     4     //0000 0000 0000 0100
#define  TUBE_DIGIT_7     2     //0000 0000 0000 0010
#define  TUBE_DIGIT_8     32768 //1000 0000 0000 0000
#define  TUBE_DIGIT_9     16384 //0100 0000 0000 0000
#define  TUBE_DIGIT_DP1   1     //0000 0000 0000 0001 любое отличное от остальных число, т.к. точки на лампах управляются от отдельных GPIO
#define  TUBE_DIGIT_DP2   256   //0000 0001 0000 0000 любое отличное от остальных число, т.к. точки на лампах управляются от отдельных GPIO
#define  TUBE_DIGIT_EMPTY 0

#define  TUBE_EMPTY_VALUE 0 // Было "10". Число, которое нужно записать в массив
                            // данных на вывод, чтобы получить негорящий
                            // индикатор

// Коды номера лампы для буфера tube_num [ MAX_TUBES ]
#define TUBE_NUM_6 1
#define TUBE_NUM_5 256
#define TUBE_NUM_4 512
#define TUBE_NUM_3 1024
#define TUBE_NUM_2 2048
#define TUBE_NUM_1 4096

// Структура данных на индикацию для передачи целиком всей структуры через
// очередь ОС
typedef struct {
  uint8_t indic_1;
  uint8_t indic_2;
  uint8_t indic_3;
  uint8_t indic_4;
  uint8_t indic_5;
  uint8_t indic_6;
} DataToIndicate_t;


void NixieDriver_SendValue     ( uint8_t *value_arr );

extern QueueHandle_t  queue_new_data;

#define send(X) xQueueSend ( queue_new_data, &X, 0 )
#define NixieDriver_SendValue2(X) send(X)

void ProcessNixieDriverFromISR ( void );

#endif //NIXIE_DRIVER_PROCESS_INCLUDED