Считывание данных из регистра в C

#c #sdk #spi #vivado

Вопрос:

Я новичок и учусь самостоятельно.

Мне нужно прочитать данные из SPI (FIFO). Я нашел пример.

  1. Создайте буферы чтения и записи
 // 10 is a number of bytes to be received by SPI 
u8 ReadBuffer[10];
u8 WriteBuffer[10];
 
  1. Функция чтения
 #define SpiPs_RecvByte(BaseAddress)    (u8)XSpiPs_In32((BaseAddress)   XSPIPS_RXD_OFFSET)
 

которые я могу использовать следующим образом

 for(Count = 0; Count < ByteCount; Count  )
{
        ReadBuffer[Count] = SpiPs_RecvByte(Spi0.Config.BaseAddress);
}

 

Q1. Не мог бы кто-нибудь объяснить, как работает функция SpiPs_RecvByte ( подробно)?

Q2. Я протестировал «XSpi_Transfer» в своем симуляторе, как он использовался в примере. Мой компилятор (SDK xilinx) выдает мне следующее предупреждение: «неявное объявление функции». Почему это происходит?

PS Я использую ZedBoard Zynq 7000

Заранее благодарим вас за все ваши рекомендации и информацию?

Комментарии:

1. Под «регистрацией» вы подразумеваете диапазон адресов памяти, сопоставленных с устройством? В отличие от регистра процессора, который был моим первым взглядом на то, о чем вы спрашиваете?

2. @JohnBollinger Есть ли разница в реализации?

3. Между чтением регистра процессора и чтением данных с устройства с помощью сопоставления памяти? Я бы так и сказал. На уровне машинного кода требуются другие инструкции, а на уровне C нет способа выразить чтение из регистра процессора. С другой стороны, для чтения из памяти, сопоставленной с устройством, требуется только, чтобы был получен указатель на соответствующий адрес или переменная, непосредственно представляющая сопоставленную с устройством память-в любом случае с помощью средств, определенных реализацией.

4. @JohnBollinger ссылается на «ввод-вывод с отображением памяти», который в данном случае был бы хорошим чтением и помог бы вам понять, что происходит