Как мне получить указатель из этого определения?
Определение: #define SPIE (*(SPI_t *) 0x0AC0) /* Serial Peripheral Interface */
и адрес регистра 0x0AC0
, SPI_t — это структура, определенная ниже в заголовочном файле:
/* Serial Peripheral Interface */
typedef struct SPI_struct
{
register8_t CTRL; /* Control Register */
register8_t INTCTRL; /* Interrupt Control Register */
register8_t STATUS; /* Status Register */
register8_t DATA; /* Data Register */
} SPI_t;
Я действительно понятия не имею, что происходит в определении. Похоже, указатель приводится к структуре, но я не уверен.
Что мне нужно это uint16_t*
указатель, так что я могу передать его функции. С помощью spi mySpi( &PORTB);
с конструктором
spi::spi(volatile uint16_t* reg)
{
spiReg = reg;
} //spi
результаты в Error 1 no matching function for call to 'spi::spi(PORT_t*)'
Определение #define SPIE (*(SPI_t *) 0x0AC0
создает символическое имя (SPIE) для 4 байтов памяти, расположенных в 0x0AC0. То есть 0x0AC0 это регистр управления, 0x0AC1 это регистр управления прерываниями и так далее.
Ваш код C должен ссылаться на них, как
SPIE.CTRL = 7; // set low 3 bits for some reason
SPIE.INTCTRL = 4; // set 3rd bit, disable all others
Чтобы получить адрес, вы можете «взять адрес» как обычно: &SPIE
, Это будет 0x0AC0 при оценке, но будет иметь тип SPI_t *
,
Ваш конструктор принимает 16-битный регистр, но SPIE определяет только 8-битные регистры, поэтому я не думаю, что он сработает так хорошо.
Других решений пока нет …