Вот эстэмщики определили структуру и новый тип данных
typedef struct SPI_struct
{
__IO uint8_t CR1; /*!< SPI control register 1 */
__IO uint8_t CR2; /*!< SPI control register 2 */
__IO uint8_t ICR; /*!< SPI interrupt control register */
__IO uint8_t SR; /*!< SPI status register */
__IO uint8_t DR; /*!< SPI data I/O register */
__IO uint8_t CRCPR; /*!< SPI CRC polynomial register */
__IO uint8_t RXCRCR; /*!< SPI Rx CRC register */
__IO uint8_t TXCRCR; /*!< SPI Tx CRC register */
}
SPI_TypeDef;
Но в коде они обращаются к элементам через вот такую штуку:
#define SPI ((SPI_TypeDef *) SPI_BaseAddress)
То есть в коде пишут например:
SPI->CR1 = SPI_CR1_RESET_VALUE;
Мой вопрос заключается в том, что я не понимаю как работает строка #define SPI ((SPI_TypeDef *) SPI_BaseAddress)
SPI_BaseAddress = адресу с которого начинаются все регистры SPI.
Спасибо.


