[an error occurred while processing this directive]
|
При инициализации в них заносишь любое значение, во все одинаковое. Все 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: info@telesys.ru