Программирование ARM ARM: программная реализация SPI (управление электронным переменным резистором MAX5437EUD) Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


ARM: программная реализация SPI (управление электронным переменным резистором MAX5437EUD) Печать
Добавил(а) microsin   

Ядро AT91SAM7X256 у меня работало на частоте 48 МГц. Тип u8 определен как unsigned char. Микросхема MAX5437EUD работает совсем просто - байт, который в неё посылаем - а точнее, младшие 7 бит этого байта - определяют положение "движка" резистора (номинал у него кажется 50 кОм). Всего 128 позиций "движка", любую из которых мы можем задать, просто посылая байт подпрограммой SendByteMAX5437EUD.

 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 }

 

 

Добавить комментарий


Защитный код
Обновить

Top of Page