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
63
64
|
//-------------------------------------------------------------------------
// Модуль MAX5437EUD.c
// Подпрограмма, посылающая байт резистору MAX5437EUD
//-------------------------------------------------------------------------
#include < pio/pio.h >
#include < intrinsics.h >
//выход - сигнал тактов для резистора контрастности LCD, ножка PB14, сигнал на схеме SCLK_R
#define PIN_SCLK_R {AT91C_PIO_PB14, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}
//выход - сигнал данных для резистора контрастности LCD, ножка PB15, сигнал на схеме DIN_R
#define PIN_DIN_R {AT91C_PIO_PB15, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}
//выход - сигнал выборки для резистора контрастности LCD, ножка PB17, сигнал на схеме CS_R
#define PIN_CS_R {AT91C_PIO_PB17, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}
#define PINS_MAX5437 PIN_SCLK_R, PIN_DIN_R, PIN_CS_R
static const Pin sclkMAX5437 = PIN_SCLK_R;
static const Pin csMAX5437 = PIN_CS_R;
static const Pin dinMAX5437 = PIN_DIN_R;
static const Pin MAX5437_Pins[] = {PINS_MAX5437};
//задержка не потребовалась - быстродействия у MAX5437EUD хватило
//static void spiDelay (void)
//{
// __no_operation();
//}
void pinSetup (void)
{
//настраиваем ножки, которые управляют электронным резистором
PIO_Configure(MAX5437_Pins, PIO_LISTSIZE(MAX5437_Pins));
}
void SendByteMAX5437EUD (u8 byte)
{
u8 bitCnt;
byte &= 0x7F; //выделяем только 7 младших бит
PIO_Clear(&sclkMAX5437); //SCLK == 0
PIO_Clear(&csMAX5437); //CS == 0
// spiDelay();
// spiDelay();
// spiDelay();
for (bitCnt=8;bitCnt!=0;bitCnt--)
{
if (byte & 0x80)
PIO_Set(&dinMAX5437);
else
PIO_Clear(&dinMAX5437);
byte <<= 1;
// spiDelay();
// spiDelay();
// spiDelay();
PIO_Set (&sclkMAX5437); //SCLK==1
// spiDelay();
// spiDelay();
// spiDelay();
PIO_Clear(&sclkMAX5437); //SCLK==0
}
// spiDelay();
// spiDelay();
// spiDelay();
PIO_Set(&csMAX5437); //CS == 0
}
|