Я использую процессор NXP LH79525, ARM7TDMI. Имеется EEPROM, подключенный по шине SPI к порту SSP.
Цель состоит в том, чтобы прочитать EEPROM в SRAM для более быстрого доступа.
Настоящий рабочий код отправляет команду чтения в EEPROM, считывает данные по байтам, что занимает много времени.
Я хочу использовать DMA для чтения EEPROM на шине SPI напрямую, без вмешательства ЦП.
Вот мой фрагмент кода:
// Initialize the DMA for use with SPI bus.
// Source is the EEPROM on the SPI bus.
// Destination is "buffer".
p_dma_stream_2->source_low = 0U;
p_dma_stream_2->source_high = 0U;
const uint32_t dest_addr = (uint32_t) buffer;
p_dma_stream_2->dest_low = (dest_addr & 0xFFFFU);
p_dma_stream_2->dest_high = (dest_addr >> 16U);
p_dma_stream_2->max_count = bytesToRead;
*p_dma_intr_mask = 0U; // Disable all dma interrupts.
*p_dma_intr_clear = 0xFF; // Clear the interrupts.
SSP->dmacr = 0x01; // Enable reading with DMA
p_dma_stream_2->control = 0x06U; // + 0x01 to enable transfer.
// 0x400 - status of stream 2. 1 == stream is active.
uint32_t status = *p_dma_status;
while ((status & 0x400U) != 0U)
{
OSTimeDelay(10U); // 10 milliseconds
status = *p_dma_status;
}
Я считываю неправильные значения из EEPROM при использовании приведенного выше примера.
Регистры DMA считают правильно. SSP уже инициализирован перед этим фрагментом кода для чтения байтов.
Я ищу фрагмент примера рабочего кода, но не нашел его в Интернете.
sigrok
или, если она не слишком быстрая,bus pirate
), или вы можете просмотреть таблицу данных и перепроверить свои предположения, или, возможно, вы можете запрограммировать умный шаблон в EEPROM и просто посмотрите на чтение с помощью области. - person Chris Stratton   schedule 21.03.2014