Сейчас пишу драйвер для SPI интерфейса ( в виде класса на С++).
В документации на PCORE, например, сказано следующее:
All the SPI and INTR registers are 32-bit wide. The XPS SPI IP Core supports only word access to all SPI and INTR register modules.
Особенно обратите внимание на слово ONLY !
Далее смотрю Си-шный драйвер SPI, предоставляемый Xilinx, где приведено следующее:
/*
* Register offsets for the SPI. Each register except the CR & SSR is 8 bits,
* so add 3 to the word-offset to get the LSB (in a big-endian system).
*/
#define XSP_CR_OFFSET (XSP_REGISTER_OFFSET + 0x2) /* 16-bit Control */
#define XSP_SR_OFFSET (XSP_REGISTER_OFFSET + 0x4 + 3) /* Status */
#define XSP_DTR_OFFSET (XSP_REGISTER_OFFSET + 0x8 + 3) /* Data transmit */
#define XSP_DRR_OFFSET (XSP_REGISTER_OFFSET + 0xC + 3) /* Data receive */
#define XSP_SSR_OFFSET (XSP_REGISTER_OFFSET + 0x10) /* 32-bit slave select */
#define XSP_TFO_OFFSET (XSP_REGISTER_OFFSET + 0x14 + 3) /* Tx FIFO occupancy */
#define XSP_RFO_OFFSET (XSP_REGISTER_OFFSET + 0x18 + 3) /* Rx FIFO occupancy */
Ну и дальше в драйвере применяется доступ к этим регистрам по Byte, Half-Word, Word.
Пока я решил полагаться всё-таки на сам драйвер, нежели на слова, приведенные в описании PCORE.
Вопрос есть ещё такой. Скажем очень часто в некоторых 32-битных регистрах масса бит не используется ( Reserved ). Будет ли какая либо ошибочная ситуация ( типа Bus Transaction Error),
если писать ( или читать ) в такие регистры целым словом WORD. Или же надо в каждом конкретном случае учитывать доступ по Byte, Half-Word, Word.
Я пока склоняюсь к тому, что ничего страшного не произойдёт при 32-бит доступе, но хотелось бы
услышать подтверждение от знатоков.
С Уважением,
Игорь