[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Сергей Борщ 27 апреля 2005 г. 10:55
В ответ на: W3100A + регистры-указатели отправлено mab 27 апреля 2005 г. 08:16

При инициализации в них заносишь любое значение, во все одинаковое. Все 4 байта используются внутри неизвестно зачем. А снаружи для смещения относительно начала буфера используешь необходимое количество (в зависимости от размера буфера, RMSR, TMSR) младших битов.
Ну, например (числа маленькие, чтоб было понятно): у тебя буфер размером 8 байт начинается с адреса 0x10. Значит, тебя интересуют 3 младших бита указателя. Тебе надо записать 5 байт. Предположим, ты прочитал из регистра указателя 0x43211234. Три младших бита равны 0x4.
Тебе надо писать в адреса 0x10 (4 mod 8), 0x10 + (5 mod 8), 0x10 + (6 mod 8), 0x10 + (7 mod 8), 0x10 + (8 mod 8), т.е. в адреса 0x14, 0x15, 0x16, 0x17, 0x10. А в указатель после записи записать 0x43211234 + 5.

Для буфера 2К будет выглядеть примерно так:


const uint16_t TxBuffer0 = 0x0000; // адреса начала буферов
const uint16_t TxBuffer1 = 0x0800;
const uint16_t TxBuffer2 = 0x1000;
const uint16_t TxBuffer1 = 0x1800;

uint32_t TxWritePtr; // значение указателя.
// здесь прочитать указатель в TxWritePtr
uint16_t offset = TxWritePtr & ( 2048 - 1 );
while (Counter++ < len) {
Write(TxBuffer1 + offset++, *buf++);
offset &= ( 2048 - 1 );
}
TxWritePtr = TxWritePtr + len;
// здесь записать TxWritePtr в указатель


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru