#c #sdk #spi #vivado
Вопрос:
Я новичок и учусь самостоятельно.
Мне нужно прочитать данные из SPI (FIFO). Я нашел пример.
- Создайте буферы чтения и записи
// 10 is a number of bytes to be received by SPI
u8 ReadBuffer[10];
u8 WriteBuffer[10];
- Функция чтения
#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 ссылается на «ввод-вывод с отображением памяти», который в данном случае был бы хорошим чтением и помог бы вам понять, что происходит