graa.c


1
void spi_init(char mode)
2
{
3
    pio.OutputDriverEnable(CS);
4
  pio.OutputDriverEnable(HOLD);
5
  pio.OutputDriverEnable(WP);
6
  pio.OutputDriverEnable(CLK);
7
  pio.OutputDriverEnable(MOSI);
8
  pio.OutputDriverDisable(MISO);
9
  pio.PullupDisable(MISO);
10
  
11
  pio.OutputLevelHigh(CS); pio.PullupEnable(CS);
12
  pio.OutputLevelLow(CLK);
13
  pio.OutputLevelHigh(HOLD);
14
  pio.OutputLevelHigh(WP);  
15
}
16
17
char spi(char data)
18
{
19
    char ret = 0;
20
    for(int i = 0; i < 8; i++)
21
      {
22
        if (data & (0x80>>i)) pio.OutputLevelHigh(MOSI); else pio.OutputLevelLow(MOSI);
23
        pio.OutputLevelHigh(CLK);
24
        if (pio.GetInputLevel(MISO)) ret |= (0x80>>i);
25
        pio.OutputLevelLow(CLK);
26
      }
27
    return ret;    
28
}
29
30
#define FM_WREN    0x06  // set write enable latch
31
#define FM_WRDI    0x04  // write disable
32
#define FM_RDSR    0x05  // read status register
33
#define FM_WRSR    0x01  // write status register
34
#define FM_READ    0x03  // read memory data
35
#define FM_WRITE  0x02  // write memory data
36
37
38
#define select()  pio.OutputLevelLow(CS)
39
#define deselect()  pio.OutputLevelHigh(CS)
40
41
#define SPI_MODE  0
42
43
void fram_read(unsigned addr, char *data, unsigned size)
44
{
45
    spi_init(SPI_MODE);
46
    
47
    select();
48
    spi(FM_READ);
49
    spi(addr >> 8);
50
    spi(addr);
51
    while (size--)*data++ = spi(0);
52
    deselect();
53
}
54
55
void
56
fram_write(unsigned addr, char *data1, unsigned size1)
57
{
58
    spi_init(SPI_MODE);
59
    
60
    select();
61
    spi(FM_WREN);
62
    deselect();
63
    
64
    select();
65
    spi(FM_WRITE);
66
    spi(addr >> 8);
67
    spi(addr);
68
    for (; size1; --size1) spi(*data1++);
69
    deselect();
70
}
71
72
void CSPI::Test()
73
{
74
  char* Hallo = "Hallo!";
75
  fram_write(128, Hallo, 7);
76
  Wait(100);
77
  char Blubb[8] = {0};
78
  fram_read(128, Blubb, 7);
79
  TFT.Out(1, 40, "Empfangen:");
80
  TFT.Out(1, 60, Blubb);    
81
  TFT.SetFontColor(RGB(63, 0, 0));
82
  for(int i = 0; i < 7; i++)
83
    {
84
        TFT.Out(1+i*25, 80, Blubb[i]);  
85
    }
86
  TFT.SetFontColor(RGB(63, 63, 63));
87
}